2013-03-05 51 views
1

我试图在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保存列表的正确(下篇)元素,而以下是这样做的权利

mov esi,[bitmap_data+2*4]  

,但我需要能够改变的项目是我被利用可变

+1

“这不是在esi中保存正确的(第2个)元素”那么它保存哪个元素呢?启动一个调试器(Ollydbg,gdb,Visual Studio调试器,或任何您喜欢的)并逐步执行代码可能是一个好主意。 – Michael 2013-03-05 17:43:23

回答

0

获得包含在方括号的内存访问,像这样:

mov esi,[bitmap_data+eax*4] 

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

更新,根据您的更新: 尝试打破你的指示了一下。试试:

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

有没有变化?

+0

好吧,错误停止了,但它仍然没有将数组的正确元素保存到esi – SteveL 2013-03-05 17:33:59

0

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

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

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