ADuC841 Mikrodenetleyicisi - 8051 MimarisiBlog YazılarGömülü Sistemler

Assembly ile ADuC841 – [3] Adresleme Modları

8051 Assembly: Adresleme Modları Nedir, Nasıl Çalışır?

Assembly Dili Nedir?

Assembly dili, her komutun İngilizce karşılığının kısaltması (mnemonik) ile ifade edildiği, makine dili ile yüksek seviyeli diller arasında yer alan düşük seviyeli bir programlama dilidir.

Örneğin

Assembly dilinin avantajları:

  • Donanım üzerinde tam kontrol
  • Hızlı çalışan ve az bellek kullanan kod yazılabilir
  • Düşük seviyeli donanım erişimi mümkündür

Dezavantajı:

  • Aritmetik işlemler yazmak zordur.
  • Donanımı detaylıca bilmek gerekir.

 

Adresleme Modu Nedir?

Adresleme modu, bir komutta kaynağın ve hedefin nasıl belirtildiğini tanımlar.

8051’de mov komutu şu şekilde çalışır:

  • Veri byte düzeyinde transfer edilir
  • Veri kaynaktan hedefe doğru akar
  • 8051’de 5 farklı adresleme modu vardır

1. İvedi Adresleme (Immediate Addressing)

Mantığı:

Kaynaktaki veri, doğrudan komutun içinde sabit bir değer olarak yazılır. # işareti, arkasından gelen değerin bir adres değil, doğrudan veri olduğunu gösterir.

Kullanım Biçimleri:

Komut Açıklama
mov a, #data ACC’ye sabit veri yaz
mov Rn, #data R0–R7 saklayıcısına sabit veri yaz
mov @Ri, #data Ri’nin gösterdiği adrese sabit veri yaz
mov direct, #data RAM’deki doğrudan adrese sabit veri yaz
mov DPTR, #data16 16-bit veri pointer’ına 16-bit veri yaz

 

Örnekler ve Analizleri:

Örnek 1:

ACC saklayıcısına doğrudan 02h değeri yazılır. ACC → 00000010₂

Örnek 2:

RAM’deki 20h adresine, 20h değeri yazılır.
“Burada ilk 20h bir adres, ikinci 20h ise veridir!”

Örnek 3:

 PSW’de belirtilmiş BANK’a ait R0 saklayıcısına AAh değeri yazılır.

Örnek 4:

 DPTR’nin yüksek baytına (DPTRH) → 1Fh DPTR’nin düşük baytına (DPTRL) → E7h yazılır.


Örnek 5:

Port 0’a CCh değeri yazılır. Bu durumda port pinlerinin durumu:

P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
1 1 0 0 1 1 0 0

Lojik-1 olan pinler aktif (ON), Lojik-0 olan pinler pasif (OFF) durumdadır.

 

 

2. Doğrudan Adresleme (Direct Addressing)

Mantığı:

Komut içinde 8-bit bir adres doğrudan belirtilir. Bu adres dahili RAM’deki veya Özel Fonksiyon Kaydedicilerindeki (SFR) bir konumu gösterir.

Önemli Fark:

  • mov a, #02h → ACC’ye 02h verisini yaz (ivedi)
  • mov a, 02h → RAM’in 02h adresindeki veriyi ACC’ye yaz (doğrudan) # işareti varsa VERİ, yoksa ADRES!

Kullanım Biçimleri:

Örnekler ve Analizleri:

Örnek 1:

Aktif BANK’taki R7 saklayıcısındaki veri ACC’ye yazılır.


Örnek 2:

RAM’in 02h adresindeki veri ACC’ye transfer edilir.


Örnek 3:

RAM’deki 40h adresindeki veri, 30h adresine yazılır.


Örnek 4:

 RAM’deki 22h adresindeki veri okunarak ACC’ye yazılır.


Örnek 5:

 RAM’deki 30h adresindeki veri R5 saklayıcısına yazılır.


Örnek 6:

 ACC’deki veri doğrudan Port 2 çıkışına gönderilir.

ACC bitleri → Port 2 pinlerine bire bir aktarılır:

Bit Adresleme (Direct Addressing’in Alt Türü):

Hedef veya kaynak mutlaka carry flag (C) olmalıdır!

Örnekler:

 

 Uyarı: RAM’de bit adreslenen bölgede byte transferi yapılabilir, ancak byte adreslenen bölgeden bit transferi yapılamaz!

 Önemli: RAM’deki veriler enerji kesildiğinde kaybolur!

 

 

3. Saklayıcı Adresleme (Register Addressing)

Mantığı:

Kaynak veya hedef, doğrudan R0–R7 saklayıcılarından biridir. Saklayıcı kümesi PSW’deki BANK seçimine göre belirlenir.

Kural: Hedef ve kaynak aynı anda saklayıcı olamaz! mov r4, r7 → ❌ HATALI kullanım!

Örnekler:

Örnek 1:

ACC’deki veri R0 saklayıcısına yazılır.


Örnek 2:

RAM’deki R2 saklayıcısındaki veri B saklayıcısına yazılır.


Örnek 3:

 R5’teki veri ACC’ye yazılır.


Örnek 4:

Bu kullanım geçersizdir, Assembly hata verir!

 

 

4. Saklayıcı – Dolaylı Adresleme (Register Indirect Addressing)

Mantığı:

Bu modda adres komutun içinde açıkça yazılmaz. Bunun yerine bir saklayıcının içeriği adres olarak kullanılır. Yani saklayıcı, verinin adresini gösterir (pointer). Sadece R0 ve R1 dolaylı adresleme için kullanılabilir.

Örnekler:

Örnek 1:

R1’in içindeki değer bir adres olarak kullanılır, o adresteki veri ACC’ye yazılır.


Örnek 2:

Harici RAM’de R0’ın gösterdiği adresteki veri okunur.


Örnek 3 – Kod Parçası:

 Bu örnekte R0 = 40h olduğu için, ACC’ye RAM’in 40h adresindeki veri yazılır.


Örnek 4 – Kod Parçası:

Sonuç: 40h adresine 20h yazılır.


Pratik Uygulama – RAM’i Sıfırlama:

Tüm RAM’i sıfırlamak için 128 satır kod yazmak yerine dolaylı adresleme ile sadece 4 satırda yapılabilir:

Bu döngü RAM’deki tüm adresleri sıfırlar!

 

 

5. Saklayıcı – İndisli Adresleme (Register Indexed Addressing)

Mantığı:

Hedef veya kaynak adres, bir taban adres ile ACC’nin toplanmasıyla elde edilir. Taban adres olarak DPTR veya PC kullanılır. Bu mod özellikle Look-up Table (arama tablosu) erişimlerinde kullanılır.

Look-up Table Nedir?

RAM enerji kesildiğinde içeriği kaybolduğundan, sabit ve kalıcı veriler Code (Flash) belleğe yazılır. Bu sabit veri dizilerine Look-up Table denir.

Örnek 1 – 7-Segment Display’de 6 Sayısını Göster:

DPTR tablonun başını, A=6 ise tablonun 6. elemanı okunur → 7-Segment’te 6 görüntülenir.


Örnek 2 – P1’den Okunan Değerin Karesini P3’e Gönder:

P1’den 0–9 arası bir değer girildiğinde, tablodan o sayının karesi bulunur ve P3’e yazılır.

 

 

Özet Tablo – 5 Adresleme Modu

Mod Sembol Örnek Açıklama
İvedi # mov a, #05h Sabit değer doğrudan yazılır
Doğrudan adres mov a, 05h RAM adresi doğrudan belirtilir
Saklayıcı Rn mov a, r5 R0–R7 kullanılır
Dolaylı @Ri mov a, @r0 Saklayıcı adres göstericisi olarak kullanılır
İndisli @a+DPTR movc a, @a+DPTR Taban adres + ACC ile erişim

 

Direktifler:

Direktif Açıklama
EQU Sabit değere sembolik isim atar
ORG Kodun bellekte yerleştirileceği adresi belirtir
DB Program belleğine sabit byte değerleri tanımlar
END Derleyiciye programın sonunu bildirir

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu