在asm中寻址一个指针数组

时间:2016-01-27 13:24:45

标签: nasm x86-64

我有一个例程,我可以这样称呼:

mov rdi, struc_point
mov rsi, struc_color
call put_pixel

现在,我想创建类似于指针数组的东西,以获得颜色表。我现在拥有的是这个,它不起作用:

color_table:
dq 0 ; null color
dq struc_color1
dq struc_color2
dq struc_color3
; etc..., the colors are defined somewhere else

现在,我想最后用它来做这样的事情:

mov rbx, 2 ; index into color table
mov rdi, struc_point
mov rsi, qword [color_table+8*rbx]
call put_pixel

出了什么问题?没有编译器错误,但是当我运行它时,所有动画都会停止。 rsi应包含struc_color的地址,请参阅第一个代码段。如果我对此颜色进行硬编码(mov rsi, struc_color),该程序将起作用。

这是在x86_64 asm中,没有任何操作系统直接启动。

1 个答案:

答案 0 :(得分:0)

我发现了问题。我上面写的代码实际上是正确的并且运行良好。

问题位于put_pixel内部,但未保存rax。实际上,我实际上只使用了rax几行,并存储了要显示在其中的数据。这导致put_pixel在首次运行时抛弃程序。