0

在开始时,我想指出我在组装方面完全是新手。我必须制作一个从命令行获取 2 个参数的程序 - int 和 string。接下来,它必须在控制台中从字符串中打印最后一个单词,次数与 int number 一样多。我在 32 位中使用 Intel 语法——我猜这很重要。

例如:./a.out 3 "ab cd" 在屏幕上显示 "cdcdcd"

首先,我只专注于找到最后一个单词并将其打印在屏幕上——不是在循环中,而是一次。添加循环对我来说应该不是什么大问题。我尽我所能编写工作代码,它编译时没有错误,但它没有在控制台中打印任何内容 - 我认为从最后一个单词打印“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