这次大会计划的结果是什么?

问题描述 投票:0回答:1

我正在准备一项考试,我必须在没有计算机的情况下找到 x86 汇编程序的结果,特别是我对老师给我们的示例有疑问。

MOV AX,6326
OR EAX,0000FFF1h
AND EAX,0000000Fh
MOV BL,-1
SUB BL,250
MUL BL 

什么是AX?
如果我尝试自己做的话,过程似乎是:
在 OR 和

AND, EAX is 00000007h
之后,十进制为 7

SUB BL, 250
= -1 - 250 = -251
MUL BL
= -251 x 7 = -1757,因此没有符号 AX 等于 1757

但是如果我尝试在 VS 上运行它,结果是 35。

我认为差异是由两者的补码引起的,但我不明白为什么或在哪里发生这种变化。

assembly x86
1个回答
0
投票
MOV AX,6326                 18B6h  AX
OR  EAX,0000FFF1h       0000FFF7h EAX
AND EAX,0000000Fh       00000007h EAX
MOV BL,-1                     FFh  BL
SUB BL,250                    05h  BL
MUL BL                      0023h  AX

你对 EAX 的看法是正确的。
对于

MOV BL,-1
,您应该注意,CPU 在通过
MOV
加载寄存器时不会修改任何标志。该指令也可以读取
MOV BL,255
,因为这是存储在该寄存器中的实际位模式(-1 和 255 共享相同的位模式)。如果你这样看,减法就变成了非常正常的 255 - 250,生成 5。接下来的无符号
MUL
计算同样简单的 7 * 5,生成 35。

© www.soinside.com 2019 - 2024. All rights reserved.