AVR Assembly -5- LDS Komutu

AVR Assembly derslerimizin beşincisinde hafıza üzerinde işlem yapmaya başlayacağız. Hafıza birimlerini anlatırken AVR veri hafızasının GPR, SFR ve SRAM olarak üçe ayrıldığından bahsetmiştik. Genel Maksatlı Yazmaçlar, Özel Fonksiyon Yazmaçları ve SRAM için ayrı adresler ve komutlar kullanılmaktadır. Hangi adreslerin kullanılacağını önceki derslerimizde söylemiştik. Şimdi ise bu hafızalardan veri okumak ve bunlara veri yazmak için kullanılan komutlardan başlıcalarını anlatacağız.

LDS Komutu

İngilizce olarak LoaD direct from data Space olarak ifade edilen bu komut veri hafızasındaki (RAM bellek) bir hücredeki veriyi genel maksatlı yazmaçlardan birine yüklemek için kullanılır.

Yani bu komut RAM bellekteki belirtilen adresi okumakta ve bizim belirttiğimiz yazmaca yazmaktadır. Böylelikle bellekten okuma işlemi yapmış oluruz. C dilinde değişkenleri okuduğumuz gibi Assembly’de de bu değişkenlerin aslı olan hafıza adreslerini okuruz. İleride anlatacağımız konularda nasıl değişken benzeri yapıyı tanımlayacağımızı anlatacağız. Assembly’de değişkenler değil veri adresleri mevcuttur ve bunlar da 8 bitten ibarettir. 16-bitlik diye ifade edilen verileri de yine 8 bitlik iki parça olarak ele almamız gerekir. Komutun söz dizimi şu şekildedir.

Burada LDS komutundan sonra Rd hedef yazmacı ifade etmektedir. K ise sabit değer olup bizim yazacağımız hafıza adresidir. K adresi 0x0000 ve 0xFFFF arasında olabilir. Yani hafıza adresi olarak bize 16-bitlik bir skala verilmiştir. Bu da 0 ile 65535 arasında değer demektir. Yani AVR mikrodenetleyicilerde teorik olarak 64K RAM bulunabilir. Fakat hiçbir mikrodenetleyicide bu kadar fazla RAM kullanıldığını görememekteyiz. En fazla 4K olan RAM miktarı çoğu işte yeterli olduğu için üretici daha fazlasını koyma gereği duymamıştır. Program hafızası da teoride 8 Megabayt azami değere sahip olsa da en fazla 256KB değeri görmekteyiz.

Rd değerinin 0 ve 31 arasında değer aldığını yani 4 bit olduğunu da söylememiz gerekir. Opcode adı verilen makine kodunda operandlar için ayrılmış belli bir bit alanı mevcuttur. Toplamda genellikle 16 bitlik olan bir makine kodunda LDS, Rd ve K değerleri bir şekilde yazılmalıdır. Bu komut için kılavuza baktığımızda 16-bit ve 32-bit olmak üzere iki ayrı şeklinin olduğunu görmekteyiz. Hafızanın tamamının adreslendiğini esas alarak 32 bitlik makine kodunu gösterelim.

Görüldüğü gibi program sayacını bir değil iki artıran bu komut d ve k adında iki ayrı operand almaktadır. Bunlardan biri k adında olup 0 ve 31 dahil bunların arasında bir sayıdır. Bu hedef yazmaç olup k değeri ise belleğin adres değeridir. Geri kalan bir ve sıfırlar ise LDS komutuna ait olup makine dilindedir. Bu komutlar AVR mimarisinde bahsettiğimiz gibi komut çözümleyici (decoder) tarafından dijital devrede işlenmek üzere fiziksel olarak çözümlenir. Makine dilinin makinenin tam olarak anladığı dil olarak düşünmemek gereklidir. Fakat bundan ötesi yazılımsal değil fiziksel olarak gerçekleştiği için makine dilinden ilerisine gitmek mümkün değildir.

LDS komutu herhangi bir adresteki veriyi okuyup yazmaca yazabilir. Bu I/O yazmaçları da genel maksatlı yazmaçlar da olabilir. Fakat genel olarak RAM bellekteki veriyi okumak için kullanılır.

LDS komutu için örnek bir kod kullanalım.

Bu komut bellekteki 0x300 adresinde bulunan değeri R1 yazmacına kopyalar. 0x300 adresindeki değer bir değişikliğe uğramaz. Dikkat etmeniz gereken nokta 0x300 değerinin sayı değeri değil adres değeri olmasıdır. C’de Pointer (İşaretçiler) ile ifade ettiğimiz adres değeri burada komutlara ve konuma göre adres veya sayı olmaktadır. Örneğin 0x300 adresinde 50 değeri varsa R1 yazmacı da 50 değerini taşıyacaktır. Şimdi önceden öğrendiğimiz ADD komutu ile bu iki hafıza birimindeki değer üzerinde işlem yapalım.

LDS komutu için verdiğimiz örnekler yeterli olsa gerektir. Sonraki derste diğer veri okuma ve yazma komutlarını anlatarak dersimize devam edeceğiz.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.