【发布时间】:2017-01-12 15:54:40
【问题描述】:
我正在尝试为我的大学练习理解这个 emu6502 汇编代码。该代码将八进制数转换为二进制数。
opt f-g-h+l+o+
org $1000
start equ *
lda <text
sta $80
lda >text
sta $81
ldy #0
lda #$a5
jsr binary
lda <text
ldx >text
jsr $ff80
brk
binary sta byte
ldx #7
bitslp lda #'0'
asl byte
bcc pr
lda #'1'
pr sta ($80),y
iny
dex
bpl bitslp
rts
byte dta b(0)
org $2000
text equ *
dta b(0),b(0),b(0),b(0)
dta b(0),b(0),b(0),b(0)
dta b(10) ; '\n'
dta b(0)
org $2E0
dta a(start)
end of file
我不知道这些行中的 符号代表什么:lda <text、ldx >text 以及与equ * 一致的目的?我在互联网上阅读了很多文章,但没有找到关于 lda 之后的大于、小于符号和 equ 之后的星号符号的任何内容。
我也不知道如何为程序提供输入。 (要转换的数字)
【问题讨论】:
-
<是值的低字节部分,>是值的高字节部分。 -
equ为符号定义了一些值(如“symbol = X”)(它是汇编程序的指令,而不是 CPU 的指令)。*是特殊值“当前地址”,机器代码的下一个字节将落在该地址。start位于地址 $1000,因为在它前面的目标地址是由org指令设置的,还没有生成机器代码。 -
text 是一个 8 字节缓冲区的地址。前四个指令将文本地址存储到位置 $80(地址的低位部分)和 $81(地址的高位部分)中。
-
实际上将一些文档提供给您的汇编器,我不确定
*是否 100%,看起来 6502 汇编器有很多约定。虽然我的回答在这种情况下最有意义,但如果您有汇编程序的文档,请相信它。 -
“将八进制数转换为二进制数”是什么意思?查看您的代码,它只是将十六进制数 0xA5 转换为地址 @0x2000 处的 8 个字节,表示 ascii 格式的每个位(0 或 1),从 bit7 到 bit0。然后它调用地址 0xff80 的未知子程序。
标签: assembly