我正在學習高中的ASM 8086理論。 (這意味着我在筆記本上學習ASM 8086,並且從來沒有通過計算機運行它)。
關於在ASM 8086上添加的問題
而且我不明白 - 如果我這樣做會發生什麼:
MOV AL, F2h
ADD AL, 20h
會有什麼電腦做什麼? (這將是AL,AX,CF,ZF的價值?)
,如果我這樣做會發生什麼:
MOV AH,F2h
ADD AH,20h
謝謝!!
我正在學習高中的ASM 8086理論。 (這意味着我在筆記本上學習ASM 8086,並且從來沒有通過計算機運行它)。
關於在ASM 8086上添加的問題
而且我不明白 - 如果我這樣做會發生什麼:
MOV AL, F2h
ADD AL, 20h
會有什麼電腦做什麼? (這將是AL,AX,CF,ZF的價值?)
,如果我這樣做會發生什麼:
MOV AH,F2h
ADD AH,20h
謝謝!!
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
當我在學校學習ASM時,我使用this program.它幫助我調試簡單的asm程序。你只需把你的源代碼放到編輯器中,點擊調試,然後看看寄存器發生了什麼變化。
哇! 我正在尋找那樣的東西好幾個月! 非常感謝! – Tal 2010-05-05 09:41:10
我的asm有點生疏..但我認爲在你的第一個例子中,AL會持有12h,增加一個AH。
下載this模擬器,它可以讓你一步步觀察代碼的執行情況,檢查寄存器的值等。比鉛筆和紙張更有趣。
我也建議使用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,因此進位被設置。
由於它是一個8位寄存器,進位標誌是否被置位? – xtofl 2010-05-05 09:36:51
是的,它將被設置爲AL寄存器溢出。 – Macmade 2010-05-05 09:41:24
非常感謝Macmade,我現在更瞭解ASM的基礎知識。 :-) – Tal 2010-05-05 09:47:25