首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >6502装配移位位

6502装配移位位
EN

Stack Overflow用户
提问于 2014-10-06 20:33:49
回答 2查看 1.3K关注 0票数 1

我有一个数字1f存储在address 00,另一个数字1e存储在address 01。现在我想把1f变成1f00,把1e变成001e,然后将它们相加以获得1f1e。我该怎么做?我知道asllsr处理这个问题的指令,但是我是个6502的初学者,所以我很感激有人能告诉我它是如何高效地完成的(最少的周期)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-30 17:02:48

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

您可能希望使用6502小端点顺序,特别是如果您的变量可以用作地址的话。这意味着低字节,高字节顺序。

我有一个号码1f存储在地址00,我有另一个号码1e存储在地址01。

你真的想让001F存储在地址$00-$01 ($00等于$1F,$01等于#$00),$001 E存储在地址$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)

如果是的话,他们是unsigned ,只有LDA #$00, STA VAR_A_16, STA VAR_B_16, LDA $00, >STA VAR_A_16, LDA $01, STA >VAR_B_16

>是一种通用的汇编程序语法,意思是“低字节”(实际上可能是< --我一直对此感到困惑)

如果8位值为负值(位7集),则需要在新字节中存储signed,否则要存储$00。

单程:

代码语言:javascript
复制
               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
票数 2
EN

Stack Overflow用户

发布于 2014-10-13 20:48:27

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

因此,您只需将1e放在1f之前的地址中--通过相对于当前布局,通过将1f移动到address 02或通过其他方式将它们切换。不需要移位或ORing;实际上,在6502中没有可以用位逻辑移位或操作的16位寄存器。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26224423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档