关于ASM 8086 ADD的问题

时间:2010-05-05 09:20:09

标签: assembly x86 add

我正在高中学习ASM 8086。 (这意味着我在笔记本上学习ASM 8086,而不是通过计算机来运行它。)

我不明白 - 如果我这样做将会发生什么:

MOV AL, F2h
ADD AL, 20h

电脑会做什么? (AL,AX,CF,ZF的价值是多少?)

如果我这样做将会发生什么:

MOV AH,F2h
ADD AH,20h

谢谢!

4 个答案:

答案 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模拟器,它会让您逐步观察代码的执行,检查寄存器的值等。比铅笔纸更有趣。