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 に答える