Assembly 关于ASM 8086附加模块的问题

Assembly 关于ASM 8086附加模块的问题,assembly,x86,add,Assembly,X86,Add,我在高中学习ASM 8086理论。(这意味着我在笔记本上学习ASM 8086,却从未在电脑上运行过)。 我不明白-如果我这样做会发生什么: MOV AL, F2h ADD AL, 20h 计算机将做什么?(AL、AX、CF、ZF的价值是多少?) 如果我这样做会发生什么: MOV AH,F2h ADD AH,20h 谢谢 当我在学校学习ASM时,我使用它来调试简单的ASM程序。您只需将源代码放入编辑器中,单击“调试”,然后逐步观察寄存器的情况,我的asm有点生锈了。。但我认为在你的第一个例子中

我在高中学习ASM 8086理论。(这意味着我在笔记本上学习ASM 8086,却从未在电脑上运行过)。

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

MOV AL, F2h
ADD AL, 20h
计算机将做什么?(AL、AX、CF、ZF的价值是多少?)

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

MOV AH,F2h
ADD AH,20h

谢谢

当我在学校学习ASM时,我使用它来调试简单的ASM程序。您只需将源代码放入编辑器中,单击“调试”,然后逐步观察寄存器的情况,我的asm有点生锈了。。但我认为在你的第一个例子中,AL将保持12小时,进位将增加1

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

MOV AL, F2h
将值0xF2放入AL(累加器)寄存器中

ADD AL, 20h
将值0x20添加到AL寄存器中包含的值

ADD AL, 20h
AL将为0xF2+0x20。但是AL是一个8位寄存器,因此该值将是0x12,而不是0x112

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

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

我还建议使用,因为它允许您以交互方式键入8086指令,这样您就可以看到每条指令之后所有寄存器和标志发生了什么

本规范(如其他规范所述):

只会影响标志和AL寄存器。不会影响其他八位寄存器(即使是AH)。AX将发生变化,因为它由AH和AL组成,所以如果AH为42小时:

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位寄存器,是否设置进位标志?是的,将设置为AL寄存器溢出。您的图表错误,AX只有16位。在386及以上版本上,32位寄存器称为EAX,因此在32位代码中有EAX、AX、AH和AL(但无法将EAX的上16位作为16位值寻址)。