我真的試圖使while循環,通過0-10打印,但有一些錯誤...需要與NASM環
編譯這些一些建議:
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,並將其用於循環計數器。在正常的ABI中,EBX被保留在函數調用中:http://stackoverflow.com/a/34100481/224132 –
謝謝,我會試試:) – Bit87