汇编语言 常量
NASM 提供了几个定义常量的指令。在前面的章节中,我们已经使用过 EQU
指令。
我们将特别讨论 3 个指令:
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 ;必须声明 gcc
_start: ;告诉链接器入口
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 ;系统调用号 (sys_exit)
int 0x80 ;调用内核
section .data
msg1 db'Hello, programmers!',0xA,0xD
len1 equ $ - msg1
msg2 db 'Welcome to cankaoshouce.com,', 0xA,0xD
len2 equ $ - msg2
msg3 db 'Learn assembly programming! '
len3 equ $- msg3
结果为:
Hello, programmers!
Welcome to cankaoshouce.com,
Learn assembly programming!
%assign 指令
%assign
指令像 EQU
指令一样可以用来定义数字常量。该指令支持重新定义。例如,您可以将常量 TOTAL
先定义为:
%assign TOTAL 10
在代码的后面,您可以将其重新定义为:
%assign TOTAL 20
注意 :指令区分大小写。
%define 指令
%define
指令可以定义数值和字符串常量。该指令类似于 C 语言中的 #define
。例如,您可以将常量 PTR
定义为:
%define PTR [EBP+4]
上面的代码用 [EBP + 4] 替换了 PTR。
该指令也支持重新定义,并且区分大小写。