Assembly彙編 數組

我們已經討論了用於爲變量分配存儲的數據定義指令的彙編。變量也可以用一些特定的值被初始化。可以指定初始化值,十六進制,十進制或二進制形式。

例如,我們可以定義一個字變量months 以下方式之一:

MONTHS DW 12 MONTHS DW 0CH MONTHS DW 0110B

數據定義指令也可以被用於定義一個一維數組。讓我們定義一個一維數組存儲數字。

NUMBERS DW 34, 45, 56, 67, 75, 89

上述定義數組聲明六個字每個初始化的數字34,45,56,67,75,89。此分配2×6=12個字節的連續的存儲器空間。符號地址的第一個數字的號碼,以及該第二個數字將號碼+2,依此類推。

讓我們舉了另一個例子。可以定義一個數組大小爲8的空間,並初始化所有值爲零,如:

INVENTORY DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 DW 0

其中,可以縮寫爲:

INVENTORY DW 0, 0 , 0 , 0 , 0 , 0 , 0 , 0

TIMES指令也可以被用於多個初始化爲相同的值。使用TIMES,數組可以被定義爲

INVENTORY TIMES 8 DW 0

例如:

下面的示例演示通過上述概念定義一個3元素數組x,其中存儲了三個值:2,3和4。它添加數組中的值並顯示的總和9:

section .text global _start ;must be declared for linker (ld) _start: mov eax,3 ;number bytes to be summed
mov ebx,0 ;EBX will store the sum
mov ecx, x ;ECX will yiibai to the current element to be summed
top: add ebx, [ecx] add ecx,1 ;move yiibaier to next element
dec eax ;decrement counter
jnz top ;if counter not 0, then loop again done: add ebx, '0' mov [sum], ebx ;done, store result in "sum" display: mov edx,1 ;message length
mov ecx, sum ;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 global x
x: db 2 db 4 db 3 sum: db 0

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

9