【问题标题】:Assembly:Access 2D array组装:访问二维数组
【发布时间】:2013-03-05 16:30:59
【问题描述】:

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

我的代码

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

位图数据在.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]      

但我需要能够通过使用变量来更改我得到的项目

【问题讨论】:

  • “这没有在 esi 中保存正确的(第 2 个)元素” 那么它保存了哪个元素 ?启动调试器(Ollydbg、gdb、Visual Studio 调试器或您喜欢的任何东西)并逐步执行代码可能是个好主意。

标签: assembly nasm cpu-registers


【解决方案1】:

将内存访问用方括号括起来,如下所示:

mov esi,[bitmap_data+eax*4]

这应该会让汇编器高兴。

更新,根据您的更新: 试着打破你的指示。试试:

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

有什么变化吗?

【讨论】:

  • 好吧,错误停止了,但它仍然没有将数组的正确元素保存到esi中
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 2012-06-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2017-04-06
    • 2014-03-25
    相关资源
    最近更新 更多