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.