【发布时间】:2015-03-02 05:20:30
【问题描述】:
首先:对不起,如果这是一个骗局!我搜索了一下,并没有找到可以令人满意地解释这一点的资源。
n00bish 问题在这里!
我试图了解.byte 指令的作用。不同的来源说不同的东西,其要点如下:
.db、DB、.byte 等列出您指定的确切字节,作为数据而不是指令 (http://forum.6502.org/viewtopic.php?f=2&t=2374)
cc65手册给出了类似的模糊:
.byte:定义字节大小的数据。后面必须有一个序列 (字节范围)表达式或字符串。
例子:
.byte "Hello " .byt "world", $0D, $00
我不知道那是什么意思。我认为所有与定义数据相关的操作都是读写内存地址的变体。所以像这样的东西(来自NES开发)
; Number of PRG-ROM blocks
.byte $01
; Number of CHR-ROM blocks
.byte $01
; ROM control bytes: Horizontal mirroring, no SRAM
; or trainer, Mapper #0
.byte $00, $00
它到底在做什么?这一切都可以用操作码来解释,还是在做一些更有趣的事情?对我来说,它看起来可能是从零页开始写顺序数据,像这样??:
LDA #$01
STA $00
LDA #$01
STA $01
LDA #$00
STA $02
LDA #$00
STA $03
我离这儿很远吗?我一直在阅读 6502 Software Design by Leo Scanlon 并且我没有看到对该(或任何)指令的引用。我正在学习 6502 以进行 NES 开发,所有示例代码都充满了 .byte 、 .ascii 和其他几个指令。在尝试浏览用户贡献的 NES 教程世界之前,我真的很想尝试从像 Scanlon 书这样的学术文本中打下 6502 的坚实基础,但这成为我理解 NES 6502 的障碍。
【问题讨论】:
-
指令将字节直接放在输出中。没有内存访问。例如,
LDA #1与.byte $A9, $01相同。 -
什么是“输出”?
-
情况正好相反。所有操作码都可以翻译成
.byte指令。这就是汇编程序所做的。它需要操作码并将它们转换为字节。 -
就像您引用的文章中所说的那样:“作为数据而不是说明。”如果您需要将数据放入程序中,您只需要将字节放入内存映像中。
-
哈哈这有点拖沓……“输出”是程序文件的内容。现在这一切都说得通了。 @RaymondChen 感谢您帮助理解这一点