2016-04-02 20 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

私はcondtionalジャンプ – matheromqq

+0

を使用して行うことができます、それを行います。あるいは、あなたの質問にはない何かを暗示しています。そして、あなたの質問を詳細で編集してください。 – jbm

答えて

0

loopecxecxデクリメント後にecxが0でなければジャンプを実行します。あなたの最初のプログラムの問題は、を上書きする可能性が非常に高い、ループの本体にprintfを呼び出していることです。

を呼び出す前にecxの値を保存してから、loop命令の前にもう一度復元してください。

+0

私は無限に実行したくないです。私は両方のプログラムで5回後に終了したいと思います。しかし、それは第二のプログラムでのみ起こります。第1プログラムで何が間違っていますか? – matheromqq

+0

5回後に終了しないのはどちらですか? –

+0

"hello world"を印刷する最初のプログラム – matheromqq