6

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

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

MOV AL, F2h
ADD AL, 20h

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

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

MOV AH,F2h
ADD AH,20h

谢谢 !!

4

4 回答 4

5
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
于 2010-05-05T09:32:57.527 回答
2

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

于 2010-05-05T09:54:49.250 回答
0

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

于 2010-05-05T09:28:42.627 回答
0

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

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

于 2010-05-05T09:32:18.527 回答