08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

Birlik kulanımının ikinci nedeni herhangi bir veri türünün parçaları üzerinde işlem yapmak<br />

ya da parçalar üzerinde işlem yaparak bir bütünü oluşturmaktır. Aşağıdaki örneği<br />

inceleyin:<br />

int türünün 2 byte olduğu bir sistemde aşağıdaki bildirimlerin yapıldığını düşünelim:<br />

typedef struct {<br />

unsigned char low_byte;<br />

unsigned char high_byte;<br />

}Word;<br />

typedef union {<br />

unsigned int i;<br />

Word w;<br />

}Wordform;<br />

bildirimlerinden sonra, Wordform türünden bir nesne tanımlanırsa bu birlik nesnesi, alçak<br />

(low_byte) ve yüksek (high_byte) anlamlı byte'larına ayrı ayrı erişilebilen bir tamsayı<br />

olarak kullanılabilir:<br />

#include <br />

int main()<br />

{<br />

Wordform wf;<br />

wf.w.low_byte = 0x12;<br />

wf.w.high_byte = 0x34;<br />

printf("%x\n", wf.i);<br />

}<br />

return 0;<br />

Yani Intel işlemcilerinin bulunduğu 16 bit sistemlerde yukarıdaki main işlevinin derlenip<br />

çalıştırılmasıyla:<br />

printf("%x\n", wf.i);<br />

çağrısı ile 3412 sayısı ekrana yazdırır. Motorola işlemcilerinde (big endian) düşük sayısal<br />

adreste düşük anlamlı düşük anlamlı byte değeri olacağına göre sayının ters olarak<br />

görülmesi gerekir.<br />

Benzer bir tema, işlemcilerin yazmaçlarının yazılımsal olarak temsil edilmesinde karşımıza<br />

çıkar.<br />

8086 işlemcilerinde toplam 14 yazmaç vardır.<br />

- 4 tane genel amaçlı yazmaç: AX, BX, CX, DX<br />

- 4 tane segment yazmacı: CS, DS, CS, ES<br />

- 2 tane indeks yazmacı: SI, DI<br />

- 3 tane gösterici yazmacı: IP, BP, SP<br />

- 1 tane bayrak yazmacı: F<br />

Bütün yazmaçlar 16 bit uzunluğundadır. Genel amaçlı yazmaçlar olan AX, BX, CX, DX<br />

yazmaçları 8'er bitlik iki parçaya ayrılır. Genel amaçlı yazmaçlar aşağıdaki gibi bağımsız<br />

8 bitlik yazmaçlar gibi de kullanılabilir.<br />

AX<br />

AH<br />

BX<br />

AL<br />

416

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!