我們已經討論了用於為變數分配存儲的數據定義指令的彙編。變數也可以用一些特定的值被初始化。可以指定初始化值,十六進制,十進位或二進位形式。
例如,我們可以定義一個字變數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 zaixian to the current element to be summed top: add ebx, [ecx] add ecx,1 ;move zaixianer 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
上一篇:
Assembly彙編 SCAS指令
下一篇:
Assembly彙編 過程