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

Assembly 變量聲明

NASM提供各種定義變量預(yù)留存儲(chǔ)空間的指令。定義匯編指令用于分配的存儲(chǔ)空間。它可用于預(yù)定和初始化一個(gè)或多個(gè)字節(jié)。

初始化數(shù)據(jù)分配存儲(chǔ)空間

初始化數(shù)據(jù)存儲(chǔ)分配語(yǔ)句的語(yǔ)法是:

[variable-name]    define-directive    initial-value   [,initial-value]...

變量名是每個(gè)存儲(chǔ)空間的標(biāo)識(shí)符。匯編器在數(shù)據(jù)段中定義的每一個(gè)變量名的偏移值。

有五種基本形式定義指令:

Directive Purpose Storage Space
DB Define Byte allocates 1 byte
DW Define Word allocates 2 bytes
DD Define Doubleword allocates 4 bytes
DQ Define Quadword allocates 8 bytes
DT Define Ten Bytes allocates 10 bytes

以下是一些例子,使用define指令:

choice		DB	'y'
number		DW	12345
neg_number	DW	-12345
big_number	DQ	123456789
real_number1	DD	1.234
real_number2	DQ	123.456

請(qǐng)注意:

  • 每個(gè)字節(jié)的字符以十六進(jìn)制的ASCII值存儲(chǔ)。

  • 每個(gè)十進(jìn)制值會(huì)自動(dòng)轉(zhuǎn)換為十六進(jìn)制數(shù)16位二進(jìn)制存儲(chǔ)

  • 處理器使用小尾數(shù)字節(jié)順序

  • 負(fù)數(shù)轉(zhuǎn)換為2的補(bǔ)碼表示

  • 短的和長(zhǎng)的浮點(diǎn)數(shù)使用32位或64位分別表示

下面的程序顯示了使用定義指令:

section .text
    global _start    ;must be declared for linker (gcc)
_start:    ;tell linker entry yiibai

	mov	edx,1		;message length
	mov	ecx,choice	;message to write
	mov	ebx,1		;file descriptor (stdout)
	mov	eax,4		;system call number (sys_write)
	int	0x80		;call kernel

	mov	eax,1		;system call number (sys_exit)
	int	0x80		;call kernel

section .data
choice DB 'y'

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

y

未初始化的數(shù)據(jù)分配存儲(chǔ)空間

儲(chǔ)備指令用于未初始化的數(shù)據(jù)預(yù)留空間。后備指令一個(gè)操作數(shù)指定要保留空間的單位數(shù)量。各自定義指令都有一個(gè)相關(guān)的后備指令。

有五種基本形式的后備指令:

Directive Purpose
RESB Reserve a Byte
RESW Reserve a Word
RESD Reserve a Doubleword
RESQ Reserve a Quadword
REST Reserve a Ten Bytes

多重定義

可以在程序有多個(gè)數(shù)據(jù)定義語(yǔ)句。例如:

choice	  DB 	'Y' 		;ASCII of y = 79H
number1	  DW 	12345 		;12345D = 3039H
number2   DD   	12345679 	;123456789D = 75BCD15H

匯編程序內(nèi)存分配連續(xù)多個(gè)變量的定義。

多個(gè)初始化

TIMES指令允許多個(gè)初始化為相同的值。例如,一個(gè)名為標(biāo)記大小為9的數(shù)組可以被定義和初始化為零,使用下面的語(yǔ)句:

marks  TIMES  9  DW  0

時(shí)代的指令是非常有用在定義數(shù)組和表格。下面的程序顯示在屏幕上的9星號(hào):

section	.text
    global _start    ;must be declared for linker (ld)
_start:    ;tell linker entry yiibai
	mov	edx,9		;message length
	mov	ecx, stars	;message to write
	mov	ebx,1		;file descriptor (stdout)
	mov	eax,4		;system call number (sys_write)
	int	0x80		;call kernel

	mov	eax,1		;system call number (sys_exit)
	int	0x80		;call kernel

section	.data
stars   times 9 db '*'

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

*********