鍍金池/ 教程/ Java/ Assembly匯編 數(shù)組
Assembly 變量聲明
Assembly匯編 STOS指令
Assembly 條件
Assembly 尋址模式和MOV指令
Assembly匯編教程
Assembly - 什么是匯編語言
Assembly 循環(huán)
Assembly 內(nèi)存段
Assembly匯編 宏
Assembly 寄存器
Assembly匯編 遞歸
Assembly匯編 CMPS指令
Assembly匯編 內(nèi)存管理
Assembly匯編 LODS指令
Assembly 基本語法
Assembly匯編 過程
Assembly匯編 文件管理
Assembly匯編 數(shù)組
Assembly匯編 SCAS指令
Assembly 算術(shù)指令
Assembly 環(huán)境設(shè)置
Assembly匯編 字符串處理
Assembly 數(shù)字
Assembly 常量
Assembly匯編 MOVS指令
Assembly 邏輯指令
Assembly 系統(tǒng)調(diào)用

Assembly匯編 數(shù)組

我們已經(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