我有一个例程,我可以这样称呼:
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中,没有任何操作系统直接启动。
答案 0 :(得分:0)
我发现了问题。我上面写的代码实际上是正确的并且运行良好。
问题位于put_pixel
内部,但未保存rax
。实际上,我实际上只使用了rax
几行,并存储了要显示在其中的数据。这导致put_pixel
在首次运行时抛弃程序。