【发布时间】:2015-12-06 03:10:36
【问题描述】:
我正在尝试创建一个从 0 到 10 打印但有一些错误的 while 循环...
用这些编译:
nasm -f elf myprog.asm
gcc -m32 -o myprog myprog.o
错误:
在输出中你可以看到 134513690..很多....
最后一行是segmentation fault
这是代码:
SECTION .text
global main
extern printf
main:
xor eax,eax ; eax = 0
myloop:
cmp eax,10 ; eax = 10?
je finish ; If true finish
push eax ; Save eax value
push number ; push number value on stack
call printf
pop eax
inc eax ; eax + 1
add esp,80 ; Im not sure what is this
jmp myloop ; jump to myloop
number db "%d",10,0 ; This is how i print the numbers
finish:
mov eax,1
mov ebx,0
int 0x80
【问题讨论】:
-
您应该在 main 的开始/结束处保存/恢复 ebx,并将其用于循环计数器。 EBX 在普通 ABI 中的函数调用中保留:stackoverflow.com/a/34100481/224132
-
谢谢,我试试看:)