我想将数字放在10个长度数组中,但每个数字比最后一个数字大1。 它的意思是:myArray = 0,1,2,3,4,5,6,7,8,9 所以我试过这个:
IDEAL
型号小 堆叠100hDATASEG
intArray db 10 dup(0)
index db 1CODESEG
开始:
mov ax,@ DATA
mov ds,ax loopArray:
mov al,[index]
添加[intArray + index],al;这是问题 inc [index]
cmp [index],11
jb loopArray
退出:
mov ax,4c00h
int 21h
结束开始
但是我无法将索引添加到[intArray + index],所以我试图将它添加到[intArray + al],但它也不起作用。
我怎样才能每次将索引添加到下一个数组的值?
答案 0 :(得分:1)
myArray = 0,1,2,3,4,5,6,7,8,9。
这些是您希望数组包含的数字。但是,由于您将 index 变量(您将用于索引和存储)初始化为1(使用index db 1
),这将导致另一个结果。
只需设置索引:
index db 0
还有另一个理由以这种方式进行设置!
在符号[intArray+index]
中,index
部分在数组中是偏移。偏移量始终为零。你编写程序的方式,它会在数组后面写第10个值。
添加[intArray + index],al;这是问题
你是对的,这就是问题所在。一些汇编程序不会编译它,而其他汇编程序只会添加这两个变量的地址。都不适合你的目的。您需要的是将 index 变量的内容放在寄存器中并使用该操作数组合。
intArray db 10 dup (0)
index db 0
...
loopArray:
movzx bx, [index]
mov [intArray+bx], bl ;Give the BX-th array element the value BL
inc [index]
cmp [index], 10
jb loopArray
使用此代码, index 将从0开始,然后只要索引小于10,循环就会持续。
当然,您可以在不使用索引变量的情况下编写此程序。
intArray db 10 dup (0)
...
xor bx, bx ;This make the 'index' = 0
loopArray:
mov [intArray+bx], bl ;Give the BX-th array element the value BL
inc bx
cmp bx, 10
jb loopArray
鉴于数组最初用零填充,您可以替换:
mov [intArray+bx], bl ;Give the BX-th array element the value BL
使用:
add [intArray+bx], bl ;Give the BX-th array element the value BL
请记住,只有在数组预先填充了零之后才能使用此功能!