汇编 - 数组

汇编 - 数组

❮ 上一页

下一页 ❯

汇编 - 数组

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

例如,我们可以通过以下任一方式定义单词变量"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 summed

top: add ebx, [ecx]

add ecx,1 ;move pointer 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

❮ 上一页

下一页 ❯

相关推荐

王者荣耀: 全图透视挂消失了吗? 并没有! 官方6天封禁上千的账号
余额宝最新利息多少2025?余额宝10万一年利息多少?
365打水账号怎么防止封号

余额宝最新利息多少2025?余额宝10万一年利息多少?

⌛ 07-14 👁️ 6019
山地车坐垫十大品牌排行榜
365打水账号怎么防止封号

山地车坐垫十大品牌排行榜

⌛ 08-17 👁️ 8112
【三星G9008W】最新报价
365打水账号怎么防止封号

【三星G9008W】最新报价

⌛ 01-30 👁️ 604
紊乱时间流
365打水账号怎么防止封号

紊乱时间流

⌛ 12-30 👁️ 6833
意大利威尼斯30大必体验活动:水城景观、文化体验与浪漫行程
手机支付宝咻一咻怎么抢红包?
365打水账号怎么防止封号

手机支付宝咻一咻怎么抢红包?

⌛ 09-17 👁️ 2711
非海外环境如何使用代理?
皇冠365bet体育投

非海外环境如何使用代理?

⌛ 09-24 👁️ 8107
成人腿型怎么矫正变直
365打水账号怎么防止封号

成人腿型怎么矫正变直

⌛ 10-01 👁️ 9188