Amiga Dünyası sayı 1, sayfa 61

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 61

= 105 Bu işlem sonucunda ikili sayı sisteminde "01101001" Byte'ının, ondalık sayı sistemindeki değerinin 105 olduğunu hesaplıyoruz.

Bilgisayar ikili ve ondalık sayı sistemlerinin anlaşılma ve hesaplama zorluklarından dolayı onaltılık sayı sistemi diye adlandırılan, 16 sembolü bulunan bir sayı sistemini daha kullanır. Bu sayı sisteminde "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F" olarak 16 sembol tanımlanmıştır. 0'dan 9'a kadar olan rakamlara ek olarak, A'dan F'ye kadar 6 harf ile tanımlanmış sembol daha vardır. Bunların değeri ise;

A=10 B=11 C=12 D=13 E=14 F=15'dir. İkili sayı sisteminde, sayı haneleri ikinin üsleri olarak artar, onaltılık sayı sisteminde de buna paralel olarak sayı haneleri onaltının üsleri olarak artar.

Onaltılılık sayıların Ondalık sayı sistemine dönüşümü aşağıdaki şekilde yapılır. Örneğin: "DFF101" onaltılık sayı sistemindeki sayının ondalık değeri; D F F 1 0 1 =

13(1048576)+15(65536)+ 15(4096) + 1(256) + 0(16) -

+ 1 = 13631488 + 983040 + 61440 + 256 + 0+1 = 14676225 (ondalık sayı sistemindeki karşılığı)

Makina dilinde WORD, iki BYTE'a ve LONGWORD iki WORD'a karşılık gelir. Bundan ise LONGWORD'un dört BYTE'a da eşit olduğu çıkar. Kısaca aralarındaki ilişki aşağıdaki gibidir.

LONGWORD = 2 WORD =

4 BYTE

Daha ileriki sayılarda ikili ve onaltılık sayı sistemindeki sayıları gösterirken, bunları başlarına koyacağımız %, $ gibi işaretler ile birbirlerinden ayıracağız. $ işareti ile onaltılık sayı sistemindeki sayıları, % işareti ile ikili sayı sistemindeki sayıları temsil edeceğiz. Ondalık sayı sistemindeki sayıların ise önüne hiçbir işaret koymayacağız.

MOTOROLA 68000'İN

İÇ YAPISI

BASIC'de program yazarken belli değerleri, değişkenler diye adlandırdığımız veri saklayıcılarına atarız. Sonra programdaki rolüne göre değerini artırıp azaltır ya da onu bulunduğu değişkenden alıp kullanırız.

Makina dilinde ise programımızda kullanacağımız değişken sayıları, Register (sicil) diye adlandırdığımız veri saklayıcılarına atarız. Mikroişlemci içindeki bu registerler 32 bit uzunluğunda olup, mükemmel bir bilgi alış veriş hızına sahiptir.

68000'de bu registerlerden 17 tane bulunur. Bunlardan 8 tanesi veri saklayıcı register, 7 tanesi adres saklayıcı register, 2 tanesi ise yığın göstergecidir (daha sonra sırası ile açıklanacaktır).

32 Bit uzunluğunun anlamı ise; 32/8 = 4 BYTE demektir. Buradan da 68000 içindeki her register'in 32 Bit = 4 BYTE = 2 WORD = 1 LONGWORD bilgi alabileceğini çıkarıyoruz. Registerlerin alabileceği değerleri rakamsal olarak ifade etmek gerekirse 00000000'dan FFFFFFFF değerine kadar onaltılık sistemde herhangi bir sayı veya hafıza adresi olabilir. Yani aritmetik işlemlerde registerleri kullanırken hiçbir sorun çıkmayacaktır (Commodore 64 Makina dili kullanıcılarının büyük sorunu olan registerlerin 255'den büyük değer alamaması). Registerlerin (diğer bir deyişle değişkenlerin) BASIC'deki değişkenlerden farkları ise şudur: Basic'de hepimizin bildiği gibi değişkenlere A,B,C,D,E,F,G vb. isimler verip, bol sayıda değişken tanımlayıp kullanıyorduk. Fakat makina dilinde veri değişkenleri 8 tane ile sınırlıdır (fakat hiçbir zaman bunların azlığından şikayetçi olmayacaksınız). İsimleri ise D0-D1-D2-D3-D4-D5-D6-D7 olarak tanımlıdır. Registerleri kullanırken bu isimler ile kullanacağız.

Veri Registerinin üç ayrı kullanım modu vardır. Yukarıda 32 Bit olduklarından söz etmiştik. Modları ise; 8, 16 veya 32 bit şeklinde. Yani biz mikroişlemcinin veri saklayıcılarını ister tek byte (byte), ister 2 byte (word), istersek 4 byte (longword) olarak kullanabiliriz. Bu kullanımların farklarını ise bir örnek ile açıklayalım. 0 ile 255 arasında bir sayıyı registerlerin birinde saklamamız gerekiyor. Örneğin D0 no'lu registere atayacağız. D0 no'lu registeri 1 BYTE modunda kullanıma sokarız. Eğer sayımız 0 ile 65536 arasında ise registeri WORD modunda çalıştırmamız gerekir. Ve sayımız 65536'dan büyük bir sayı ise de, registerimizi zorunlu olarak LONGWORD'a programlarız. Bu modların çok iyi izlenmesi ve her registerin modlarının iyi düşünülmesi gerekir. Nedeni ise çok basit; zamandan ve hafızadan kazanmak. Tek bir Byte'a sığabilecek bir sayıyı LONGWORD olarak bir registere atıp onun 4 katı işlem ve hafıza harcamasına mani olmalıyız.

68000'de veri registerilerinden başka, 7 tane de adres registeri olduğunu söylemiştik. Adres registerleri A0-A1-A2-A3-A4-A5-A6 olarak isimlendirilmiştir. Bu registerlerin veri registerlerinden farkı, hafıza adreslerini depolamakta kullanılmalarıdır. Bunlar 68000'e verileri hangi hafıza adresinden alıp, nereye koyacağını bildirirler. Ayrıca, diyelim ki programımızda herhangi bir hafıza adresini devamlı kullanmamız gerekiyor. Bu adresi, adres registerlerinin birine atayıp buradan doğrudan registerin ismini kullanmak, size büyük bir kolaylık ve hız sağlar.

Makina dilinde, BASIC'deki gibi alfanümerik dizilerin atandığı A$, B$, C$, D$ gibi değişkenler de bulunmamaktadır. Bu gibi işlemler 68000'de şöyle yapılmaktadır. Örneğin BASIC'de A$ = "AMIGA" olarak yapılan işlem, makina dilinde "AMIGA" yazısının ASCII kodlarını hafızada herhangi bir yere arka arkaya koymak ve başlangıç adreslerini bizim istediğimiz bir adres registerine atamak şeklinde yapılır.

68000'in diğer iki registerleri ise şunlardır. PROGRAM COUNTER (Program Sayacı): 68000 çalışırken hafızadan bir komut alır. Bunu işleme sokar. İşi biten komutun arkasındaki bir başka komutu alır ve onu da okuyarak görevini yerine getirir. Bu böyle program bitene kadar devam eder. Bu arada program sayacı devamlı işlem halindedir. Yaptığı iş ise, mikroişlemcide bir sonraki işleme girecek komutun adresini içeriğinde tutmaktır. Uzunluğu 32 bit'tir.

STATUS REGISTER (Durum Sicili): Durum saklayıcı işlemci içinde 16 bit'lik bir iç hafıza alanıdır. 68000, icrasında sonra, bazı durumları kontrol ederek sonuçları bu registerdeki 16 FLAG'a (bayrak) aktarır. Flag dediğimiz nesneler, bir bit uzunluğundadır ve 1 veya 0 değerlerini saklarlar. Örneğin aritmetik işlemlere göre bu register içindeki flaglar bize bilgi verirler. Örneğin; bir toplama işleminde elde varsa veya bir çıkarma işleminde ödünç alma varsa CARRY (elde) bayrağı 1 değerini alır.

Gelecek sayımızdan itibaren 68000'in komutlarını öğrenmeye başlayacağız. Başarılar...

Klavyeyle gezinmek için ← ve → tuşları.