Assembly 變量聲明

NASM提供各種定義變量預留存儲空間的指令。定義彙編指令用於分配的存儲空間。它可用於預定和初始化一個或多個字節。

初始化數據分配存儲空間

初始化數據存儲分配語句的語法是:

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

變量名是每個存儲空間的標識符。彙編器在數據段中定義的每一個變量名的偏移值。

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

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

請注意:

  • 每個字節的字符以十六進制的ASCII值存儲。

  • 每個十進制值會自動轉換爲十六進制數16位二進制存儲

  • 處理器使用小尾數字節順序

  • 負數轉換爲2的補碼錶示

  • 短的和長的浮點數使用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'

上面的代碼編譯和執行時,它會產生以下結果:

y

未初始化的數據分配存儲空間

儲備指令用於未初始化的數據預留空間。後備指令一個操作數指定要保留空間的單位數量。各自定義指令都有一個相關的後備指令。

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

Directive

Purpose

RESB

Reserve a Byte

RESW

Reserve a Word

RESD

Reserve a Doubleword

RESQ

Reserve a Quadword

REST

Reserve a Ten Bytes

多重定義

可以在程序有多個數據定義語句。例如:

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

彙編程序內存分配連續多個變量的定義。

多個初始化

TIMES指令允許多個初始化爲相同的值。例如,一個名爲標記大小爲9的數組可以被定義和初始化爲零,使用下面的語句:

marks TIMES 9 DW 0

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

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

上面的代碼編譯和執行時,它會產生以下結果:

*********

0 條評論,你可以發表評論,我們會進行改進
Comment author placeholder