1 ORG $0020 start of RAM (data)
2 AT1 RMB 2
3 Space RMB 1
4 Length RMB 1
5 Count RMB 1
6 Ptr RMB 2
7 ORG $E000 start of ROM (program)
8 START LDX AT1
9 STX Ptr
10 LDAA Length
11 STAA Count
12 LDAB Space
13 LOOP TST Count
14 BEQ STOP
15 LDX Ptr
16 LDAA 0,X
17 ABX
18 STAA 0,X
19 DEC Count
20 LDX Ptr
21 INX
22 STX Ptr
23 BRA LOOP
24 STOP1)展示从地址007f复制到009d的6元素表的场景(可任意输入6元素值)。
2)修改程序,这样就不需要第13行的TST计数了。(即,行14上的BEQ分支指令将检查程序执行的正确状态以确定分支条件。)
3)修改程序,使第6行的“Ptr人民币2”不使用。相反,寄存器X指向表1中的元素,寄存器Y指向表2中的元素。
嘿,大家好,我被第三个问题难住了,我的具体问题是关于Tables...Does的X点到空间,Y点到长度?我不知道指的是哪张表...
对于第二个,这是否意味着我完全删除了TST行以及第23行的循环的其余部分?检查程序的“正确状态”意味着什么?
任何帮助都是非常nice...Thanks的。
发布于 2015-02-27 03:35:50
关于(2):某些指令(包括所有加载和存储指令)根据操作的结果修改条件码寄存器(CCR)。因此,如果您将条件分支放在这些指令之后,显式的TST指令就会变得多余。
关于(3):这是一个复制例程。您正在从源位置(从$7F开始)复制到目标位置(从$9D开始)。您可以将它们视为数组或表。因此,您有一个源表和一个目标表。
在所有修改之后,这是一个可能的实现:
org $0020 ;start of RAM (data)
;AT1 rmb 2
;Space rmb 1
;Length rmb 1
;Count rmb 1
org $E000 ;start of ROM (program)
Start ldab #6 ;ldaa Length (affects CCR[Z] bit)
;staa Count (affects CCR[Z] bit)
beq Done ;(only needed if length is unknown, redundant when fixed at 6)
ldx #$7F ;ldx AT1 (X is source pointer)
ldy #$9D ;ldy AT1 (Y is destination pointer)
;ldab Space
;aby
Loop ldaa ,x ;load source byte
staa ,y ;save to destination
inx ;increment source pointer
iny ;increment destination pointer
decb ;dec Count (affects CCR[Z] bit)
bne Loop ;repeat until Count reaches zero
Done bra * ;spin here forever (halt)
org $FFFE
dw Start我打赌接下来你的讲师会让你把它转换成一个通用子例程,在那里你可以传递源指针(X),目标指针(Y)和长度(B)作为参数。
https://stackoverflow.com/questions/28731547
复制相似问题