印刷"您好"而不是"你好,世界!"

时间:2015-09-13 18:54:18

标签: assembly

我只是在学习集会。当我使用在线汇编程序时,它会打印" Hello,world!"正如所料。但是,当我使用我刚刚安装的nasm时,我只会打招呼。为什么会这样?

section .text
    global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point
    mov edx, len    ;message length
    mov ecx, msg    ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80        ;call kernel
    mov eax, 1      ;system call number (sys_exit)
    int 0x80        ;call kernel

    section .data

    msg db  'Hello, world!',0xa ;our dear string
    len equ $ - msg         ;length of our dear string

1 个答案:

答案 0 :(得分:0)

正如您在评论中解释的那样,您正在组装如下代码:

nasm helloWorld.asm

问题在于

  1. 您没有像可执行文件

  2. 那样组装它
  3. 汇编后,如果是可执行文件

  4. ,则不会将其链接

    在Linux下,您将把此代码汇编到ELF文件中。为此,请运行以下命令:

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

    第一个命令将代码组装到要构建到ELF文件中的对象(.o)文件中。第二个命令获取该目标文件并将其转换为ELF(可执行)文件。

    要运行它,请输入:

    ./helloWorld