在6502汇编中,我需要根据地址
Z
处的值的第2位设置$8000
标志的值。但我需要这样做而不覆盖 A
寄存器中的值。
我想出了这段代码,它似乎有效,但也显得不优雅,因为堆栈操作和需要测试两次(使用
and
然后cpx
,因为pla
覆盖了Z
标志) :
pha
lda $8000
and #$04
tax
pla
cpx #$00
有更好的方法吗?
您可以使用非法操作码 LAX 来使其更短。
lax $8000
and #$04
cmp #$04
txa
LAX $xxxx 是 $AF 作为操作码。因此,即使您的汇编器不支持它,您也可以使用类似的东西内联它;
.byte $af, $00, $80
and #$04
cmp #$04
txa
但是许多 6502 汇编器支持非法操作码。有些需要额外的编译器指令。