我在想(在我的知识范围内),要加载不同长度的值(但总是以0结尾),如果我可以使用变量的值作为变量名,这将是很方便的。例如,在:lea sc1, a2
如果我可以使用后缀sc与d0的值组合而不是sc1,我就可以轻松地滚动数据部分。有没有办法做到这一点呢?
例如:
move.w #4,d0 ; loop 5 times
loop
lea sc1,a2
; .... some code
dbf d0,loop
clr -(a7) ; end
trap #1
section data
sc1 dc.b 15,15,"Space",0
sc2 dc.b 10,4,"F1",0
sc3 dc.b 10,9,"F2",0
sc4 dc.b 10,44,"F9",0
sc5 dc.b 10,49,"F10",0
1条答案
按热度按时间rur96b6h1#
不幸的是,实际上没有办法做到这一点。那些“sc1”、“sc2”等只是程序员编写代码时的一种方便。一旦代码被汇编,汇编程序就将它们转换为内存地址。以68000的向量表为例:
一旦程序被汇编,标签就被销毁了,代码中对
reset
的任何引用都变成了常数4(因为我们从0开始,每个dc.l
占用4个字节的空间)。然而,这并不是全部都丢失了。你可以使用一个小技巧来实现这一点。如果你为每个字符串创建一个单独的指针表,你就可以更容易地遍历它们,而不必处理一堆填充。
这种技术可能会有点混乱,因为你必须解引用两次,但是一旦你掌握了它,字符串列表将更容易管理。在视频游戏中使用类似的技术加载动画是很常见的。你会有一个指向动画每一帧的指针表,并使用一个计时器变量(每帧递增)作为该表的索引。