我想知道是否有人可以帮助我解决使用 VASM 汇编程序为 Amiga 编译 MC68000 二进制文件时遇到的烦人问题。问题在于标签地址操作的错误(我认为)实现。
以下是详细信息:
copper_scr:
dc.w $e0, (screen>>16) & $ffff
dc.w $e2, screen & $ffff
...
screen:
dcb.w screen_size ; screen_size value does not matter here
我在上面的代码中尝试做的是将屏幕地址拆分为最重要的字和次要的字,以便为芯片寄存器提供屏幕数据地址(如果您愿意,也可以是向量)。
但是,以这种形式编译代码会给我“非法重定位”错误 39。
我尝试了很多方法来解决这个问题,因为我认为由于屏幕地址很长(即不是单词),“screen>>16”的结果可能会保持很长,因此我不能将这样的值放入单词范围内。
有趣的是,以下代码编译时没有错误,但生成的二进制文件中的两个值都编译为值 0:
...
dc.w $e0,0 + screen>>16 & $ffff
dc.w $e2,0 + screen&$ffff
...
作为一种临时的变通方法,我在代码开头的某个地方在运行时计算这些值:
move.l #screen,a0
move.l a0,d7
lsr.l #4,d7
lsr.l #4,d7
lsr.l #4,d7
lsr.l #4,d7
andi.l #$ffff,d7
move.w d7,copper_scr+2
move.l a0,d7
andi.l #$ffff,d7
move.w d7,copper_scr+6
但这显然是荒谬和完全错误的。
任何帮助表示赞赏。