我正在尝试使用6502处理器在汇编中编写while循环,但我不知道如何编写十六进制代码。我已经看到了使用速记方式编写的示例,其中有一个循环应该在哪里开始和结束的标签,但是对于实际的十六进制代码,我看不到任何东西。
我认为有用的两个代码是:
比较内存中的一个字节与X reg(简写:CPX,十六进制:EC)。如果相等,则将Z标志设置为零,并且
如果Z标志= 0,则分支X个字节(简写:BNE,十六进制:D0)
最佳答案
这是您开始的地方:http://www.obelisk.demon.co.uk/6502/。该页面具有可在PC上运行的交叉汇编程序。那对您来说可能是一个很好的开发平台。
在做任何事情之前,您必须了解6502的操作原理。然后,您必须了解软件开发过程,其中包括:
-准备一个所谓的“源文件”,
您的象征性指示
称“简写”
-使用
汇编程序,翻译该源
归档到机器指令中
对6502的理解
-加载
翻译成6502
-讲
6502执行翻译
机器指令
您的示例程序尝试将LEN
内存字节从SRC
复制到DST
。
您可以这样格式化:
LDX #0 ; Start with the first byte
_LOOP LDA SRC,X ; load a byte from SRC into the A register
STA DST,X ; store that byte into DST
INX ; bump the index register to point to the next SRC and DST locations
CPX #LEN ; have we moved LEN characters?
BNE _LOOP ; if not, go move the next one
添加更多语句行之后(例如
END
);在定义了SRC
,DST
和LEN
之后,将整个内容保存在名为cploop.txt
的文件中。然后,您告诉汇编程序进行翻译。汇编器附带一个二进制6502机器代码文件,该文件可以表示为您正在谈论的十六进制字节。
您将该机器代码文件提供给模拟的6502。然后您以某种方式告诉6502执行机器代码所体现的操作。