【问题标题】:Question about ADD on ASM 8086关于 ASM 8086 上的 ADD 的问题
【发布时间】:2010-05-05 09:20:08
【问题描述】:

我在高中理论上学习 ASM 8086。 (这意味着我在笔记本上学习 ASM 8086,而从未在计算机上运行过)。

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

MOV AL, F2h
ADD AL, 20h

计算机会做什么? (AL,AX,CF,ZF的值是多少?)

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

MOV AH,F2h
ADD AH,20h

谢谢!!

【问题讨论】:

    标签: assembly x86 add


    【解决方案1】:
    MOV AL, F2h
    

    将值 0xF2 放入 AL(累加器)寄存器中。

    ADD AL, 20h
    

    将值 0x20 添加到 AL 寄存器中包含的值。

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

    AH 也是如此,因为它也是一个 8 位寄存器。
    要获得完整的值,您需要使用 16 位的 AX 寄存器。
    AX 由 AH(高)和 AL(低)组成,因此您可以单独访问高和低部分。

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

    【讨论】:

    • 既然是8bit寄存器,会设置进位标志吗?
    • 是的,AL寄存器溢出时会设置。
    • 你的图错了,AX只有16位。在386及以上,32位寄存器称为EAX,所以在32位代码中有EAX、AX、AH和AL(但没有办法将EAX的高16位寻址为16位值)。
    【解决方案2】:

    我还建议使用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,因此设置了进位。

    【讨论】:

      【解决方案3】:

      当我在学校学习 ASM 时,我使用了 this program. 它对调试简单的 asm 程序帮助很大。您只需将源代码放入编辑器,单击调试并逐步观察寄存器发生的情况

      【讨论】:

        【解决方案4】:

        我的 asm 有点生锈了.. 但我认为在你的第一个实例中,AL 会保持 12h,进位会使 AH 增加 1。

        下载this模拟器,它可以让你一步步地观察代码的执行,检查寄存器的值等等。比纸笔画有趣多了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-10
          • 2015-07-31
          • 1970-01-01
          • 2021-07-21
          相关资源
          最近更新 更多