2

在 Linux 汇编中尝试我的手,我遇到了以下问题。我刚刚开始,所以我的程序是一个相对简单的程序,它源自我在 linuxassembly 找到的一些示例。它接受传递给命令行的第一个参数并将其打印出来。这是我到目前为止...

section .bss
    test_string: resb 3

section .text
    global _start

_start:
    pop ebx     ;argument number
    pop ebx     ;program name
    pop ebx     ;first argument
    mov [test_string],ebx

    mov eax,4
    mov ebx,1
    mov ecx,test_string
    mov edx,3
    int 80h

    mov eax,1
    mov ebx,0
    int 80h

我知道这写得不好,但由于我是新手,我只是想在继续之前更好地了解汇编指令/变量的工作原理。我组装和链接使用...

nasm -f elf first.asm
ld -m elf_i386 -s -o first first.o

然后我运行使用..

./first one two

我以为它会打印出来,one但它会打印出像Y*&. 我究竟做错了什么?我test_string的类型不对吗?

4

1 回答 1

3

您试图打印出指向字符串的指针的值,而不是打印字符串。你想这样做。

pop ebx     ;argument number
pop ebx     ;program name
pop ebx     ;pointer to the first argument

mov ecx,ebx ;load the pointer into ecx for the write system call

mov eax,4   ;load the other registers for the write system call
mov ebx,1
mov edx,3
int 80h

mov eax,1
mov ebx,0
int 80h
于 2012-10-05T19:58:39.230 回答