Assembly - Hằng số
Có một số chỉ thị được cung cấp bởi NASM để xác định các hằng số. Chúng ta đã sử dụng lệnh EQU trong các chương trước. Chúng tôi sẽ đặc biệt thảo luận về ba chỉ thị -
- EQU
- %assign
- %define
Chỉ thị EQU
Các EQUChỉ thị được sử dụng để xác định các hằng số. Cú pháp của chỉ thị EQU như sau:
CONSTANT_NAME EQU expression
Ví dụ,
TOTAL_STUDENTS equ 50
Sau đó, bạn có thể sử dụng giá trị không đổi này trong mã của mình, như -
mov ecx, TOTAL_STUDENTS
cmp eax, TOTAL_STUDENTS
Toán hạng của một câu lệnh EQU có thể là một biểu thức:
LENGTH equ 20
WIDTH equ 10
AREA equ length * width
Đoạn mã trên sẽ xác định VÙNG là 200.
Thí dụ
Ví dụ sau minh họa việc sử dụng chỉ thị 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
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Hello, programmers!
Welcome to the world of,
Linux assembly programming!
Chỉ thị% chỉ định
Các %assignChỉ thị có thể được sử dụng để xác định các hằng số giống như chỉ thị EQU. Chỉ thị này cho phép xác định lại. Ví dụ: bạn có thể xác định TOTAL không đổi là -
%assign TOTAL 10
Sau đó trong mã, bạn có thể xác định lại nó là -
%assign TOTAL 20
Chỉ thị này phân biệt chữ hoa chữ thường.
% Xác định Chỉ thị
Các %defineChỉ thị cho phép xác định cả hằng số và hằng chuỗi. Lệnh này tương tự với lệnh #define trong C. Ví dụ: bạn có thể xác định PTR hằng số là:
%define PTR [EBP+4]
Đoạn mã trên thay thế PTR bằng [EBP + 4].
Chỉ thị này cũng cho phép định nghĩa lại và nó có phân biệt chữ hoa chữ thường.