2010-05-05 28 views
6

我正在學習高中的ASM 8086理論。 (這意味着我在筆記本上學習ASM 8086,並且從來沒有通過計算機運行它)。
關於在ASM 8086上添加的問題

而且我不明白 - 如果我這樣做會發生什麼:

MOV AL, F2h 
ADD AL, 20h 

會有什麼電腦做什麼? (這將是AL,AX,CF,ZF的價值?)

,如果我這樣做會發生什麼:

MOV AH,F2h 
ADD AH,20h 

謝謝!!

回答

5
MOV AL, F2h 

將值0xF2置於AL(累加器)寄存器中。

ADD AL, 20h 

將值0x20加到包含在AL寄存器中的值中。

AL將是0xF2 + 0x20。但AL是一個8位寄存器,所以該值將是0x12,而不是0x112。

同樣的事情爲AH,因爲它也是一個8位寄存器。
要獲得完整的值,您需要使用AX寄存器,它是16位。
AX由AH(高)和AL(低)組成,因此您可以分別訪問高和低部分。

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

由於它是一個8位寄存器,進位標誌是否被置位? – xtofl 2010-05-05 09:36:51

+1

是的,它將被設置爲AL寄存器溢出。 – Macmade 2010-05-05 09:41:24

+0

非常感謝Macmade,我現在更瞭解ASM的基礎知識。 :-) – Tal 2010-05-05 09:47:25

0

當我在學校學習ASM時,我使用this program.它幫助我調試簡單的asm程序。你只需把你的源代碼放到編輯器中,點擊調試,然後看看寄存器發生了什麼變化。

+0

哇! 我正在尋找那樣的東西好幾個月! 非常感謝! – Tal 2010-05-05 09:41:10

0

我的asm有點生疏..但我認爲在你的第一個例子中,AL會持有12h,增加一個AH。

下載this模擬器,它可以讓你一步步觀察代碼的執行情況,檢查寄存器的值等。比鉛筆和紙張更有趣。

1

我也建議使用D86 (which comes with A86),因爲它可以讓你在8086級的指令交互型,所以你可以看到每個指令後會發生什麼所有的寄存器和標誌。

此代碼(如其他人士指出):

MOV AL, F2h 
ADD AL, 20h 

只會影響標誌和AL寄存器。沒有其他八位寄存器會受到影響(甚至AH)。 AX會雖然改變,因爲它是由AH和AL組成,因此,如果AH爲42H:

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

特定操作的結果將設置進位標誌和奇偶標誌和清除溢出,零標誌和輔助進位標誌。

您可能認爲應設置溢出標誌,但溢出標誌將這些值視爲有符號值(在本例中爲-14和32),並且加法不超過最大有符號值(127)。進位標誌將這些值視爲無符號值(242和32),並且加法超出最大無符號值:242 + 32 = 274,這大於255,因此進位被設置。