装配:访问2D阵列

时间:2013-03-05 16:31:00

标签: assembly nasm cpu-registers

我正试图在nasm汇编中制作一个小乒乓球游戏(这就是我学习语言的方式:)) 但我遇到了问题,我无法访问列表中的任何项目

我的代码

mov eax,counter                  ;counter=2 double checked 
mov esi,bitmap_data+eax*4        ;copy the 2nd item of the array in to esi

位图数据是in.bss部分

bitmap_data:    resd 100 

试图

mov eax,2                         
mov esi,[bitmap_data+eax*4]       ;copy the 2nd item of the array in to esi

这不是在esi中保存列表的正确(第2个)元素,而以下是正确的

mov esi,[bitmap_data+2*4]      

但我需要能够通过使用变量

来更改我得到的项目

2 个答案:

答案 0 :(得分:0)

将内存访问括在方括号中,如下所示:

mov esi,[bitmap_data+eax*4]

这应该让汇编程序感到高兴。

根据您的更新进行更新: 尝试分解你的指示。尝试:

mov eax, counter
shl eax, 2
add eax, bitmap_data
mov esi, [eax]

有任何改变吗?

答案 1 :(得分:0)

什么是counter?你很可能想要:

mov eax, [counter]
mov esi, [bitmap_data + eax * 4]

mov eax, [counter] mov esi, [bitmap_data + eax * 4]

= 0时,数组中的“第一个”(第0个)项将显示。当eax = 2时,您将获得数组中的“第三个”项。你在找哪一个?