2016-04-02 67 views
-1
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 
+0

瞭解更多裝配。你想要做的是有條件的跳躍,所以要學習那個部分。 – jbm

+0

我可以做使用條件跳 – matheromqq

+0

好,然後做。或者你暗示某些不在你的問題中,然後用更多信息編輯你的問題。 – jbm

回答

0

loop遞減ecx並執行跳轉,如果ecx在遞減後不爲零。你的第一個程序中的問題是你在循環體內調用printf,這很可能會覆蓋ecx

在調用printf()之前,您應該保存ecx的值,然後在您的指令loop之前再次將其恢復。

+0

我不想無限運行我想在兩個程序中5次終止。但它只發生在第二個程序中。第一節目有什麼不對? – matheromqq

+0

哪一個5次後不終止? –

+0

打印「hello world」的第一個程序 – matheromqq