0

最初に、私は組み立てに関してまったくの初心者であることを指摘したいと思います。コマンドラインから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"
4

0 に答える 0