2010-05-05 7 views
6

Studiuję ASM 8086 teoretycznie na liceum. (to znaczy, że studiuję ASM 8086 na notebooku i nigdy nie muszę go uruchamiać na komputerze).
Pytanie o ADD na ASM 8086

A ja nie rozumiem - co się stanie, jeśli mogę to zrobić:

MOV AL, F2h 
ADD AL, 20h 

Co zrobić komputer? (Co będzie wartość AL, AX, CF, ZF?)

i co się stanie, jeśli mogę to zrobić:

MOV AH,F2h 
ADD AH,20h 

Dziękuję !!

Odpowiedz

5
MOV AL, F2h 

Umieść wartość 0xF2 w rejestrze AL (akumulator).

ADD AL, 20h 

Dodaje wartość 0x20 do wartości zawartej w rejestrze AL.

AL będzie 0xF2 + 0x20. Ale AL jest rejestrem 8-bitowym, więc wartość będzie wynosić 0x12, a nie 0x112.

To samo dotyczy AH, ponieważ jest to również rejestr 8 bitów.
Aby uzyskać pełną wartość, należy użyć rejestru AX, który ma 16 bitów.
AX składa się z AH (wysoki) i AL (niski), dzięki czemu można uzyskać dostęp do wysokich i niskich części indywidualnie.

----------------EAX ---------------- 
       ------- AX -------- 
|----------------|--------|--------| 
|    | AH | AL | 
|----------------|--------|--------| 
    16 bits  8 bits 8 bits 
+0

Ponieważ jest to rejestr 8-bitowy, czy zostanie ustawiona flaga przenoszenia? – xtofl

+1

Tak, zostanie ustawiony, ponieważ występuje przepełnienie rejestru AL. – Macmade

+0

Dziękuję bardzo Macmade, teraz rozumiem podstawy ASM znacznie lepiej. :-) – Tal

0

Kiedy uczyłem się ASM w szkole, użyłem this program.. Bardzo pomogło mi to w debugowaniu prostych programów asm. Po prostu wstawiamy kod źródłowy do edytora, klikamy debugowanie i obserwujemy, co się stało z rejestrami, krok po kroku

+0

WOW! Szukałem czegoś takiego od miesięcy! Dziękuję bardzo !!! – Tal

0

Mój asm jest nieco zardzewiały .. ale myślę, że w pierwszej instancji AL miałaby 12 godzin, a zwiększyć AH o jeden.

Pobierz emulator this, pozwoli Ci oglądać krok po kroku wykonywanie kodu, sprawdzać wartości rejestrów itp. Dużo więcej radości niż ołówkiem i papierem.

1

Chciałbym również zalecamy stosowanie D86 (which comes with A86) gdyż pozwala wpisać w 8086 instrukcją interaktywny, dzięki czemu można zobaczyć, co dzieje się z wszystkich rejestrów i flag po każdej instrukcji.

Kod ten (jak inne podkreśliło):

MOV AL, F2h 
ADD AL, 20h 

wpłynie tylko flagi i rejestr AL. Nie wpłynie to na żaden inny ośmioboczny rejestr (nawet AH). AX zmieni chociaż, ponieważ składa się z AH i AL, więc jeśli AH był 42h:

Code   AL AH  AX 
MOV AL,F2h F2 42 42f2 
ADD AL,20h 12 42 4212 

Wynikiem tej konkretnej operacji ustawi flagę carry i flaga parzystości i usunąć przepełnienie, zero, znak i flagi pomocnicze.

Możesz myśleć, że flaga przepełnienia powinna być ustawiona, ale flaga przepełnienia traktuje wartości jako wartości oznaczone (w tym przypadku -14 i 32), a dodanie nie przekracza maksymalnej wartości podpisanej (127).Flaga przenoszenia traktuje wartości jako niepodpisane wartości (242 i 32), a dodanie przekracza maksymalną wartość bez znaku: 242 + 32 = 274, która jest większa niż 255, więc przeniesienie jest ustawione.