我有一個號碼1f
存儲在地址00
,我有另一個號碼1e
存儲在地址01
。現在我想把1f
分成1f00
和1e
分成001e
,然後把它們加起來得到1f1e
。我該怎麼做呢?我知道指令asl
和lsr
處理這個問題,但我是一個6502初學者,所以我真的很感激有人可以告訴我它是如何有效地完成(最少的週期)。6502彙編移位位
回答
如果您使用的是16位數量,則需要確保您的變量爲16位或2個字節寬。
您可能想要使用6502 little-endian順序,特別是如果您的變量可以用作地址。這意味着的低字節,高字節的順序。
我公司擁有一批1F存儲在地址00,我有另一個號碼1E存儲在地址01
你真的想保存在地址$ 00- $ $ 01 001F($ 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
6502是一個8位機器;它通過從較低地址讀取最低有效字節來構造16位量(即,它是小尾數)。
因此,您只需要把1e
到地址1f
前 - 周圍切換它們對當前的佈局,通過移動1f
解決02
或通過其他方式。不需要移位或ORing;實際上6502內部沒有16位寄存器,可以按位邏輯進行移位或操作。
如果兩個字節保持在00
和01
但是相反,則可以例如零出x
並使用($00, x)
尋址模式訪問1f1e
。
- 1. mips彙編代碼以移位位編程
- 2. 6502彙編 - RTS命令和堆棧
- 3. x 86彙編語言:移位乘以64位答案
- 4. 邏輯移位在彙編符號擴展後遺失位ARMv8
- 5. 將字節序列移位N位。彙編語言
- 6. 使用匯編語言進行128位移位?
- 7. 32位到64位內聯彙編移植
- 8. 'atltime.h錯誤32位彙編詩句64位彙編
- 9. 4位乘以8位彙編乘法
- 10. 64位彙編介紹
- 11. 彙編:16位部門
- 12. 添加位x32 mips彙編
- 13. 16位彙編程序
- 14. 32位Linux彙編代碼
- 15. 指定彙編位置
- 16. 64位彙編問題
- 17. 在彙編程序中移動(移位)兩個寄存器
- 18. 如何編譯64位彙編代碼
- 19. 交叉編譯的Windows 64位彙編的64位
- 20. 在64位ubuntu上編譯32位彙編程序
- 21. 無法在彙編器中移動64位立即數
- 22. 如何從00000001開始移位111彙編程序
- 23. IBM大型機彙編 - 使用MVC與寄存器位移
- 24. 爲什麼在這個PIC彙編代碼中不會移位?
- 25. 爲什麼這樣的NES初始化代碼(6502彙編)?
- 26. 間接索引在X寄存器 - 彙編6502
- 27. 使用MIPS彙編更新位字段
- 28. XA彙編:16位立即數
- 29. 64位Linux,彙編語言,問題?
- 30. 彙編乘法操作64位
由於6502是一個8位機,你不能直接與16位數字的工作。你可以分別操縱兩個半部分,不需要輪班。 – Jester 2014-10-06 21:00:23
@Jester你的意思是說,如果我想把東西存儲到'1f1e'中,我需要使用'sta($ 00),y'? – Meteorite 2014-10-06 21:02:28
是的,但請記住,6502是小端,所以要獲得'1f1e',您需要交換兩個字節。你當然也可以使用'sta($ 00,x)',假設'x'爲零。 – Jester 2014-10-06 21:23:00