位置:首頁 > 高級語言 > Assembly彙編 > Assembly彙編 數組

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