如何限制组件x86中的循环(无限打印)?

时间:2016-04-02 11:20:50

标签: assembly x86

section .data
msg db 'hello world',10,0

section .text
global main

extern printf

main: 
    mov ecx,5
    lable1:
        push msg
        call printf
        add esp,4
        loop lable1 
    ret
;;------------------------------------sample program--------------------------

section .data
val dd 20
msg db 'number is : %d',10,0    

section .text
global main

extern printf

main: 
    mov ecx,5
    lable1:
        inc dword[val]
        loop lable1
    push dword[val]
    push msg
    call printf
    add esp,8   
ret

1 个答案:

答案 0 :(得分:0)

loop递减ecx并在递减后ecx不为零时执行跳转。您的第一个程序中的问题是您在循环体中调用printf,这很可能会覆盖ecx

您应该在调用ecx之前保存printf()的值,然后在loop指令之前重新恢复它。