8086 mikroişlemci örnek sorular / Emu 8086'da Hazırladığım Assembly Örnekler - mehmetduran.com

8086 Mikroişlemci Örnek Sorular

8086 mikroişlemci örnek sorular

öğrenecekleriniz

i̇şlemcinin nasıl çalıştığını

assembly ve yüksek seviyeli programlama dilleri arasındaki farkları

intel8086 komut kümesini

emu8086 kurulum ve kullanımını

yüksek seviyeli programlama dillerinde veri yapılarının nasıl oluşturulduğunu

kesmeleri ve dosya i̇şlemlerini

temel i/o i̇şlemlerini ve donanım kesmelerini

mikroişlemci ve mikrodenetleyici arasındaki farkları

bilgisayar mimarilerini (harvard ve von neuman)

i̇şlemci mimarilerini (x86-x64)

flowgortihm ile algoritma oluşturmanın temellerini

sayı sistemlerini (decimal, binary, octal, hexadecimal)

prosedürleri ve makroları kullanmayı

gereksinimler

temel düzeyde bilgisayar kullanımı

çalışma azmi ve i̇stikrarı

daha önce programlama i̇le uğraşılmış olması faydalı olacaktır

en önemlisi sürekli araştırma yapmak

bu kurs kimler için uygun

  • assembly dilini öğrenmek i̇steyenler
  • üniversitelerde mikroişlemci dersleri için temel bilgi sahibi olmak i̇steyenler
  • intel8086 komut kümesini etkin olarak kullanmak i̇steyenler
  • güncel programlama dillerinin temelini öğrenmek i̇steyenler
  •  

bölümlerdeki hedeflerimiz neler olacak?

bölüm 1: kurstan etkin olarak faydalanabilmeniz için gerekli olan tüm temel bilgiyi edineceksiniz.

bölüm 2: programlama hakkında hiç bilginiz yoksa temel düzeyde algoritma ve programlama bilgisine sahip olacaksınız.

bölüm 3: sayı sistemleri hakkında detaylı bilgiye sahip olacaksınız.

bölüm 4: intel 8086 mikroişlemcisini tanıyacak ve emu8086 programında nasıl simüle edildiğini öğreneceksiniz.

bölüm 5: ram üzerinde verilerin nasıl saklandığını ve saklanan verilere nasıl erişildiğini en ince ayrıntısına kadar özümseyeceksiniz.

bölüm 6: intel 8086 komut kümesine alışmak ve yavaş yavaş alıştırmalar yapmak için gerekli olan temel komutları öğreneceksiniz.

bölüm 7: stack (yığın) olarak adlandırılan veri yapısının nasıl işlediğini net ifadelerle kavrayacaksınız.

bölüm 8: aritmetik mantık birimi (alu) hakkında bilgi sahibi olup aritmetiksel ve mantıksal komutların nasıl kullanıldığını göreceksiniz.

bölüm 9: yazmış olduğunuz programları normal akışlarından çıkartıp istediğiniz işlemleri yaptırmak için gerekli olan yönlendirme komutlarını tanıyacaksınız. ayrıca tekrarlı işlemler için döngülerin nasıl kullanılabileceğini ve farklı senaryoların nasıl işlenebileceğini öğrenmiş olacaksınız.

bölüm 10: özellikle ikili sayı sistemlerine indirgenip işlem yapılması gereken durumlar için kullanılan kaydırma ve döndürme komutlarının nasıl kullanıldığını öğreneceksiniz.

bölüm 11: dizi komutları olarak adlandırdığın bir başka ifade ile string komutlarının ne kadar önemli olduğuna şahit olacaksınız.

bölüm 12: tekrar eden yapıların hazır kod blokları haline getirip kod kalabalığından nasıl kurtulacağınızı ve kendi komutlarınızı nasıl oluşturacağınızı en ince ayrıntısına kadar öğreneceksiniz.

bölüm 13: kurs boyunca belki de uygulama yapmak için en çok ihtiyaç duyduğumuz kesmelerin ne olduğunu emsali görülmemiş detayları ile öğreneceksiniz.

bölüm 14: verilerimizi kalıcı olarak saklamak istediğimiz durumlarda dosyalara ihtiyaç duyarız bu bölümde de dosya ve klasör işlemlerinin nasıl gerçekleştirildiğine kesmeler penceresinden bakacağız.

bölüm 15: güncelleme(19.07.2020)-her ay proje eklemeyi düşündüğüm bu bölüme işlerimden dolayı maalesef her ay ekleme yapamayacağım.

bölüm 16: sizlerden gelen sorular üzerine eklediğim bu bölümde temel i/o(girdi/çıktı) işlemlerini ve donanım kesmelerini öğreneceksiniz.



14.mikroişlemci Programlama Teknikleri

14. MKROLEMC PROGRAMLAMA TEKNKLER


14.1. Programlamaya Giri
rnek Pr. 14-1 0040h bellek adresindeki 8-bit veriyi 0041h adresine transfer eden program
yaznz.
zm:
0040H adresindeki veriyi A yazmacna ykle
LDAA 0040H
A yazmacndaki veriyi 0041H adresine sakla
STAA 0041H
rnek Pr. 14-2 0040h bellek adresi ile 0041h adresindeki 8-bit veriyi toplayan ve sonucu 0042h
adresinde saklayan program yaznz.
zm:
Toplamada balang iin elde sfr yaplr
CLC
0040H adresindeki veriyi A yazmacna ykle
LDAA 0040H
A yazmacndaki veriye 41H adresindeki veriyi ekle ADCA 0041H
A yazmacndaki veriyi 0042H adresinde sakla
STAA 0042H
rnek Pr. 14-3 0040h bellek adresindeki 8-bit veriden 0041h adresindeki 8-bit veriyi karan ve
sonucu 0042h adresinde saklayan program yaznz.
zm:
karmada balang iin dn(elde) sfr yaplr
0040H adresindeki veriyi A yazmacna ykle
A yazm.daki veriden 41H adresindeki veriyi kar
A yazmacndaki veriyi 0042H adresinde sakla

CLC
LDAA 0040H
SBCA 0041H
STAA 0042H

rnek Pr. 14-4 0040h bellek adresindeki 8-bit veriyi 1-bit sola teleyen ve sonucu 0041h
adresinde saklayan program yaznz.
zm:
0040H adresindeki veriyi A yazmacna Ykle
A yazmacndaki veriyi 1-bit sola tele
A yazmacndaki veriyi 0041H adresinde sakla

LDAA 0040H
ASLA
STAA 0041H

rnek Pr. 14-5 0040h bellek adresindeki 8-bit verinin dk arlkl 4-bitini 0041h adresinde
saklayan program yaznz. 0041h bellek adresindeki 8-bit verinin yksek arlkl 4-bitini sfrlayn.
zm:
0040H adresindeki veriyi A yazmacna ykle
A yazm. veri ile 00001111 deerini VE ilemi yap
A yazmacndaki veriyi 0041H adresinde sakla

LDAA 0040H
ANDA #00001111B
STAA 0041H

rnek Pr. 14-6 0040h bellek adresindeki veriyi sfr ile dolduran (temizleyen) program yaznz.
zm:
A yazmacna 0 deerini ykle
A yazmacndaki veriyi 0040H adresinde sakla
veya
0040H adresindeki veriyi sfrla

LDAA #0H
STAA 0040H
CLR 0040H

222

14.2. Mikroilemcilerin Gelimi Komutlar


Mikroilemcinin baz komutlar program tasarmnda ska karlalaca dnlen bir fonksiyonu
yerine getirir.
rnek Pr. 14-7 32+29 lemini Toplamadan Sonra Akmlatr Ondala Ayarla Komutu (DAA)
ile yapnz.
zm:
evirici giri kaynak dosyas:
basla2:

org 0d019h
clc
ldaa #32h
adca #29h
daa
end

; programn balang adresi


; Elde bayran sfrla
; A akmlatrne 32H ykle
; A akm. Elde ile 29h topla
; sonucu BCDye dntr
; programn sonu

evirici program listesi k dosyas:


00028
D019
00029 (2) D019 0C
basla2:
00030 (2) D01A 86 32
00031 (2) D01C 89 29
00032 (2) D01E 19
00033
0000

org 0d019h
clc
ldaa #32h
adca #29h
daa
end

; programn balang adresi


; Elde bayran sfrla
; A akmlatrne 32H ykle
; A akm. Elde ile 29h topla
; sonucu BCDye dntr.
; programn sonu

32h + 29h = 5Bh DAA 61h


Komut kmesi ksmnda toplama komutunun alma ekli tablosu ile beraber dnlrse normal
toplama ileminde sonu ikili say olarak 5Bh olur. DAA komutu altrldnda deer 61h olarak
bulunur. Bu deer ondalk olarak istenen 32+29 toplama sonucu olan 61 deeridir.

223

14.3. Programlama in Ak Diyagram Yntemi


Program tasarmlarnda ok karlalan problemlerin genel olarak zm yntemini veren ak
diyagram yaplar vardr.
BALA

LK KOUL
BALA

1. LEM

2. LEM

LEMLER

DNG
KONTROL

:
n. LEM

SONULAR

DUR

DUR

ekil 14-1 Sral yaplan basit ilemler iin ak


diyagram

ekil 14-2 Karar verme, tekrarl ilemler


gerektiren problemlerin zm iin ak
diyagram

ekil 14-3 Karar verme, tekrarl ilemler


gerektiren problemlerin zm iin dng k
kontroln nce yapan ak diyagram

ekil 14-4 Birden fazla karar verme, ok seimli


ilemler gerektiren problemlerin zm iin
ak diyagram

224

Bala

Bala

lk koullama
Blm

lk koullama
Blm

lem Blm

Hayr

Dng Kontrol
Blm

Dng Kontrol
Blm

Grev
Tamam
m?

Grev
Tamam
m?

Evet
Sonu
Blm

Evet

Hayr
lem Blm

Son

Sonu
Blm

Son

a) son ilemden sonra kontrol

b) son ilemden nce kontrol

ekil 14-5 Program dngleri iin ak diyagramlar

225
rnek Pr. 14-8 Say dizisinin toplamnn hesaplayan programn ak diyagramn iziniz. 0040h
bellek adresinde say dizisinin boyutunu, 0042h bellek adresinde sonucu ve 0044h bellek
adresinden balayarak say dizisini saklaynz. Ayrca programn sonunda toplama sonucunu X
yazmacnda saklaynz.
zm:
Programn ak diyagram ekil 14-6da verilen ekilde tasarlanmtr. Ak diyagramnn sanda
ise her bir bloun gerekletirilmesi iin 6800 mikroilemcisi komut veya komut grubu
gsterilmitir.
Ak diyagram:
Program Karl:
BOYUT
EQU
TOPLAM EQU
DIZI_ADR EQU

Bala

LDX
STAA
LDX
STX

Boyut = 10
Toplam = 0
Dizin = 0

Toplam = Toplam +
(0044h + Dizin)

TOP1:

LDAA
ADDA
BCC
INC
ELD_YOK: STAA

0040H
0042H
0044H
#10
BOYUT
#0
TOPLAM
TOPLAM+1
DIZI_ADR,X
ELD_YOK
TOPLAM
TOPLAM+1

Dizin = Dizin + 1

INX

Dizin = Boyut ?

CPX
BNE

BOYUT
TOP1

LDX

TOPLAM

Hayr
Evet
Dizin = Toplam

Son

END

ekil 14-6 Boyutu deitirilebilen 10 elemanl say dizisinin toplam iin ak diyagram

226
rnek Pr. 14-9 Bellekteki 70H ile 78H adresleri arasndaki alandaki baytlarn sfr ile doldurulmas
(temizlenmesi).
zm:
Ak diyagram:
Program Karl:
;programn balangc
ORG 2000H
BALA
70HX

;balang adres deerini X yazmacna ykle


LDX #70H
;programdaki dngnn dallanma etiketi
L1:

00H(X+0)
X+1X
E

X79H
H

DUR

;dizinlenmi adresleme ile X+0 adresinin ieriini sfrla


CLR 0,X
;adres deerinin artrlmas
INX
;son adres sfrland m?
CPX #79H
BNE L1
;programn sonu
END

; CLRMEM1.ASM
; 0070H0078H adresleri arasndaki bellek alanndaki baytlarn
; sfr ile doldurulmas (temizlenmesi).
0000
CPU "6800.TBL"
0000
HOF "MOT8"
2000
ORG 2000H ; programn balangc
2000 CE0070
(3) LDX #70H
; balang adres deerini X yazmacna ykle
2003 6F00
L1:
(7) CLR 0,X
; X+0 adresinin ieriini sfrla
2005 08
(4) INX
; adres deerinin artrlmas
2006 8C0079
(3) CPX #79H
; son adres sfrland m?
2009 26F8
(4) BNE L1
; gelinmediyse L1e git
0000
END
; programn sonu
Balang adres deeri X yazmacna yklenir. Sonra bir dng kurularak X deikeni dizinlenmi
adresleme ile beraber sfrlama komutuyla istenen adres blgesi sfrlanr. Bunun iin X dizin
yazmacnn deeri bir sonraki adres ieriinin sfrlanmas iin dng iinde artrlr. Son adrese
gelinip gelinmedii X yazmacndaki adres deeri karlatrlarak belirlenir. Deer farklysa ileme
devam edilir. lemin bitmesi iin X yazmacnn deerinin 79h olmas gerekir.
Program Analiz Tablosu:
X Z (70h) (71h) (72h) (73h) (74h) (75h) (76h) (77h) (78h)
0
? ? ?
?
?
?
?
?
?
?
?
1 0070 0 00
2 0071 0
00
3 0072 0
00
4 0073 0
00
:
:
:
:
:
:
:
9 0078 0
00
10 0079 1
Programn toplam alma sresi = 3 + 9 * (7+4+3+4)
= 3 + 9 * 18 = 165 sistem saati.

227
rnek Pr. 14-10 Bellekteki 70H ile 78H adresleri arasndaki baytlarn temizlenmesini, sfr ile
doldurulmasn salayan programn azalan adres sayac ile tasarlanmas.
zm:
Ak diyagram:
Program Karl:
;programn balangc
BALA
ORG 3000H
;sfrla doldurulacak bayt adedini X yazmacna ykle
LDX #9H

09HX

;programdaki dngnn dallanma etiketi


L1:
00H(X+6FH)

;adres deerinin azaltlmas


DEX

X-1X

;dizinlenmi adresleme ile X+6FH adresinin ieriini sfrla


CLR 6FH,X

;son adres sfrland m?


BNE L1

X00H

;programn sonu
END

DUR

Program Listesi k Dosyas:


; CLRMEM2.ASM
; 0078H0070H adresleri arasndaki baytlarn
; sfr ile doldurulmas (temizlenmesi).
0000
CPU "6800.TBL"
0000
HOF "MOT8"
3000
ORG 3000H ; programn balangc
3000 CE0009
(3) LDX
#9H
; sfrlanacak bayt saysn X yazmacna ykle
3003 6F6F
L1:
(7) CLR
6FH,X ; X+6F adresinin ieriini sfrla
3005 09
(4) DEX
; bayt saysn azalt
3006 26FB
(4) BNE L1
; bayt says sfr deilse L1e git
0000
END
; programn sonu
Program Analiz Tablosu:
0
1
2
3
4
5
6
7
8
9
10

X
?
0009
0008
0007
0006
0005
0004
0003
0002
0001
0000

Z (78h) (77h) (76h) (75h) (74h) (73h) (72h) (71h) (70h)


? ?
?
?
?
?
?
?
?
?
0
0 00
0
00
0
00
0
00
0
00
0
00
0
00
0
00
1
00

Programn toplam alma sresi = 3 + 9 * (7+4+4)


= 3 + 9 * 15 = 138 sistem saati.

228
rnek Pr. 14-11 Aada verilen 6800 makine dili programn eksiklerini tamamlaynz ve
her satrndaki komutun aklamasn yanna yaznz. A akmlatr, X dizin yazmac,
durum yazmacnn Z (sfr) biti ve etkilenen bellek gzleri zerinde analizini yapnz ve
programn toplam alma sresini hesaplaynz.

Yazmalarn ilk durumu :


PC=E000h SP=006Fh X=0002h A=25h B=FAh CCR=CCh
Bellek gzlerinin ilk durumu (btn deerler hex olarak verilmitir.) :
E000
E000 ____
E003 ____
E005 ____
E008 ____
E00A ____
E00C ____
E00E ____
E00F ____
E011 ____
E013 ____
E015 ____
E016 ____
E018 ____
E01B ____
E01D ____
0000

LDX
STX
LDX
STX
L1:
LDAA
INX
STX
LDX
STAA
INX
STX
CPX
BNE
NOP
END

ORG
#30h
40h
#38h
42h
LDX
0,X

0E000h

40h

40h
42h
0,X
42h
#39h
L1

zm:
Programn tamam:
E000
ORG 0E000h ; programn balang adresi 0E000h
E000 CE0030
LDX #30h ;(3) X dizin yazmacna 30h deerini ykle.
E003 DF40
STX 40h ;(5) X dizin yazmacn 40h:41h adresine ykle.
E005 CE0038
LDX #38h ;(3) X dizin yazmacna 38h deerini ykle.
E008 DF42
STX 42h ;(5) X dizin yazmacn 42h:43h adresine ykle.
E00A DE40 L1: LDX 40h ;(4) X dizin yazmacna 40h:41h adresindeki veriyi ykl
E00C A600
LDAA 0,X ;(5) A akmlatrne (X+0) adresindeki veriyi ykle.
E00E 08
INX
;(4) X dizin yazmacn artr.
E00F DF40
STX 40h ;(5) X dizin yazmacn 40h:41h adresine ykle.
E011 DE42
LDX 42h ;(4) X dizin yazmacna 42h:43h adresindeki veriyi ykl
E013 A700
STAA 0,X ;(6) A akmlatrn (X+0) adresinde sakla.
E015 08
INX
;(4) X dizin yazmacn artr.
E016 DF42
STX 42h ;(5) X dizin yazmacn 42h:43h adresine ykle.
E018 8C0039
CPX #39h ;(3) X dizin yazmacn 39h deeri ile karlatr.
E01B 26ED
BNE L1 ;(4) sfr deilse L1e git
E01D 01
NOP
;(2) sfr ise program bitir.
0000
END
Programn analizi:
A
X
Z (40) (41) (42) (43) (38)
0 25 0002 1 13 14 15 16 05
1
0030 0 00 30
2
0038
00 38
3
0030
4 FC 0031
00 31
5
0038
FC
6
0039 1
00 39
Programn toplam alma sresi = (3+5+3+5)+ 1*(4+5+4+5+4+6+4+5+3+4)+2
= 16 + 1*44 + 2 = 62 sistem saati.

(0030)= FC
(0031)= FD
(0032)= FE
(0033)= FF
(0034)= 01
(0035)= 02
(0036)= 03
(0037)= 04
(0038)= 05
(0039)= 06
(003A)= 07
(003B)= 08
(003C)= 09
(003D)= 10
(003E)= 11
(003F)= 12
(0040)= 13
(0041)= 14
(0042)= 15
(0043)= 16
(0044)= 17
(0045)= 18

Footer menu

nest...

batman iftar saati 2021 viranşehir kaç kilometre seferberlik ne demek namaz nasıl kılınır ve hangi dualar okunur özel jimer anlamlı bayram mesajı maxoak 50.000 mah powerbank cin tırnağı nedir