1

我有一个号码1f存储在 address 00,我有另一个号码1e存储在 address 01。现在我想把1finto1f001einto 001e,然后把它们加起来得到1f1e。我该怎么做呢?我知道说明asllsr处理这个问题,但我是 6502 初学者,所以我真的很感激有人能告诉我它是如何有效地完成的(最少的周期)。

4

2 回答 2

2

如果您使用 16 位数量,则需要确保您的变量是 16 位或 2 字节宽。

您可能想要使用 6502 little-endian 顺序,尤其是当您的变量可以用作地址时。这意味着低字节,高字节顺序。

我有一个数字 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_A_8

$01 - 你的第二个 8 位变量(标签VAR_B_8

$02-$03 - 您要放置第一个转换后的 8 位变量(标签VAR_A_16)的位置

$04-$05 - 您要放置第二个转换后的 8 位变量(标签VAR_B_16)的位置

他们没有签名吗? 如果是这样,只是LDA #$00, STA VAR_A_16, STA VAR_B_16, LDA $00, >STA VAR_A_16, LDA $01, STA >VAR_B_16

>是一种常见的汇编语法,表示“低字节”(实际上可能<是- 我总是对此感到困惑)

他们签了吗?如果 8 位值为负数(设置了第 7 位),则您希望将 $FF 存储在新字节中,否则您希望存储 $00。

单程:

               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
于 2014-10-30T17:02:48.050 回答
1

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

因此,您只需在1e之前将它们放入一个地址1f- 通过将它们与您当前的布局进行切换,通过移动1f到地址02或通过其他方式。不需要移位或 ORing;确实,6502 内部没有可以使用按位逻辑进行移位或操作的 16 位寄存器。

如果这两个字节保持不变但相反,那么您可以例如归零00并使用寻址模式来访问。01x($00, x)1f1e

于 2014-10-13T20:48:27.110 回答