我正在高中学习ASM 8086。 (这意味着我在笔记本上学习ASM 8086,而不是通过计算机来运行它。)
我不明白 - 如果我这样做将会发生什么:
MOV AL, F2h
ADD AL, 20h
电脑会做什么? (AL,AX,CF,ZF的价值是多少?)
如果我这样做将会发生什么:
MOV AH,F2h
ADD AH,20h
谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
我还建议使用D86 (which comes with A86),因为它允许您以交互方式键入8086指令,这样您就可以看到每条指令后所有寄存器和标志会发生什么。
此代码(正如其他人所指出的那样):
MOV AL, F2h
ADD AL, 20h
只会影响标志和AL寄存器。其他8位寄存器不会受到影响(即使是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,因此进位设置。
答案 2 :(得分:0)
当我在学校学习ASM时,我使用了this program.它帮助我调试了简单的asm程序。您只需将源代码放入编辑器,单击调试并逐步查看寄存器中发生的事情
答案 3 :(得分:0)
我的asm有点生疏......但我认为在你的第一个例子中,AL会持续12h并且进位会使AH增加1。
下载this模拟器,它会让您逐步观察代码的执行,检查寄存器的值等。比铅笔纸更有趣。