Assembly 常量

有幾個NASM定義常量的指令。我們在前面的章節中已經使用EQU指令。我們將特別討論了三個指令:

  • EQU

  • %assign

  • %define

EQU 指令

EQU指令用於定義常量。 EQU僞指令的語法如下:

CONSTANT_NAME EQU expression

例如,

TOTAL_STUDENTS equ 50

可以在代碼中使用這個常量值,如:

mov ecx, TOTAL_STUDENTS
cmp eax, TOTAL_STUDENTS

EQU語句的操作數可以是一個表達式:

LENGTH equ 20 WIDTH equ 10 AREA equ length * width

上面的代碼段定義AREA爲200。

例子:

下面的例子演示瞭如何使用EQU指令:

SYS_EXIT equ 1 SYS_WRITE equ 4 STDIN equ 0 STDOUT equ 1 section .text global _start ;must be declared for using gcc
_start: ;tell linker entry yiibai
mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg1
mov edx, len1 int 0x80 mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg2
mov edx, len2 int 0x80 mov eax, SYS_WRITE
mov ebx, STDOUT
mov ecx, msg3
mov edx, len3 int 0x80 mov eax,SYS_EXIT ;system call number (sys_exit) int 0x80 ;call kernel

section .data
msg1 db 'Hello, programmers!',0xA,0xD len1 equ $ - msg1
msg2 db 'Welcome to the world of,', 0xA,0xD len2 equ $ - msg2
msg3 db 'Linux assembly programming! ' len3 equ $- msg3

上面的代碼編譯和執行時,它會產生以下結果:

Hello, programmers!
Welcome to the world of,
Linux assembly programming!

%assign 指令

%assign 指令可以使用像EQU指令定義數值常量。該指令允許重新定義。例如,您可以定義常量TOTAL :

%assign TOTAL 10

在後面的代碼,可以重新定義爲:

%assign TOTAL 20

這個指令是區分大小寫的。

%define 指令

The %define 指令允許定義數值和字符串常量。這個指令是相似 #define在C#中。例如,可以定義常量的PTR:

%define PTR [EBP+4]

上面的代碼取代PTR by [EBP+4].

此指令還允許重新定義,它是區分大小寫。