assembly IMUL指令后的CF标志和OF标志

vc6uscn9  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(133)

在IMUL的描述中,它说:
如果乘积的上半部分不是下半部分的符号扩展,则设置进位和溢出标志。
所以我有一些汇编代码:

MOV AL, 48
MOV BL, 4
IMUL BL ; AX = 00C0h, AH = 00 is positive and AL = C0 is negative so CF = OF = 1

MOV AX, 0x8760
MOV BX, 0x100
IMUL BX ; DX:AX = FF87:6000, DX is negative and AX is positive so CF = OF = 1

字符串
但在这张照片里

MOV AX, 0xFFF6
MOV BX, 0x1FFE
IMUL BX ; in debug, the result is DX:AX = FFFE:C014, CF = OF = 1


DX和AX都是负数,那么为什么设置CF和OF?

s2j5cfk0

s2j5cfk01#

下半部分的符号延伸表示:

  • 取下半部分的最高位(AX),并重复它以获得适当的大小(=>给出0000或FFFF)
  • 这等于上半部分吗?(在你的情况下DX=FFFE)
  • yes =>标志为0
  • no => flags为1.(因为FFFE!= FFFF)

基本上,它告诉你整个结果是否适合AX,或者DX是否也包含一些有趣的部分。

相关问题