鍍金池/ 教程/ Java/ Assembly 常量
Assembly 變量聲明
Assembly匯編 STOS指令
Assembly 條件
Assembly 尋址模式和MOV指令
Assembly匯編教程
Assembly - 什么是匯編語言
Assembly 循環(huán)
Assembly 內(nèi)存段
Assembly匯編 宏
Assembly 寄存器
Assembly匯編 遞歸
Assembly匯編 CMPS指令
Assembly匯編 內(nèi)存管理
Assembly匯編 LODS指令
Assembly 基本語法
Assembly匯編 過程
Assembly匯編 文件管理
Assembly匯編 數(shù)組
Assembly匯編 SCAS指令
Assembly 算術(shù)指令
Assembly 環(huán)境設(shè)置
Assembly匯編 字符串處理
Assembly 數(shù)字
Assembly 常量
Assembly匯編 MOVS指令
Assembly 邏輯指令
Assembly 系統(tǒng)調(diào)用

Assembly 常量

有幾個(gè)NASM定義常量的指令。我們在前面的章節(jié)中已經(jīng)使用EQU指令。我們將特別討論了三個(gè)指令:

  • EQU

  • %assign

  • %define

EQU 指令

EQU指令用于定義常量。 EQU偽指令的語法如下:

CONSTANT_NAME EQU expression

例如,

TOTAL_STUDENTS equ 50

可以在代碼中使用這個(gè)常量值,如:

mov  ecx,  TOTAL_STUDENTS 
cmp  eax,  TOTAL_STUDENTS

EQU語句的操作數(shù)可以是一個(gè)表達(dá)式:

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

上面的代碼編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果:

Hello, programmers!
Welcome to the world of,
Linux assembly programming!

%assign 指令

%assign 指令可以使用像EQU指令定義數(shù)值常量。該指令允許重新定義。例如,您可以定義常量TOTAL :

%assign TOTAL 10

在后面的代碼,可以重新定義為:

%assign  TOTAL  20

這個(gè)指令是區(qū)分大小寫的。

%define 指令

The %define 指令允許定義數(shù)值和字符串常量。這個(gè)指令是相似 #define在C#中。例如,可以定義常量的PTR:

%define PTR [EBP+4]

上面的代碼取代PTR by [EBP+4].

此指令還允許重新定義,它是區(qū)分大小寫。