汇编 - 常量
NASM 提供了几个定义常量的指令。我们已经在前面的章节中使用过 EQU 指令。我们将特别讨论三个指令 -
- 均衡器
- %分配
- %定义
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 point 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指令可用于定义数字常量,如 EQU 指令。该指令允许重新定义。例如,您可以将常量 TOTAL 定义为 -
%assign TOTAL 10
稍后在代码中,您可以将其重新定义为 -
%assign TOTAL 20
该指令区分大小写。
%define 指令
% define指令允许定义数字和字符串常量。该指令类似于 C 中的#define。例如,您可以将常量 PTR 定义为 -
%define PTR [EBP+4]
上述代码将PTR替换为[EBP+4]。
该指令还允许重新定义并且区分大小写。