




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告2汇编程序设计初步姓名:学号:学院:光电与信息工程学院班级:2021级网络工程2班实验目的熟悉51单片机的指令系统,掌握汇编语日程序的设计方法,掌握开发的调试方法.实验环境1、PC机1台2、 仿真器软件伟福6000内容与步骤(1) 多字节加法(2) 多字节减法(3) 多字节乘法(4) 多字节除法过程分析(1)多字节加法计算123456H+789ABCH ,将结果存放在内部RAM 22H(高 8 位),21H (中 8 位)和 20H (低 8位)方法一:clr C;(CY)-0mov a,#56h ; (a)=56haddc a,#0bch ; (a)-(a)+0bcH+(CY)mov
2、 20h,a ;(20h)-(a)mov a,#34h ; (a)=34haddc a,#9ah ; (a)-(a)+9aH+(CY) mov 21h,a ; (21h)-(a) mov a,#12h ; (a)=12haddc a,#78h ; (a)-(a)+78H+(CY) mov 22h,a; (22h)-(a)截图:内部ROM的20h,21h, 22h都默认为0进位标志位置0执行完第一次ADDC并将值赋给20H单元后执行完第二次ADDC并将值赋给21H单元后执行完第三次ADDC并将值赋给22H单元后分析:多字节加法课本有 2字节的,我写的是 3字节加法,其他 更高的字节可以依次类推,
3、首先都要将进位标志位置0,依次分字节进行带进位的 ADDC加法运算并将结果存放在指定的地址 位置中,在执行过程中观察累加器A,程序状态存放器 PSW中CY、AC、 OV、P 的变化.方法二:mov r0,#20h ;(r0)-22hmov r1,#28h ;(r1)-32hmov r2,#03h;(r2)-3hclr cloop1:mov a,r0;(a)-(r0)addc a,r1 mov r0,aloop2:inc r0inc r1;r0-(r0)+1;r1-(r1)+1;mov a,r0 ;(a)-(r0)djnz r2,loop1 ;r2-(r2)-1,假设 r2=0,顺序执行,否那么
4、转移sjmp $end截图:内部 ROM 的 20h, 21h, 22h, 28h, 29h, 2ah分别初始化执行第一次循环:;(a)-(r1)+(a)+(CY);(r0)-(a)执行第二次循环执行第三次循环:分析:此代俏口以实现对任意n字节的加法运算. 本例中针对3字节来模拟,其他字节只要改变R2 的值即可,比方四字节那么 R2=4.首先在两个加 数从低位到局位依次存放到内部 ROM的单兀, 在利用存放器R0、R1来存放数据的地址,利用 存放器R2来进行循环次数的限制,使R0, R1所 指向的内存地址逐次加1,实现对应位置的加法, 结果再存放到指7E的从20H开始的位置.(2)多字节减法计
5、算 34AB12H-1278CDH ,将结果存放在内部 RAM 22H(高 8 位),21H (中 8 位)和 20H (低 8 位)方法一:clr CY ;(CY)-0mov a,#12h ;(a)=12hsubb a,#0cdh ;(a)-(a)-0cdH-(CY)mov 20h,a ;(20h)-(a)mov a,#0abh ;(a)=0abhsubb a,#78h ;(a)-(a)-78H-(CY)mov 21h,a ;(21h)-(a)mov a,#34h ;(a)=34hsubb a,#12h ;(a)-(a)-12H-(CY)mov 22h,a ;(22h)-(a)截图:内部RO
6、M的20h,21h, 22h都默认为0进位标志位置0执行完第一次SUBB并将值赋给20H单元后执行完第二次SUBB并将值赋给21H单元后执行完第三次SUBB并将值赋给22H单元后分析:多字节减法课本有1字节的,我写的是3 字节减法,其他更高的字节可以依次类推,首先 都要将进位标志位 CY置0,由于MCS-51中只 有带借位的减法指令.依次分字节进行带进位的 SUBB减法运算并将结果存放在指定的地址位置 中,在执行过程中观察累加器 A,程序状态存放 器PSW中CY、AC、 OV、P的变化.方法二:mov r0,#20h ;(r0)-22hmov r1,#28h ;(r1)-32hmov r2,#
7、03h;(r2)-3hclr cloopl: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-(r2)-1,假设 r2=0,顺序执行,否那么转移sjmp $end截图:内部 ROM 的 20h, 21h, 22h, 28h, 29h, 2ah分别初始化执行第一次循环:分析:此代俏可以实现对任意n字节的减法运算. 本例中针对3字节来模拟,其他字节只要改变R2 的值即可,比方四字
8、节那么 R2=4.首先在两个减 数从低位到局位依次存放到内部 ROM的单兀, 在利用存放器R0、R1来存放数据的地址,利用 存放器R2来进行循环次数的限制,使R0, R1所 指向的内存地址逐次加1,实现对应位置的减法, 结果再存放到指7E的从20H开始的位置.(3)多字节乘法计算 1234H * 0abcdH分析:首先令(20H) -34H(21H) -12H(22H) -0cdH(23H) -0abH1234H*0abcdH-0c374fa4H结果存放在(24H) -0a4H(25H) -4fH(26H) -37H(27H) -0cHmov 20h,#34h;(20h)-24hmov 21h
9、,#12h;(21)-12hmov 22h,#0cdh;(22)-0cdhmov 23h,#0abh;(23)-0abhmov a,20h;将34与cd相乘,低位保存在 24H中,高位暂时保存在25H中,此时24h中的值已经算完mov b,22hmul abmov 24h ,amov 25h,bmov a,21h;将12与cd相乘,低位与地址为25h的数值相加暂时作为25h的值mov b,22hmul abadd a,25hmov 25h,amov a,b ;将高位与之前的进位相加,暂时保存在 26h中addc a,#0mov 26h,amov a,20h;34与ab相乘,低位与地址为 25h
10、的值相加,存入地址25h中,此时25h的值已经算完mov b,23hmul abadd a,25hmov 25h,amov a,baddc a,#0;将高位与之前的进位相加,在与地址为26h的数值相加暂时作为26h的值add a,26hmov 26h,amov a,21h;12与ab相乘,低位与地址为 26h的值相加,存入地址26h中,此时26h的值已经算完mov b,23hmul ab add a,26hmov 26h,amov a,b;将高位与之前的进位相加,作为地址27h的值,此时27h的值已经算完addc a,#0mov 27h,a截图: 初始化赋值执行34*cd完后,低位与地址为25
11、h的值相加,存入地址25h中,此时24h中的值已经算完.将12与cd相乘,低位与地址为25h的数值相加暂时作为25h的值,将高位与之前的进位相加,暂时保存在26h中将34与ab相乘,低位与地址为25h的值相加,存入地址25h中,此时25h的值已经算完.将高位与之前的进位相加,在与地址为 26h的数值相加暂时作为26h的值将12与ab相乘,低位与地址为26h的值相加,存入地址26h中,此时26h的值已经算完.将高位与之前的进位相加,作为地址 27h的值,此时 27h的值已经算完.分析:本代码与手动实际操作相类似,都是根据 之前两个数相乘的进位来计算的,缺点就是对于 实现更多字节的乘法运算代码可能
12、显得冗余过 长.(4)多字节除法计算 0abcdh / 12h商是98bh余数是7分析:mov 20h,#0cdh;(20h)-0cdhmov 21h,#0abh;(21h)-0abhmov 23h,#12h;(23h)-12hmov 31h,#0h;(31h)-0h ;31h用于保存商的局位值mov 30h,#0h;(30)-0h;30h用于保存商的低位值mov a,21hloop1:clr c;进位清零subb a,23h;将除数的高位先与被除数相减jc loop2;札够减产生借位就跳转到LOOP2inc 31h;假设够减,商的高位 +1jmp loopl;重复将除数的高位与被除数相减lo
13、op2:add a,23h;求出高位除于被除数的余数,将其代替原来的高位,等下假设低位不够减时,用于作借位用mov 21h,amov a,20hloop3:clr c;进位清零subb a,23h;将除数的低位与被除数相减,用于保存最终的余数inc 30h;先将30h单元的值加1jc loop4;札够减产生借位就跳转到LOOP4jmp loop3;重复将除数的高位与被除数相减loop4:dec 21h;将除数的高位除于被除数所产生的余数减1,表示向低位借了clr c;进位清零mov r0,21h;将余数用于给低位借位存于 R0cjne r0,#0ffh,loop3 ;循环使高位余数减为 0de
14、c 30h;减去之前loop3多加的1add a,23h;a保存此时的余数值end截图:初始化除数与被除数赋值将除数的高位先与被除数相减,假设不够减产生借位就跳转到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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论