Mikroişlemciler ve Assembly Dili
R – Register
A, B, C, D, E, H, L bunlar register (kaydedici) kümeleridir. Her biri 1 Byte’lık veri tutar. (1 byte = 8 bit)
Akümülator A registerıdır. Matematiksel ve mantıksal işlemler A registerında yapılır.
BAYRAKLAR
Zero (Sıfır) Bayrağı: Sonuç sıfır olduğunda zero bayrağı 1 değerini alır. Aksi takdirde 0 değerini alır.
Carry (Elde) Bayrağı: Yapılan bir aritmetiksel işlemde elde olursa carry bayrağı 1 değerini alır.
Sign (İşaret) Bayrağı: Sonucun son (0,1,…7) 7. biti (en soldaki) 1 olursa işaret bayrağı 1 değerini alır. Aksi durumda 0 değerini alır.
KOMUTLAR
MOV Komutu
Bir registerdaki veriyi diğer registera yükler.
MOV A, B
B registerındaki veriyi A registerına yükler.
MVI Komutu
Bir registera girilen veriyi aktarır.
MVI R, 8-bit
MVI B, 1AH
1A verisini B registerına yükler.
IN Komutu
Giriş aygıtındaki veriyi okur ve A registerına yazar.
IN 8-bit (Port adresi)
OUT Komutu
A registerındaki veriyi çıkış portuna gönderir.
OUT 8-bit (Port adresi)
HLT Komutu
Programı sonlandırmak için kullanılır.
ADD Komutu
Belirtilen registerla A registerını toplar. Sonucu A registerına yazar.
ADD R
ADD B //A = A + B
B registerındaki veriyi ve A registerındaki veriyi toplar. Sonucu A registerına yazar.
ADI Komutu
8-bitlik bir veriyle A registerındaki veriyi toplar ve sonucu A registerına yazar.
ADI 8-bit
ADI 40H
SUB Komutu
A registerından başka bir registerı çıkartır. Sonucu A registerına atar.
SUB R
SUB D //A = A – D
SUI Komutu
A registerından 8-bitlik bir sayıyı çıkartır. Sonucu A registerına yazar.
SUI 8-bit
SUI 32H //A = A – 32H
INR Komutu
Belirtilen registerın içeriğini bir arttırır.
INR R
INR D
DCR Komutu
Belirtilen registerın içeriğini bir azaltır.
DCR R
DCR D
ORA Komutu
A registerı ile belirtilen registerı or (veya) kapısına sokar. Sonucu A registerına yazar.
ORA R
ORA B
ORI Komutu
A registerı ile girilen veriyi or (veya) kapısına sokar. Sonucu A registerına yazar.
ORI 8-bit
ORI 45H
ANA Komutu
A registerı ile belirtilen registerı and (ve) kapısına sokar. Sonucu A registerına yazar.
ANA R
ANA C
ANI Komutu
A registerı ile girilen veriyi and (ve) kapısına sokar. Sonucu A registerına yazar.
ANI 8-bit
ANI 76H
XRA Komutu
A registerı ile belirtilen registerı xor (özel veya) kapısına sokar. Sonucu A registerına yazar.
XRA R
XRA B
XRI Komutu
A registerı ile girilen veriyi xor (özel veya) kapısına sokar. Sonucu A registerına yazar.
XRI 8-bit
XRI 75H
Dallanma Komutları
JUMP 16-bit (adres) – Şartsız bir atlamadır. Belirtilen adrese atlar.
JUMP 2050H (veya etiket)
JC 16-bit (adres) – Carry (elde) bayrağı bir ise belirtilen adrese atlar.
JNC 16-bit (adres) – Carry (elde) bayrağı sıfır ise belirtilen adrese atlar.
JZ 16-bit (adres) – Zero (Sıfır) bayrağı bir ise belirtilen adrese atlar.
JNZ 16-bit (adres) – Zero (Sıfır) bayrağı sıfır ise belirtilen adrese atlar.
Register Çiftleri
B (B, C)
D (D, E)
H (H, L)
LXI Komutu
Belirtilen register çiftine belirtilen adresi atar.
LXI Rç, 16-bit (adres)
LXI B, 2050H
LDAX Komutu
Register çiftinde kayıtlı olan adresteki veriyi A registerına yükler.
LDAX Rç
Ramdeki 2050H adresinde FEH verisi kayıtlı olsun. B register çiftini gösterge olarak seçelim.
LXI B, 2050H
B register çiftine 2050H adresi atandı. Şimdi bu adresteki veriyi A registerına atalım.
LDAX B
B register çiftinde adres kayıtlıydı. B register çiftindeki adreste bulunan veri (FEH) A registerına atandı.
LDA Komutu
Belirtilen ramdeki adresdeki veriyi A registerına yükler.
LDA 16-bit
LDA 2050H
STAX Komutu
A registerındaki veriyi belirtilen register çiftinde bulunan ramdeki adrese yükler.
STAX Rç
D’yi gösterge olarak seçelim. 2050H adresini atayalım.
LXI D, 2050H
A daki veriyi D register çiftinde bulunan adrese atayalım.
STAX D
STA Komutu
A registerındaki veriyi belirtilen ramdeki adrese yükler.
STA 16-bit
STA 2050H
INX Komutu
Register çiftini bir arttırır.
INX Rç
DCX Komutu
Register çiftini bir azaltır.
DCX Rç
M, H (H, L) register çiftinde bulunan adresteki veriyi temsil eder.
MOV M, R
Belirtilen registerdaki veriyi, H register çiftinin temsil ettiği adrese atar.
MOV R, M
Belirtilen registera, H register çiftinin temsil ettiği adresteki veriyi atar.
RLC Komutu
A registerını bir bit sola kaydır.(8-bit)
RLC
MVI A, 50H
A daki veri 01010000
RLC
A daki veri 10100000
RAL Komutu
A registerını 1 bit sola kaydır. Carry bayrağıda dahil. (9-bit)
RAL
MVI A, 3A
A daki veri 00111010
RAL
Carry bayrağında 0 olduğunu varsayalım. Carry bayrağına sıfır atandı. A ‘ya carry bayrağı eklendi. A daki veri 01110100
RRC Komutu
A registerını bir bit sağa kaydır.(8-bit)
RRC
RAR Komutu
A registerını 1 bit sağa kaydır. Carry bayrağıda dahil. (9-bit)
RAR
Not: Carry bayrağı değişen biti tutar.
CALL Komutu
Alt programı çağırmak için kullanılır.
CALL 16-bit (adres)
RET Komutu
Alt program sonu.
RET
CMP, CPI Komutu
CMP R
CPI 8-bit
Karşılaştırma operatörüdür. A registerı ile belirtilen registerı veya 8-bitlik değeri karşılaştırır.
Eğer veriler eşitse Z=1 C=0
A registerı küçükse Z=0 C=1
A registerı büyükse Z=0 C=0
Örnekler
1. 01H nolu porttan veriyi okuyup 02H nolu porta gönderen programı yazınız.
1 2 3 |
IN 01H OUT 02H HLT |
2. B registerına 4FH yükleyen ve 01H adresindeki porta gönderen programı yazınız.
1 2 3 4 |
MVI B, 4FH MOV A, B OUT 01H HLT |
3. B registerına 32H, C registerına ise 1A değerini giren ve bunları toplayıp 01H nolu çıkış portuna gönderen programı yazınız.
1 2 3 4 5 6 |
MVI B, 32H MVI C, 1AH MOV A, B ADD C OUT 01H HLT |
4. 2050H adresindeki veriyi alıp 25H dan çıkaran ve 2051H adresine kaydeden programı yazınız.
1 2 3 4 |
LDA 2050H SUI 25H STA 2051H HLT |
5.C registerına 6FH, D registerına 4CH yazan; C registerını bir azaltan, D registerını bir artıran sonra C ve D registerını toplayan; 2050H adresine yazan programı yazınız.
1 2 3 4 5 6 7 8 |
MVI C, 6FH MVI D, 4CH DCR C INR D MOV A, C ADD D STA 2050H HLT |
6. D ve C registerlarına 9BH ve A7H sayılarını yükleyin. Daha sonra bu sayıları toplatın. Eğer toplam FFH tan büyükse PORT0 çıkışına 01H bilgisini yazdırın. Büyük değilse, toplamı görüntüleyin.
1 2 3 4 5 6 7 8 |
MVI D, 9BH MVI C, A7H MOV A, D ADD C JNC atla MVI A, 01H atla: OUT PORT0 HLT |
7. xx50H adresinden başlayarak 16 veriyi, xx70H adresinden itibaren kopyalayan programı yazınız.
1 2 3 4 5 6 7 8 9 10 |
MVI D, 10H LXI H, xx50H LXI B, xx70H atla:MOV A, M STAX B INX H INX B DCR D JNZ atla HLT |
Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.
14 Nisan 2013 @ 22:22
6.soruda toplatın demişsin sub la yapmıssın ismail add olmicakmıydı ?
14 Nisan 2013 @ 22:31
Düzeltildi Şerif 🙂
15 Nisan 2013 @ 09:23
7. soru şu şekilde olacaktı;
mvı d, 10h :sayaç on kez sayacak
lxi b,xx50
lxi h,xx70
(tekrar) ldax b
mov m,a :
inx b :b’yi bir arttırıyoruz
inx h :hl’yi bir arttırıyoruz
dcr d : dyi bir azaltıyoruz 0 olana kadar döngü dönecek.
lnz (tekrar)
15 Nisan 2013 @ 10:17
10H 10 değil 14 demektir. F-15, 10-16, 11-17, 12-18, 13-19, 14-20 bu onaltılık tabandır. 10’luk değil.
b deki adresteki veriyi alıp a ya taşıyıp sonra h,l de kayıtlı olan adrese kaydediyorsun. bendeki b sende h tam tersi aynı işlemi yapıyor.
Bende h,l’deki adresteki veriyi a’ya alıp sonra b’deki adrese kaydediyorum.
lnz-Inz değil JNZ
12 Haziran 2013 @ 11:33
DCR komutunun açıklamasında arttırır demişssin ismail kardeşim INR arttırır DCR azaltır.
Emeğine Sağlık
12 Haziran 2013 @ 11:40
EyvaAllah. Düzeltildi.
12 Haziran 2013 @ 11:53
Rlc komutunda 50 h yüklemiş ama 0101000 yazmışsın kardesim bu sekilde 28h oluyor o 01010000 olması gerekli 🙂 saygılar
13 Haziran 2013 @ 02:41
EyvaAllah. Düzeltildi.
24 Nisan 2015 @ 21:57
Elinize sağlık çok güzel olmuş
20 Temmuz 2015 @ 17:22
Teşekkürler.
31 Mayıs 2015 @ 16:24
teşekkürler hocam örnek sayısını arttırabilir miyiz
20 Temmuz 2015 @ 17:23
En kısa zamanda örnek sayısını arttıracağım.