我們已經(jīng)討論了用于為變量分配存儲的數(shù)據(jù)定義指令的匯編。變量也可以用一些特定的值被初始化??梢灾付ǔ跏蓟?,十六進(jìn)制,十進(jìn)制或二進(jìn)制形式。
例如,我們可以定義一個字變量months 以下方式之一:
MONTHS DW 12 MONTHS DW 0CH MONTHS DW 0110B
數(shù)據(jù)定義指令也可以被用于定義一個一維數(shù)組。讓我們定義一個一維數(shù)組存儲數(shù)字。
NUMBERS DW 34, 45, 56, 67, 75, 89
上述定義數(shù)組聲明六個字每個初始化的數(shù)字34,45,56,67,75,89。此分配2×6=12個字節(jié)的連續(xù)的存儲器空間。符號地址的第一個數(shù)字的號碼,以及該第二個數(shù)字將號碼+2,依此類推。
讓我們舉了另一個例子??梢远x一個數(shù)組大小為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,數(shù)組可以被定義為
INVENTORY TIMES 8 DW 0
下面的示例演示通過上述概念定義一個3元素?cái)?shù)組x,其中存儲了三個值:2,3和4。它添加數(shù)組中的值并顯示的總和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
上面的代碼編譯和執(zhí)行時,它會產(chǎn)生以下結(jié)果:
9