我是刚接触汇编的人,所以如果这很琐碎,请原谅我。对于以下命令:
$ ./prog1 *string*
其中 string 是传递的参数,并且是字符序列(但不能有空格),我将如何查找 string 中的字符数?我希望prog1要做的就是简单地输出所键入的内容,包括换行符。例如:
$ ./prog1 helloworld
只需输出“ helloworld”和换行符。到目前为止,我的代码确实打印出了输入,但是我需要将实际的字符数提供给%edx寄存器,这样它才能正确打印,否则我必须自己对字符数进行硬编码。
.globl _start
_start:
movl $4,%eax
movl $1,%ebx
movl 4(%esp),%ecx ; <--- save argument to %ecx register
movl $100, %edx ; <--- need to know exactly how many characters in argument to %edx register
int $0x80
#Exit
movl $1,%eax
movl $0,%ebx
int $0x80
我的想法是使用一个累加器并遍历 string ,逐个字节地计算字符数,直到遇到空终止符为止。但是,在GAS中如何做到这一点呢?
答案 0 :(得分:2)
在nasm中,您可以尝试以下操作:
section .text
global _start
_start:
push ebp
mov ebp, esp
mov ebx, [ebp+12]
cmp ebx, 0x00
jz exit
mov eax, ebx
compare:
cmp byte [eax], 0x00
jz print
inc eax
jmp compare
print:
sub eax, ebx ; now eax have the len of the string in argv[1]
exit:
mov eax, 0x1
mov ebx, 0x0
int 0x80
我也是asm的新手,但我希望为您提供帮助