16.05.2015 Views

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ADD DX, '0' ;Dodaj kod ASCII "zera" do rejestru<br />

Możesz sam sprawdzić, że po przekroczeniu wartości 9 przez sumę<br />

wszystko się trochę skomplikuje (kod ASCII zera - 48). Z równym<br />

skutkiem możnaby zastosować rozkaz<br />

ADD DX, 48<br />

Jeśli prawidłowo dobierzemy format danych, fragment programu<br />

napisany w asemblerze może korzystać z danych dokładnie tak<br />

samo, jak każdy inny fragment programu napisany w C/<strong>C++</strong>. Możemy<br />

zastosować dane o jednobajtowej długości (jeśli drugi, pusty<br />

bajt nie jest nam potrzebny). Zwróć uwagę, że posługujemy się w<br />

tym przypadku tylko "połówką" rejestru DL (L - Low - młodszy).<br />

[P057.CPP]<br />

#pragma inline<br />

void main()<br />

{<br />

const char *napis = "\nRazem warzyw: $";<br />

char marchewki = 2, pietruszki = 5;<br />

asm {<br />

MOV DX, napis<br />

MOV AH, 9<br />

INT 33<br />

MOV DL, marchewki<br />

ADD DL, pietruszki<br />

ADD DL, '0'<br />

MOV AH, 2<br />

INT 33<br />

}<br />

}<br />

W tej wersji zadeklarowaliśmy zmienne marchewki i pietruszki<br />

jako zmienne typu char, co jest równoznaczne zadeklarowaniu ich<br />

przy pomocy dyrektywy DB.<br />

Zajmijmy się teraz maszynową reprezentacją liczb typu unsigned<br />

long int (długie całkowite bez znaku). Ze względu na specyfikę<br />

zapisu danych do pamięci przez mikroprocesory rodziny Intel<br />

80x86 długie liczby całkowite (podwójne słowo - double word) np.<br />

12345678(hex) są przechowywane w pamięci w odwróconym szyku.<br />

Zamieniony miejscami zostaje starszy bajt z młodszym jak również<br />

starsze słowo z młodszym słowem. Liczba 12345678(hex) zostanie<br />

zapisana w pamięci komputera IBM PC jako 78 56 34 12.<br />

Gdy inicjujemy w programie zmienną<br />

long int x = 2;<br />

zostaje ona umieszczona w pamięci tak: 02 00 00 00 (hex).<br />

Młodsze słowo (02 00) jest umieszczone jako pierwsze. To właśnie<br />

- 167-

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

Saved successfully!

Ooh no, something went wrong!