在开始时,我想指出我在组装方面完全是新手。我必须制作一个从命令行获取 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"