版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告2 汇编程序设计初步姓名: 学号:学院:光电与信息工程学院 班级:2012级网络工程2班实验目的熟悉 51 单片机的指令系统,掌握汇编语言程序的设计方法,掌 握开发的调试方法。实验环境1、PC 机 1 台 2、仿真器软件 伟福6000内容与步骤(1)多字节加法 (2)多字节减法 (3)多字节乘法 (4)多字节除法过程分析(1)多字节加法计算123456H+789ABCH,将结果存放在内部RAM 22H(高8位),21H(中8位)和20H(低8位)方法一:clr C ;(CY)<-0 mov a,#56h ; (a)=56h addc a,#0bch ; (a)<-(a)+0
2、bcH+(CY) mov 20h,a ;(20h)<-(a) mov a,#34h ; (a)=34h addc a,#9ah ; (a)<-(a)+9aH+(CY) mov 21h,a ; (21h)<-(a) mov a,#12h ; (a)=12h addc a,#78h ; (a)<-(a)+78H+(CY) mov 22h,a ; (22h)<-(a)截图:内部ROM的20h,21h,22h都默认为0进位标志位置0执行完第一次ADDC并将值赋给20H单元后执行完第二次ADDC并将值赋给21H单元后执行完第三次ADDC并将值赋给22H单元后分析:多字节加法
3、课本有2字节的,我写的是3字节加法,其他更高的字节可以依次类推,首先都要将进位标志位置0,依次分字节进行带进位的ADDC加法运算并将结果存放在指定的地址位置中,在执行过程中观察累加器A,程序状态寄存器PSW中CY 、AC、 OV 、P的变化。方法二: mov r0,#20h ;(r0)<-22h mov r1,#28h ;(r1)<-32h mov r2,#03h ;(r2)<-3h clr cloop1: mov a,r0 ;(a)-<(r0) addc a,r1 ;(a)-<(r1)+(a)+(CY) mov r0,a ;(r0)<-(a)loop2:
4、inc r0 ;r0<-(r0)+1; inc r1 ;r1<-(r1)+1; mov a,r0 ;(a)-<(r0) djnz r2,loop1 ; r2<-(r2)-1,若r2=0,顺序执行,否则转移 sjmp $ end截图:内部ROM的20h,21h,22h,28h,29h,2ah分别初始化执行第一次循环:执行第二次循环执行第三次循环:分析:此代码可以实现对任意n字节的加法运算。本例中针对3字节来模拟,其他字节只要改变R2的值即可,比如四字节则R2=4。首先在两个加数从低位到高位依次存放到内部ROM的单元,在利用寄存器R0、R1来存放数据的地址,利用寄存器R2来
5、进行循环次数的控制,使R0,R1所指向的内存地址逐次加1,实现对应位置的加法,结果再存放到指定的从20H开始的位置。(2)多字节减法计算34AB12H-1278CDH,将结果存放在内部RAM 22H(高8位),21H(中8位)和20H(低8位)方法一:clr CY ;(CY)<-0 mov a,#12h ;(a)=12h subb a,#0cdh ;(a)<-(a)-0cdH-(CY) mov 20h,a ;(20h)<-(a) mov a,#0abh ;(a)=0abh subb a,#78h ;(a)<-(a)-78H-(CY) mov 21h,a ;(21h)&l
6、t;-(a) mov a,#34h ;(a)=34h subb a,#12h ;(a)<-(a)-12H-(CY) mov 22h,a ;(22h)<-(a)截图:内部ROM的20h,21h,22h都默认为0进位标志位置0执行完第一次SUBB并将值赋给20H单元后执行完第二次SUBB并将值赋给21H单元后执行完第三次SUBB并将值赋给22H单元后分析:多字节减法课本有1字节的,我写的是3字节减法,其他更高的字节可以依次类推,首先都要将进位标志位CY置0,因为MCS-51中只有带借位的减法指令。依次分字节进行带进位的SUBB减法运算并将结果存放在指定的地址位置中,在执行过程中观察累加
7、器A,程序状态寄存器PSW中CY 、AC、 OV 、P的变化。方法二:mov r0,#20h ;(r0)<-22h mov r1,#28h ;(r1)<-32h mov r2,#03h ;(r2)<-3h clr cloop1: mov a,r0 ;(a)<-(r0) subb a,r1 ;(a)<-(r1)-(a)-(CY) mov r0,a ;(r0)<-(a)loop2: inc r0 ;r0<-(r0)+1; inc r1 ;r1<-(r1)+1; mov a,r0 ;(a)<-(r0) djnz r2,loop1 ; r2<
8、-(r2)-1,若r2=0,顺序执行,否则转移 sjmp $end截图:内部ROM的20h,21h,22h,28h,29h,2ah分别初始化执行第一次循环:执行第二次循环:执行第三次循环:分析:此代码可以实现对任意n字节的减法运算。本例中针对3字节来模拟,其他字节只要改变R2的值即可,比如四字节则R2=4。首先在两个减数从低位到高位依次存放到内部ROM的单元,在利用寄存器R0、R1来存放数据的地址,利用寄存器R2来进行循环次数的控制,使R0,R1所指向的内存地址逐次加1,实现对应位置的减法,结果再存放到指定的从20H开始的位置。(3)多字节乘法计算1234H * 0abcdH分析:首先令(20
9、H)=34H (21H) =12H(22H) =0cdH(23H) =0abH1234H*0abcdH=0c374fa4H结果存放在(24H) =0a4H(25H) =4fH(26H) =37H(27H) =0cH mov 20h,#34h ;(20h)<-24h mov 21h,#12h ;(21)<-12h mov 22h,#0cdh ;(22)<-0cdh mov 23h,#0abh ;(23)<-0abh mov a,20h ;将34与cd相乘,低位保存在24H中,高位暂时保存在25H中,此时24h中的值已经算完 mov b,22h mul ab mov 24h
10、 ,a mov 25h,b mov a,21h ;将12与cd相乘,低位与地址为25h的数值相加暂时作为25h的值 mov b,22h mul ab add a,25h mov 25h,a mov a,b ;将高位与之前的进位相加,暂时保存在26h中 addc a,#0 mov 26h,a mov a,20h ;34与ab相乘,低位与地址为25h的值相加,存入地址25h中,此时25h的值已经算完 mov b,23hmul ab add a,25h mov 25h,a mov a,b addc a,#0 ;将高位与之前的进位相加,在与地址为26h的数值相加暂时作为26h的值 add a,26h
11、mov 26h,a mov a,21h ;12与ab相乘,低位与地址为26h的值相加,存入地址26h中,此时26h的值已经算完 mov b,23h mul ab add a,26h mov 26h,a mov a,b ;将高位与之前的进位相加,作为地址27h的值,此时27h的值已经算完 addc a,#0 mov 27h,a截图:初始化赋值执行34*cd完后,低位与地址为25h的值相加,存入地址25h中,此时24h中的值已经算完。将12与cd相乘,低位与地址为25h的数值相加暂时作为25h的值,将高位与之前的进位相加,暂时保存在26h中将34与ab相乘,低位与地址为25h的值相加,存入地址25
12、h中,此时25h的值已经算完。将高位与之前的进位相加,在与地址为26h的数值相加暂时作为26h的值将12与ab相乘,低位与地址为26h的值相加,存入地址26h中,此时26h的值已经算完。将高位与之前的进位相加,作为地址27h的值,此时27h的值已经算完。分析:本代码与手动实际操作相类似,都是根据之前两个数相乘的进位来计算的,缺点就是对于实现更多字节的乘法运算代码可能显得冗余过长。(4)多字节除法计算0abcdh / 12h商是98bh 余数是7分析: mov 20h,#0cdh ;(20h)<-0cdh mov 21h,#0abh ;(21h)<-0abh mov 23h,#12h
13、 ;(23h)<-12h mov 31h,#0h ;(31h)<-0h ;31h用于保存商的高位值 mov 30h,#0h ;(30)<-0h ; 30h用于保存商的低位值 mov a,21hloop1: clr c ; 进位清零 subb a,23h ;将除数的高位先与被除数相减 jc loop2 ;若不够减产生借位就跳转到LOOP2 inc 31h ;若够减,商的高位+1 jmp loop1 ; 重复将除数的高位与被除数相减loop2: add a,23h ;求出高位除于被除数的余数,将其代替原来的高位,等下若低位不够减时,用于作借位用 mov 21h,a mov a,2
14、0hloop3: clr c ;进位清零 subb a,23h ;将除数的低位与被除数相减 ,用于保存最终的余数 inc 30h ; 先将30h单元的值加1 jc loop4 ;若不够减产生借位就跳转到LOOP4 jmp loop3 ;重复将除数的高位与被除数相减loop4: dec 21h ;将除数的高位除于被除数所产生的余数减1,表示向低位借了 clr c ;进位清零 mov r0,21h ;将余数(用于给低位借位)存于R0 cjne r0,#0ffh,loop3 ; 循环使高位余数减为0 dec 30h ;减去之前loop3多加的1add a,23h ;a保存此时的余数值end 截图:初
15、始化除数与被除数赋值将除数的高位先与被除数相减,若不够减产生借位就跳转到LOOP2,若够减,商的高位+1。重复将除数的高位与被除数相减。经过几次相减后不够减跳转到loop2求出高位除于被除数的余数,将其代替原来的高位,等下若低位不够减时,用于作借位用将除数的低位与被除数相减 ,用于保存最终的余数, 先将30h单元的值加1, 若不够减产生借位就跳转到LOOP4, 重复将除数的高位与被除数相减经过几次相减后不够减跳转到loop4, 将除数的高位所产生的余数减1,表示向低位借了,将余数(用于给低位借位)存于R0循环使高位余数减为0,低位向高位借位后,继续和被除数对减过程中的一种状态执行循环后,30h减去之前loop3多加的1, a保存此时的余数值分析:这个除法是针对2字除于1字节的,有局限性。程序先利用除数高位除于被除数,得到商的高位和用于借位的余数,接下来用除数的低位除于被除数,若不够除则依次向高位的余数借位,直到高位的余数为0,累加器A用于保存最后余数的值。结果总结由于这周有很多考试,此处实验由于时间有点紧,我之前写的多字节加法和减法都是比较简单的,存在局限性,后来看了网上的一些教程,才改进多了方法2,可针对任意字节的加减法。对于多字节的乘法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 足球店铺活动策划方案(3篇)
- 铝板幕墙保温施工方案(3篇)
- 隔震减震施工方案(3篇)
- 饭店地摊活动策划方案(3篇)
- 溺水儿童急救的媒体宣传
- 中年职业转型指南
- 双城单招就业方向指南
- 通信网络管理员岗前工作考核试卷含答案
- 击奏乐器制作工岗前规章制度考核试卷含答案
- 野生动物产品采集加工利用工常识评优考核试卷含答案
- 2026四川成都锦泰财产保险股份有限公司招聘4人笔试历年难易错考点试卷带答案解析
- 2025年村公共服务专员招聘笔试试题及答案
- 国航股份信息管理部校园招聘笔试题库2026
- 2026贵州磷化集团社会招聘77人笔试历年备考题库附带答案详解
- 水利站人员培训考核制度
- 房屋结构改造合同范本
- 内蒙古自治区安全生产管理条例
- 宾语从句复习教案(2025-2026学年)
- 先天性心脏病教案
- 高速救援安全培训记录课件
- 非税收入管理培训课件
评论
0/150
提交评论