LDA<子程序x86汇编emu 6502

时间:2017-01-11 16:42:27

标签: assembly

我试图理解我的大学练习的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

我不知道&lt;,&gt;符号代表以下几行:lda <textldx >text以及与equ *对齐的目的?我在互联网上阅读了很多文章,但没有发现任何关于大于,低于lda之后的标志和等于之后的星号标志。

我也不知道如何为程序提供输入。 (要转换的数字)

1 个答案:

答案 0 :(得分:0)

显示的代码将A中的值转换为$ 2000

的ascii-string

代码的主要部分是

binary          sta byte          ; store value to be encoded
                ldx #7            ; loop counter: 1 + 7 times = 8 repeats

; shift A bit by bit, and convert each bit into "0" or "1"

bitslp          lda #'0'          ; default value for bit: not set "0"
                asl byte          ; check next bit (top bit -> carry)
                bcc pr            ; bit clear? keep the "0"
                lda #'1'          ; otherwise use a "1" ...

; store the ascii result at "string pointer" ($80/$81)+y

pr              sta ($80),y       ; ... and store it
                iny               ; y++ (increase string "pointer")

                dex               ; loop counter
                bpl bitslp        ; loop branch
                rts

周围的代码只加载值
- 2000美元到[$ 80 / $ 81](“字符串”),
- $ 0进入Y(这将属于“二进制”子程序),和 - 要转换的A的$ F4(样本值)
最后调用$ ff80(也许是一些输出函数?谁知道:-))