1

私はx86プラットフォームでアセンブリ言語を学んでおり、最初の5つの数字を追加して値を画面に表示する簡単なプログラムを作成しました.以下は私のコードです

section .data
x db "value=%d" ,10,0
tc db "value is =%d" ,10,0
section .text
global main
extern printf

main:
mov ebx, 1
mov ecx,0
well_done:
add ecx ,ebx
push ebx
 push x

call printf
add esp,4
pop ebx
inc ebx


cmp ebx ,6

jnz well_done

push ecx
push tc
call printf
add esp,8
ret

しかし、私が得ている出力は以下のとおりです

value=1
value=2
value=3
value=4
value=5
value is =0

誰が私がどこで間違っているのか教えてもらえますか

4

1 に答える 1

3

ECXレジスタはCDECL呼び出し規約で呼び出し元に保存されます。つまり、関数呼び出し間でその値を保持したい場合は、あなた (呼び出し元) が自分で保存して復元する必要があります。

于 2013-06-13T10:35:47.210 に答える