Assembly 6502装配移位钻头

Assembly 6502装配移位钻头,assembly,6502,Assembly,6502,我有一个编号1f存储在地址00,还有一个编号1e存储在地址01。现在我想把1f变成1f00和1e变成001e,然后把它们相加得到1f1e。我该怎么做?我知道asl和lsr的说明可以解决这个问题,但我是6502初学者,因此我非常感谢有人能告诉我如何高效地完成(最少的周期) 6502是一台8位机器;它通过从低位地址读取最低有效字节(即小端字节)来构造16位量 因此,您只需将1e放在1f之前的地址中,方法是将它们相对于当前布局进行切换,将1f移动到02地址或通过其他方式。无需移位或O形圈;实际上,65

我有一个编号
1f
存储在地址
00
,还有一个编号
1e
存储在地址
01
。现在我想把
1f
变成
1f00
1e
变成
001e
,然后把它们相加得到
1f1e
。我该怎么做?我知道asl和lsr的说明可以解决这个问题,但我是6502初学者,因此我非常感谢有人能告诉我如何高效地完成(最少的周期)

6502是一台8位机器;它通过从低位地址读取最低有效字节(即小端字节)来构造16位量

因此,您只需将
1e
放在
1f
之前的地址中,方法是将它们相对于当前布局进行切换,将
1f
移动到
02
地址或通过其他方式。无需移位或O形圈;实际上,6502内部没有16位寄存器可以通过位逻辑进行移位或操作


如果这两个字节保持在
00
01
但反向,则您可以将
x
归零,并使用
($00,x)
寻址模式访问
1f1e

如果使用16位量,则需要确保变量为16位或2字节宽

您可能希望使用6502小端顺序,尤其是当您的变量可以用作地址时。这意味着低字节,高字节顺序

我有一个数字1f存储在地址00,还有一个数字1e存储在地址01

您确实希望将$001F存储在地址$00-$01($00将等于#$1F,$01将等于#$00),将$001E存储在地址$02-$03($02将等于#$1E,$03将等于#$00)。然后您可能需要另一个变量来保存结果,比如$04-$05


但是,如果你真的有两个8位变量,你想把它们“转换”成16位变量

假设(为清晰起见,使用标签):

$00-第一个8位变量(标签
VAR\u A\u 8

$01-第二个8位变量(标签
VAR\u B\u 8

$02-$03-要将第一个转换的8位变量放置在何处(标签
VAR\u A\u 16

$04-$05-要将第二个转换的8位变量(标签
VAR_B_16
)放置在何处

他们没有签名吗?如果是,只要
LDA#00,STA VAR#u 16,STA VAR_B_16,LDA$00,>STA VAR_A_16,LDA$01,STA>VAR_B_16


是一种常见的汇编程序语法,意思是“低字节的”(它实际上可能是
,因为6502是一台8位机器,您不能直接处理16位数字。您只需分别操作这两部分,不需要移位。@Jester您的意思是,如果我想将某些内容存储到
1f1e
中,我需要使用
sta吗($00),y
?是的,但请记住6502是小尾数,因此要获得
1f1e
,您需要交换两个字节。当然,您也可以使用
sta($00,x)
假设
x
为零。@Jester如果我是你的话,我会把它提升为一个答案;它清楚地回答了这个问题,并且对将来发现这个问题的人来说会更加突出。如果不行,我想其他人可以将它发布为社区维基。
               LDX #$00
               LDA VAR_A_8       ;Loading .A will set N flag in .P if bit 7 is set
               BPL VAR_A_NOT_NEG
               DEX               ;.X will now be $FF
VAR_A_NOT_NEG: STX <VAR_A_16     ;store .X in high byte
               STA >VAR_A_16     ;copy low byte
               LDX #$00
               LDA VAR_B_8
               BPL VAR_B_NOT_NEG
               DEX
VAR_B_NOT_NEG: STX <VAR_B_16
               STA >VAR_B_16