首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >68HC11单片机的汇编语言编程

68HC11单片机的汇编语言编程
EN

Stack Overflow用户
提问于 2015-02-26 07:14:00
回答 1查看 493关注 0票数 0
代码语言:javascript
复制
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)展示从地址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的。

EN

回答 1

Stack Overflow用户

发布于 2015-02-27 03:35:50

关于(2):某些指令(包括所有加载和存储指令)根据操作的结果修改条件码寄存器(CCR)。因此,如果您将条件分支放在这些指令之后,显式的TST指令就会变得多余。

关于(3):这是一个复制例程。您正在从源位置(从$7F开始)复制到目标位置(从$9D开始)。您可以将它们视为数组或表。因此,您有一个源表和一个目标表。

在所有修改之后,这是一个可能的实现:

代码语言:javascript
复制
                    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)作为参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28731547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档