Linux下两种汇编工具简单用法: NASM And AS

NASM And AS

简介

nasmaslinux下两种编译汇编文件的工具, 对应两种不同类型的汇编语言.

nasm  -->   Intel
as    -->   AT&T

这两种语言语法上稍有差别,其实也差不多.

两种工具的简单用法(32bit)

nasm

section .text    ;section declaration

global _start

_start:

        mov     edx,len ;third argument: message length
        mov     ecx,msg ;second argument: pointer to message to write
        mov     ebx,1   ;first argument: file handle
        mov     eax,4   ;system call number (sys_write)
        int     0x80    ;call kernel

        mov     ebx,0   ;first syscall argument: exit code
        mov     eax,1   ;system call number (sys_exit)
        int     0x80    ;call kernel

section .data               ;section declaration

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

编译

nasm -f elf32 hello.asm -o hello.o

链接

ld -m elf_i386 hello.o -o hello

as

.text          
.global _start  
_start:

    movl    $len,%edx   # third argument: message length
    movl    $msg,%ecx   # second argument: pointer to message to write
    movl    $1,%ebx     # first argument: file handle (stdout)
    movl    $4,%eax     # system call number (sys_write)
    int     $0x80       # call kernel

    movl    $0,%ebx     # first argument: exit code
    movl    $1,%eax     # system call number (sys_exit)
    int     $0x80       # call kernel

    .data                   # section declaration

msg:
    .ascii  "Hello, World!\n"   # our dear string
     len = . - msg           # length of our dear string

编译

as -o hello.o hello.s --32

链接

ld -m elf_i386 hello.o -o hello

参考链接

https://ubuntuforums.org/showthread.php?t=1542830

你可能感兴趣的:(Linux,汇编)