如OP评论由迈克尔描述,LAX是只要你有好的解决方案:
- 编写原始NMOS 6502,
- 有没有哲学反对使用无证操作码,并
- 不需要保留(或具有其他保障的)累加器(.a)中的内容
LAX将.A和.X加载到内存位置的值或立即值为零(请参见下文)。寻址方式:
Mnemonic Bytes Cycles
LAX #00 AB 00 2
LAX abcd AF cd ab 4
LAX abcd,Y BF cd ab 4 (+1 if crossing page boundary)
LAX ab A7 ab 3
LAX ab,Y B7 ab 4
LAX (ab,X) A3 ab 6
LAX (ab),Y B3 ab 5 (+1 if crossing page boundary)
LAX记录为缺乏直接寻址模式(LAX #nn
),但实际上,当你想既u和.X设置为零LAX #$00
是稳定的和有用的 - 它需要2个字节,2周期而不是每个(LDA #$00; LDX #$00
)中的4个或3个字节/ 4个周期(LDA #$00; TAX
)。
这DASM宏注入的字节序列响应定制助记符(ZAX
,零u和.X):
MAC ZAX
DC.W #$00AB ; [2] LAX Immediate Zero (only stable when operand is zero)
ENDM
这是从文本位图呈现例行我写它采用了短摘录LAX索引到一个字节,对地址表:
.dodraw LAX (_TEXTADDR),Y ; [5] get first character of pair from text-buffer
LDA _CHARTABL,X ; [4] get first glyph data address lo-byte
STA _GLYPADD1 ; [3] ZP set first glyph data address lo-byte
LDA _CHARTABH,X ; [4] get first glyph data address hi-byte
STA _GLYPADD1+1 ; [3] ZP set first glyph data address hi-byte
etc...
如果你不介意捣毁了'A'注册就可以使用无证指令'LAX(arrPoint),Y'(中加载相同的值'A'和'X')。如果汇编程序不支持无证指令,则操作码为“$ B3”。 – Michael
好吧,好像我不能使用LAX,但是我不可能先将一个字节装入Accumilator,然后写入TAX将其传送到X寄存器,然后将第二个字节装入Accumilator? –
如果我的计数正确,'LAX'是1个字节,比'LDA' +'TAX'少1个周期。但除此之外,这将是同样的事情。 – Michael