以下为《实验报告4汇编语言程序设计实验》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
实验报告
盛某某 ***E0225
实验四 汇编语言程序设计实验
(实验过程中遇到的问题与分析在“三、程序运行现象及分析中”)
一、实验原理与步骤
1.实验原理
Ⅰ.顺序程序
机器执行这类程序时也只需按照先后顺序依次执行,中间不会有任何分文。在这类程序中,大量使用了数据传送指令,程序的结构比较单一,可以成为复杂程序的某个组成部分。
数据传送指令按其访问的区域可以分为程序存储器访问指令、片外数据存储器的访问指令和内部数据存储器的传送指令;按功能可以分为一般传送,交换,堆栈操作等指令。此类指令的寻址方式最多,要注意各种寻址方式的区别。传送指令的执行对标志位没有影响。
Ⅱ.循环程序的一般结构
循环程序一般由循环初始化、循环处理、循环修改和循环判终等几个部分组成。这几个部分有两种组合方式,一种是“先执行,后判断”,如图4.1所示。这种结构的循环至少执行一次循环体。另一种是“先判断,后循环”,这种结构的循环先判断条件,如果满足循环结束条件,则直接跳出循环,一次也不执行循环体,即循环次数为零。如果能确保至少执行一次循环.则采用以上任何一种循环结构都可以,否则采用后一种循环结构为宜。
Ⅲ.查表程序
查表程序常用于数值转换、常数查找等情况。程序的主要思想是将所有可能的结果数据项存放在ROM中连续的空间里,形成一个数据表,每个数据项占用相等的存储单元,则第i个数据项的首地址ADDR,可用下列公式计算:
ADDR=TABST十i×n
其中TABST是数据表的首地址,n是每个数据项占有的单元数。在设计程序时将TABST作为基地址,i×n作为偏移量,利用查表指令取出相应的数据。
设计查表程序时需要注意几个问题:
(1)不是所有的函数计算都可以使用查表程序。当数据项的序号i与自变量x之间不存在简单明了的函数关系或数据表占用存储空间的代价比函数计算本身的代价大得多时,使用查表程序是不明智的。
(2)当偏移量i ×M超过255时,不能简单地使用查表指令,可考虑利用加法指令完成基地址加偏移量。
(3)当数据项的字节数M大于1时,取数据需要用到多次MOVC指令,要注意偏移量的保护。
(4)使用MOVC A,@A+PC指令时,由于PC指示该指令的下一个单元地址,不一定是数据表的首地址,所以偏移量事先需要调整。
2.实验步骤
Ⅰ.观察数据传送指令的运行结果
设置PC=0000H,输入如下程序,汇编后单步运行,每执行一步后查看相应的寄存器或存储单元的内容。
Ⅱ.数据块移动程序的设计与调试
将片内RAM 30H开始的10个单元数据块传送到片内RAM 40H开始的单元。
(1)写出程序清单。
(2)调试并运行程序。
Ⅲ.查表程序的设计与调试
设计一个查表程序.完成计算y=x3。x的取值范围是0~20。存放在R7寄存器,用二进制数表示。要求查表后的y值存放在R6、R5寄存器中,用压缩的BCD码表示。
(1)写出程序清单,并加注释。
(2)调试并运行该程序。
二、程序清单
1.Ⅰ步骤实验,程序已提供,此处省略。
2.Ⅱ步骤实验
Ⅰ.程序流程图
/
Ⅱ.汇编语言源程序
;程序功能:将片内RAM 30H开始的10个单元数据块传送到片内RAM 40H开始的单元。
;参数:传输数据地址、循环计数
;占用资源:R0、R1、R7、A
ORG 0000H
AJMP START ;跳转到主程序
ORG 0030H ;主程序入口地址
START: MOV R0, #30H ;设置地址指针
MOV R1, #40H
MO 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 行后记录:R6= 00H ,R5= 08H 。
(ii)运行前设置:R7=0FH,连续运行后记录:R6= 33H ,R5= 75H 。
(i)运行前设置:R7=14H,连续运行后记录:R6= 80H ,R5= 00H 。
/
最后,用X=3来实验,结果存放30H,31H。如图,结果正确。(R6,R5作为寄存器的结果忘记拍照了)
实验中遇到的问题与分析解决:
Q1:步骤Ⅲ的程序结果总是不对
解决:当初Ax2使用的是“MUL AB”指令,再调取结果时容易出错。后面用右移位指令“RLC A”完成乘法操作,同时要注意对进位标志位C的清零。
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《实验报告4汇编语言程序设计实验》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。