【发布时间】:2017-01-27 12:55:55
【问题描述】:
我想添加以下数字:40、90、50 和 155,一共得到 355。
我想试验一下寄存器 AL 是否会有 (2^8) - 1 的位限制,当我编译代码并执行代码时,我得到十进制 1376331855。这是怎么发生的?
另外,我认为 355 大于 255,因此应该显示溢出异常。
我知道如果我使用 MOVZX 我将能够将计算带到 AX 的更高寄存器中。
另外,我对 AL 和 AH 之间的区别感到非常困惑。 AL和AH的内存分配有区别吗?
TITLE Adding
INCLUDE Irvine32.inc
.code
main PROC
mov al,0h ;
add al,28h ; 40
add al,5Ah ; 90
add al,32h ;50
add al,9Bh ;155
; total is 355
call DumpRegs
call writedec
exit
main ENDP
END main
【问题讨论】:
-
将
mov al,0h替换为mov ax,0h或mov eax,0h。我认为 Irvine 库使用 EAX。 -
我理解你为什么要这样做,但我很好奇使用寄存器 AL 所产生的价值。为什么是那个值而不是溢出错误?谢谢。
-
可能发生了溢出,但您没有检查它。
-
所以在命令行中,当溢出发生时,它永远不会告诉你,而是一个晦涩的数字是结果?谢谢
-
装配有神秘的方式。您可以使用 jxx 指令 (JO) 检查溢出。
标签: assembly x86 nasm masm irvine32