开发手册 欢迎您!
软件开发者资料库

汇编 - 数组

汇编数组 - 从基本概念到高级概念,从简单和简单的步骤学习汇编编程,包括简介,环境设置,基本语法,存储器段,状态寄存器,系统调用,寻址模式,变量,常量,算术,条件执行,循环,逻辑,字符串处理,递归,数组,中断,过程,常量,宏,文件,内存管理。

我们已经讨论过汇编程序的数据定义指令用于为变量分配存储空间.该变量也可以用一些特定值初始化.初始值可以用十六进制,十进制或二进制形式指定.

例如,我们可以用以下任一方式和减号定义一个单词变量'months';

  MONTHS DW 12  MONTHS DW 0CH  MONTHS DW 0110B

数据定义指令也可用于定义一维数组.让我们定义一维数字数组.

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

上面的定义声明了一个由六个字组成的数组,每个字用数字34,45,56,67,75,89初始化.这分配了2x6 = 12个字节的连续存储空间.第一个数字的符号地址为NUMBERS,第二个数字的符号地址为NUMBERS + 2,依此类推.

让我们再举一个例子.您可以定义一个名为inventory的大小为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数组可以定义为:

  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 point to the current element to be summedtop:  add  ebx, [ecx]   add  ecx,1      ;move pointer to next element   dec  eax        ;decrement counter   jnz  top        ;if counter not 0, then loop againdone:    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 kernelsection.dataglobal xx:       db  2   db  4   db  3sum:    db  0

编译并执行上述代码时,会产生以下结果 :

  9