Assembly Dili

MIPS Assembly Giriş

 

MIPS Simulator

İndir

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.

 

2. B registerına 4FH yükleyen ve 01H adresindeki porta gönderen programı yazınız.

 

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.

 

4. 2050H adresindeki veriyi alıp 25H dan çıkaran ve 2051H adresine kaydeden programı yazınız.

 

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.

 

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.

 

7. xx50H adresinden başlayarak 16 veriyi, xx70H adresinden itibaren kopyalayan programı yazınız.

 

Bu döküman www.ibasoglu.com’a aittir. Kaynak belirtmek suretiyle alıntı yapılabilir.