我正在为一个类编写一个简单的汇编程序,并且遇到了一个奇怪的分段错误。这是一个将字节转换为千字节的非常简单的程序。但是,在执行转换的函数中,当我尝试将值 1024 移动到ebx
寄存器中时出现分段错误。在使用寄存器时,我从来没有遇到过这种问题。有人知道是什么原因造成的吗?我想这是我忽略的简单事情。谢谢!
asm_main:
enter 0,0
pusha
mov eax, 0
mov ebx, 0
call read_int
push eax
call functionA
popa
mov
leave
ret
functionA:
mov eax, [esp + 4]
call print_int
call print_nl
mov ebx, 1024 ;segmentation fault occurs here
div ebx
call print_int
ret
更新:一个有趣的发现是,如果我删除与堆栈交互的行,push eax
并且mov eax, [esp + 4]
,不再存在分段错误。eax
但是,我在执行后得到了一个疯狂的结果div ebx
。