首先,这是我关于组装的第一个问题,我仍然处于我的学习之旅的最开始(希望是漫长的),所以如果一些术语完全错误,请原谅我(我希望我的问题至少有一些意义)。
我正在使用VASM汇编程序来构建一个Z 80程序。
我有一个子例程,它使用VASM的inline
/einline
指令来定义本地标签as explained in the docs。
在编译时给我错误的代码部分如下:
PlayerSprY:
; player Y SPRITES' VERTICAL IN SAT
; Parameters: hl = SATY address
; Affects: a, hl, b
rept 4 ; repeat 4 times as player is 4 tiles tall
inline ; use local name space (VASM does not have local name space like WLA-DX)
ld b,3 ; counter 3 as player is tile wide
PlayerSprYLoop:
out (VDPData),a
inc hl
djnz PlayerSprYLoop ; decrease B and jump back if NonZero
add a,8 ; add 8 (since next row is 8 pixels below.)
einline ; end of local name space (http://eab.abime.net/showthread.php?t=88827)
endr ; end of rept
ret
我得到的错误是:
error 75 in line 3 of "REPEAT:Hello World.asm:line 192": label <PlayerSprYLoop> redefined
included from line 192 of "Hello World.asm"
> PlayerSprYLoop:
我知道由于rept 4
,PlayerSprYLoop
标签被重新定义了4次,但我认为将我的定义放在inline
/einline
块中可以防止此错误。
1条答案
按热度按时间uurv41yg1#
我已经找到了答案。
在the same docs I pointed out中,它显示为
本地标签以'.'开头或以'$'结尾。对于其余标签,允许使用包括'_'在内的任何字母数字字符。本地标签在两个全局标签定义之间有效。
因此,此代码可正确编译(请注意,
PlayerSprYLoop
已变为.PlayerSprYLoop
):