组装新手。如何计算传递的参数中的字符数?

时间:2019-01-26 21:21:22

标签: assembly gas

我是刚接触汇编的人,所以如果这很琐碎,请原谅我。对于以下命令:

$ ./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中如何做到这一点呢?

1 个答案:

答案 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的新手,但我希望为您提供帮助