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
本站文章除注明转载外,均为本站原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 数组
本文地址:http://www.codeinn.net/assembly/1014.html
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Assembly 数组
本文地址:http://www.codeinn.net/assembly/1014.html