【问题标题】:Why does this program crashes everytime?为什么这个程序每次都崩溃?
【发布时间】:2014-12-11 16:39:19
【问题描述】:

标题:问题 5

INCLUDE Irvine32.inc

.data
x dword ?
y dword ?
z dword ?

.code

Main PROC

Call ReadInt
Mov eax, x
Add eax, y
Add eax, z
Mov ebx, 3
div ebx


call Dumpregs
call crlf

exit
main ENDP
END main

【问题讨论】:

  • DIV 也会影响EDX,它没有被初始化。

标签: assembly x86 mean masm irvine32


【解决方案1】:

根据你提供的信息很难说。

崩溃的一个可能原因是您没有在除法之前清除edx。如果您阅读Intel's manual 中对DIV 的描述,您会看到div r/m32 实际上使用64 位寄存器对edx:eax 作为被除数。如果edx 恰好包含某个任意值,您就有可能得到一个不适合 32 位的商,这将导致异常。

因此,您通常需要在每个 div 之前清除 edx。这可以通过mov edx,0xor edx,edx 完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多