Assembly 基本语法 - Assembly汇编

汇编程序可以分为三个部分:

  • 数据段

  • bss段部分

  • 文字部分

数据段

用于声明初始化数据或常量的数据段。在运行时,此数据不改变。在本节中可以声明不同的常量值,文件名或缓冲区大小等。

声明数据段的语法是:

section .data

bss

BSS部分是用于声明变量。声明bss段段的语法是:

section .bss

文本段

文字部分用于保存实际的代码。本节开头必须的的声明global_start,告诉内核程序开始执行。

声明文本部分的语法是:

section .text
   global _start
_start:

注释

汇编语言注释以分号(;)。它可能包含任何可打印的字符,包括空白。它可以出现一行本身,如:

; This program displays a message on screen

或者,在同一行上的指令,如:

add eax ,ebx    ; adds ebx to eax

Assembly汇编语言语句

汇编语言程序包括三个类型的语句:

  • 可执行指令或指令

  • 汇编指令或伪操作

可执行指令或简单指示告诉的处理器该怎么做。每个指令由操作码(操作码)可执行指令生成的机器语言指令。

汇编指令或伪操作告诉汇编有关汇编过程的各个方面。这些都是非可执行文件,并不会产生机器语言指令。

宏基本上是一个文本替换机制。

汇编语言语句的语法

汇编语言语句输入每行一个语句。每个语句如下的格式如下:

[label]   mnemonic   [operands]   [;comment]

方括号中的字段是可选的。基本指令有两部分组成,第一个是要执行的指令(助记符)的名称和所述第二命令的操作数或参数的。

以下是一些典型的汇编语言语句的例子:

INC COUNT        ; Increment the memory variable COUNT
MOV TOTAL, 48    ; Transfer the value 48 in the
                 ; memory variable TOTAL
ADD AH, BH       ; Add the content of the
                 ; BH register into the AH register
AND MASK1, 128   ; Perform AND operation on the
                 ; variable MASK1 and 128
ADD MARKS, 10    ; Add 10 to the variable MARKS
MOV AL, 10       ; Transfer the value 10 to the AL register

Assembly Hello World程序

下面的汇编语言代码显示字符串 'Hello World'在屏幕上:

section    .text
    global _start   ;must be declared for linker (ld)
_start:                ;tells linker entry yiibai
    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

上面的代码编译和执行时,它会产生以下结果:

Hello, world!

一个汇编程序的编译和链接在NASM

请确保已设置NASM和LD的二进制文件的路径在PATH环境变量中。现在上述程序的编译和链接采取以下步骤:

  • 使用文本编辑器,输入上面的代码保存为hello.asm。

  • 请确保hello.asm文件保存在同一目录

  • 要汇编程序,请键入 nasm -f elf hello.asm

  • 如果有错误将提示。否则hello.o程序将创建一个对象文件。

  • 要链接目标文件,并创建一个可执行文件名hello,请键入 ld -m elf_i386 -s -o hello hello.o

  • 通过输入执行程序 ./hello

如果所做的一切都是正确的,它会显示 Hello, world!在屏幕上。