在SASM IDE中编译汇编程序

时间:2016-05-06 13:04:31

标签: assembly nasm

SASM IDE是一个支持NASM的跨平台IDE。它提供调试功能,以便在程序执行期间观察寄存器。以下代码与NASM编译没有任何问题。

    section .data
hello   db "Hello World!",0xa
len equ $-hello

    section .text
    global  _start

_start:
    mov eax, 4
    mov ebx, 1
    mov ecx, hello
    mov edx, len
    int 80h

    mov eax, 1 ; exit(0)
    mov ebx, 0
    int 80h 

但是如果你尝试在SASM IDE中执行相同的代码,它就不起作用了。这是完整的错误消息。

[14:46:07]警告!构建中出现错误: /tmp/SASM/program.o:/tmp/SASM/program.asm:9: _start' /usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../../lib/crt1.o:(.text+0x0): first defined here /usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../../lib/crt1.o: In function _ start'的多重定义: (.text + 0x20):对'main'的未定义引用 collect2:Fehler:ld gab 1 als Ende-Statuszurück [14:46:07]在调试之前,你需要构建程序。

因为它不起作用我想SASM IDE和NASM之间肯定存在差异(通常我认为SASM或多或少只是NASM的GUI)。

在SASM中编译程序必须满足哪些要求?

1 个答案:

答案 0 :(得分:0)

好的,它适用于以下修改。 (包含在第一行并将_start更改为CMAIN)

%include "io64.inc"

      section .data
hello   db "Hello World!",0xa
len equ $-hello

    section .text
    global  CMAIN

CMAIN:
    mov eax, 4
    mov ebx, 1
    mov ecx, hello
    mov edx, len
    int 80h

    mov eax, 1 ; exit(0)
    mov ebx, 0
    int 80h 

但对我来说,更重要的问题是,SASM和NASM之间的区别是什么?在我看来,不再是NASM支持,因为原生NASM程序在没有修改的情况下是不可执行的。或者是否有设置来执行这些程序?