Assembly Dili
MIPS Assembly Giriş
MIPS Simulator
Not: Java JDK yüklemeyi unutmayın.
Registers (Kaydediciler)
Register No |
Alternatif Adı |
Açıklama |
---|---|---|
0
|
zero
|
0 değerini tutar. |
1
|
$at
|
(assembler geçicisi) assembler tarafından rezerve edilmiştir. |
2-3
|
$v0 – $v1
|
Fonksiyon sonuçları (function results) için kullanılır. Geçici kaydediciler (Temporary Registers) olarak kullanılabilir. |
4-7
|
$a0 – $a3
|
Altprogram (subroutine) için ilk dört parametre (arguments) için kullanılır. Yordam çağrıları (procedure calls) karşısında korunmamıştır. |
8-15
|
$t0 – $t7
|
Serbestçe kullanılan kaydedicilerdir. Yordam çağrıları (procedure calls) karşısında korunmamıştır. |
16-23
|
$s0 – $s7
|
Serbestçe kullanılan kaydedicilerdir. Yordam çağrıları (procedure calls) karşısında korunmuştur. |
24-25
|
$t8 – $t9
|
Serbestçe kullanılan kaydedicilerdir. Bunlar, $t0 – $t7 üzerine ek olarak eklenmiştir. Yordam çağrıları (procedure calls) karşısında korunmamıştır. |
26-27
|
$k0 – $k1
|
interrupt/trap handler (yakalama işleyicisi) tarafından kullanılmak üzere rezerve edilmiştir. |
28
|
$gp
|
global pointer. |
29
|
$sp
|
stack pointer Stack işleminde son adresi gösterir. |
30
|
$fp
|
frame pointer Yordam çağrıları (procedure calls) karşısında korunmuştur. |
31
|
$ra
|
Yordamlarda (procedure) geri dönüş adresini tutar. |
$f0 – $f31
|
float veya double veri türünü saklamak için kullanılan kaydedicilerdir. |
li Komutu
Bir register’a değer ataması yapar.
li, R, deger
li $t0, 14
la Komutu
Bir register’a adres ataması yapar.
la, R, adres
syscall
$v0 daki koda göre sys alt programı çalıştırır.
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.