การประกอบ - ค่าคงที่

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 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

คำสั่งนี้คำนึงถึงตัวพิมพ์เล็กและใหญ่

% กำหนด Directive

%defineคำสั่งอนุญาตให้กำหนดค่าคงที่ทั้งตัวเลขและสตริง คำสั่งนี้คล้ายกับ #define ใน C ตัวอย่างเช่นคุณอาจกำหนดค่าคงที่ PTR เป็น -

%define PTR [EBP+4]

รหัสด้านบนแทนที่PTRด้วย [EBP + 4]

คำสั่งนี้ยังช่วยให้สามารถกำหนดนิยามใหม่ได้และต้องคำนึงถึงขนาดตัวพิมพ์