首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MOS 6502上使用12位地址?

如何在MOS 6502上使用12位地址?
EN

Stack Overflow用户
提问于 2015-03-08 05:52:24
回答 2查看 379关注 0票数 0

所以我有一个关于如何在6502中使用一些寻址的问题。基本上,我有3个值,用来表示6502显示器上像素的12位地址空间。我已经通过一些简单的修改构建了address元素。然而,我不太确定从这里到哪里去。假设我的目标地址是05ff,右下角的像素。我目前拥有的是第一位,它将被添加到0200,第二位,第三位,但不知道如何从这些建立一个12位的数量。有人能提供帮助吗?除了讲座和方尖碑网站之外,我的老师有点让我们感到困惑,因为我仍然无法理解如何使用方尖碑网站来解决问题。有人知道我是怎么做到的吗?

目前,对于地址05ff,我有一个3,一个f和一个f。我知道我可以通过位移位来移动第二个f,但我不确定如何将0200与0300相加,以产生数量0500,然后将其添加到00ff。

EN

回答 2

Stack Overflow用户

发布于 2015-04-30 02:57:21

除非万不得已,否则您真的不想考虑操纵单个比特。

6502是一台8位的机器,所以所有的东西都必须在8位的边界上操作。如果你需要少于“2的偶数幂”的位数,你应该丢弃那些你不想要的逻辑AND。这比尝试用AFAIK的另一种方式“节省”四位更有效。

示例:

代码语言:javascript
复制
;Our first variable.  Holds a 12-bit value but we allocate 16 bits 
; to it because this is an 8-bit architecture
VAR_A_16_LO  EQU $80
VAR_A_16_HI  EQU $81
;Our second variable.  Same thing as above.
VAR_B_16_LO  EQU $82
VAR_B_16_HI  EQU $83
;Our variable where we store the result. 
VAR_C_16_LO  EQU $84
VAR_C_16_HI  EQU $85

             ;Ok, lets add some 12-bit numbers
             ;But first, we have to make sure the variables have 12-bit 
             ; quantities.  This means killing the top 4 bits of the high 
             ; bytes of the variables.  If this is known to be the case this
             ; can be skipped.
             LDA VAR_A_16_HI
             AND #%00001111 ;This logical AND operation will set the upper
                            ; four bits to 0 and keep the lower four bits.
                            ;Of the high byte only.  
             STA VAR_A_16_HI
             LDA VAR_B_16_HI
             AND #%00001111
             STA VAR_B_16_HI
             ;
             ; Now, we can add them as though they were two 16-bit numbers.
             CLC
             LDA VAR_A_16_LO
             ADC VAR_B_16_LO
             STA VAR_C_16_LO
             LDA VAR_A_16_HI
             ADC VAR_B_16_HI
             STA VAR_C_16_HI
             ;
             ; And cut off the top 12 bits of the result just in case of 
             ;overflow.
             LDA VAR_C_16_HI
             AND #%00001111
             STA VAR_C_16_HI
票数 1
EN

Stack Overflow用户

发布于 2015-03-11 10:42:01

在已有评论的基础上进行扩展: 6502只有8位寄存器。它通过赋予zero页面一个提升的状态来增强这些功能:它可以快速引用,并且可以通过它使用矢量化寻址。

例如。

代码语言:javascript
复制
; ... calculate high 8 bits of address in A ...
; this assumes that #$00 is stored at address $00
STA $01

; ... calculate low 8 bits of address and move them into Y;
; calculate value to store in A ...
STA ($00), Y

这将从零页面位置$00$01获取16位地址。然后,它会将Y中的值添加到该地址。它会将A存储到总数中。

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

https://stackoverflow.com/questions/28920425

复制
相关文章

相似问题

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