汇编编程 68HC11 微控制器


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  STOP
1( 显示如果将 6 个元素的

表从地址 007f 复制到 009d 的场景(您可以任意输入 6 个元素的值(。

2( 修改程序,以便不需要第 13 行的 TST 计数。(即,第 14 行的 BEQ 分支指令将检查程序执行的正确状态以确定分支条件。

3(修改程序,使第6行的"Ptr RMB 2"不再使用。相反,寄存器 X 指向表 1 中的元素,寄存器 Y 指向表 2 中的元素。

大家好,我对这个问题感到困惑...对于第三个,我的具体问题与表格有关......X 指向空间,Y 指向长度吗?我不知道指的是什么表...

对于第二个,这是否意味着我完全删除了 TST 行以及第 23 行的其余部分?检查程序的"正确状态"意味着什么?

任何帮助都会非常好...谢谢。

关于 (2(:某些指令(包括所有 LOAD 和 STORE 指令(会根据操作结果修改条件代码寄存器 (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(作为参数传递。

最新更新