最初に、私は組み立てに関してまったくの初心者であることを指摘したいと思います。コマンドラインからintとstringの2つの引数を取得するプログラムを作成する必要があります。次に、int 番号が示す回数だけ、string の最後の単語をコンソールに出力する必要があります。私は 32 ビットで Intel 構文を使用しています。これは重要なことだと思います。
例: ./a.out 3 "ab cd" は画面に "cdcdcd" と表示されます。
まず、最後の単語を見つけて画面に出力することに集中します。ループ内ではなく、1 回だけです。ループを追加することは、私にとって大きな問題ではありません。私は動作するコードを書くために最善を尽くしましたが、エラーなしでコンパイルされましたが、コンソールには何も出力されません - 最後の単語から "char by char" を出力するのに間違いがあると思います. 正しく印刷する方法がわかりません。私は助けてくれてとても感謝しています。私は大学で得たわずかな知識に限られているので、すべてのヒントは私が理解できるようにできるだけ簡単にしてください。:)
.intel_syntax noprefix
.globl main
.text
main:
push ebp
mov ebp, esp
mov ebx, [ebp + 12]
mov ecx, [ebx + 4] # int ECX
mov ebx, [ebx + 8] # string EBX
xor eax, eax
call findend
pop ebp
mov ebx, 0
mov ecx, 0
ret
findend:
mov dl, byte ptr [ebx + eax]
cmp dl, 0
jz findword
inc eax
jmp findend
findword:
dec eax
mov dl, byte ptr [ebx + eax]
cmp dl, ' '
jz foundword
jmp findword
foundword:
inc eax
mov dl, byte ptr [ebx + eax]
cmp dl, 0
jz theend
push eax
push edx
push offset msg1
call printf
add esp, 4
pop edx
pop eax
jmp foundword
theend:
ret
.data
msg1: .asciz "%c"