09级微机原理课程设计.doc

上传人:苏美尔 文档编号:7202692 上传时间:2020-11-05 格式:DOC 页数:7 大小:34.01KB
返回 下载 相关 举报
09级微机原理课程设计.doc_第1页
第1页 / 共7页
09级微机原理课程设计.doc_第2页
第2页 / 共7页
09级微机原理课程设计.doc_第3页
第3页 / 共7页
09级微机原理课程设计.doc_第4页
第4页 / 共7页
09级微机原理课程设计.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《09级微机原理课程设计.doc》由会员分享,可在线阅读,更多相关《09级微机原理课程设计.doc(7页珍藏版)》请在三一文库上搜索。

1、2009级计算机专业微机原理与接口技术课程设计一、 设计任务 题目一 用16位乘法指令完成32位无符号数乘法(结果64位) 使用指令,完成双字无符号数乘法程序。算法原理 16位数 16位数 16位数 16位数 DX AX DX AX DX AXDX AX P4 p3 p2 p1设计原理分析: 我的想法是先把32位乘数分成高16位和低16位,分别存放在不同的参数d1、d2中,被乘数依次分为d3和d4,通过16位乘法MUL指令先让d4与d2相乘,得到的结果先赋值给p1、p2,然后d1与d4相乘时,得到的结果中AX值直接与p2相加,DX值先赋值给p3,当d3与d2相乘时,得到的AX与p2相加,DX值

2、与P3相加,此时需考虑进位,所以使用adc指令进行相加,当d3与d1相乘时,DX值先赋给p4,将AX值与p3相加,此时不需要考虑进位,但是最好需要对p4进行进位考虑,所以最后加上一条adc p4,0指令,最后调用dispal子程序将相乘结果p4p3p2p1输出框图:被乘数低16位与乘数低6位相乘开始被乘数低16位与乘数高16位相乘并与上次相乘结果相加被乘数高6位与乘数低6位相乘并与上次相乘结果相加调用输出子程序将乘法结果输出被乘数高16位与乘数高16位相乘并与上次相乘结果相加结束源程序:data segment d1 dw 1234h;乘数高16位 d2 dw 5678h;乘数低16位 d3

3、dw 1234h;被乘数高16位 d4 dw 5678h;被乘数低16位 p1 dw ? ;存放相乘结果 p2 dw ? p3 dw ? p4 dw ?data endssstack segment stack stack;定义堆栈段 dw 200h dup(?)sstack endscode segment;代码段main proc far assume cs:code,ds:data,ss:sstackstart:push ds;为程序结束做准备 sub ax,ax push ax mov ax,data;指向数据段 mov ds,ax mov ax,sstack mov ax,d2;乘数

4、低16位与被乘数低16位相乘 mul d4 mov p1,ax;相乘结果赋值给p1,p2 mov p2,dx mov ax,d1;乘数高16位与被乘数低16位相乘 mul d4 add p2,ax;相乘结果依次赋值和相加给p2、p3 mov p3,dx mov ax,d2;乘数低16位与被乘数高16位相乘 mul d3 add p2,ax;相乘结果与p2相加 adc p3,dx;相乘结果与p3带进位相加 mov ax,d1;乘数高16位与被乘数高16位相乘 mul d3 add p3,ax;相乘结果依次与p3相加和赋值给p4 mov p4,dx adc p4,0;考虑上一步加法操作产生的进位

5、mov al, byte ptr p4+1;将乘法结果依次调用dispal程序输出 call dispal mov al, byte ptr p4 call dispal mov al, byte ptr p3+1 call dispal mov al, byte ptr p3 call dispal mov al, byte ptr p2+1 call dispal mov al, byte ptr p2 call dispal mov al, byte ptr p1+1 call dispal mov al, byte ptr p1 call dispal ret main endpdis

6、pal proc;输出子程序 push cx push dx push ax mov cl,4 shr al,cl or al,30h cmp al,3ah jb br1 add al,7 br1: mov dl,al mov ah,2 int 21h pop ax and al,0fh or al,30h cmp al,3ah jb br2 add al,7br2: mov dl,al mov ah,2 int 21h pop dx pop cx retdispal endpcode ends end start题目二 递归调用子程序 有5个人坐在一起,问第五个人多少岁?他说比第四个人大2岁

7、。问第四个人岁数,他说比第三个人大2岁。问第三个人,又说第二个人大2岁,问第二个人,说比第一个人大2岁。最后问第一个人,它说是10岁。请问第五个人多大。算法通用公式:age(n)=age(n-1)+2 当n1时 age(1)=10 当n=1时递归调用子程序age(n)入口参数:人数n递归结束条件:age(1)=10框图:输入人数开始输入第一个人年龄输入年龄差Call递归子程序Call输出输出子程序入口参数AL=边界1入口参数最低时的子程序结果dl=输入的年龄入口参数值减一Call递归子程序RetDl值加2Ret结束设计原理:我的想法是通过键盘输入人数、第一个人的年龄以及每个人之间的年龄差,通过

8、调用递归子程序,先进行入口参数值的判断,当不等于1时,则跳转到chn处,执行入口参数减一的操作,再次调用递归子程序,直到入口参数为1时,把输入的第一个人年龄赋给dl,然后返回到上次中断处,执行年龄差的加法,直到每个中断都响应,再返回到主程序中,执行输出子程序,将最终结果输出至屏幕上源程序清单:data segment p1 db Input the number of people:,$;输出提示信息 p2 db Input the age of people:,$ p3 db Input the cha of people:,$ p4 db The result is:,$ cr db 0d

9、h,0ah,$data endssstack segment stack stack;定义堆栈段 dw 100h dup (?)sstack endscode segmentmain proc far assume cs:code,ds:data,ss:sstackstart:push ds;以下三行代码为程序结束做准备 xor ax,ax push ax mov ax,data mov ds,ax mov ah,09;输出p1定义的字符串 mov dx, offset p1 int 21h mov ah,1;输入人数到Al int 21h and al,0fh;AL存放N mov bl,al

10、 mov dx,offset cr;回车换行 mov ah,09 int 21h mov ah,09;输出p2定义的字符串 mov dx, offset p2 int 21h mov ah,1;输入第一个人的年龄 int 21h and al,0fh xor bh,bh mov bh,al;存放到bh中 mov dx,offset cr;回车换行 mov ah,09 int 21h mov ah,09;输出p3定义的字符串 mov dx, offset p3 int 21h mov ah,1;输入年龄差值 int 21h and al,0fh xor ch,ch mov ch,al;存放到ch

11、中 mov dx,offset cr;回车换行 mov ah,09 int 21h mov dx,0;dx清零 mov al,bl call fact;调用过程fact push dx mov dx, offset p4;输出结果提示信息 mov ah,09 int 21h pop dx mov al,dh;调用dispal子程序输出结果 call dispal mov al,dl call dispal ret main endp dispal proc;dispal输出子程序 push cx push dx push ax mov cl,4 shr al,cl or al,30h cmp

12、al,3ah jb br1 add al,7 br1: mov dl,al mov ah,2 int 21h pop ax and al,0fh or al,30h cmp al,3ah jb br2 add al,7 br2: mov dl,al mov ah,2 int 21h pop dx pop cx ret dispal endp fact proc;递归子程序 cmp al,1;将入口参数与1进行比较 jnz chn;不相等时转到chn处 mov dl,bh;将第一个人的年龄赋给dl ret chn: push ax dec al;入口参数减1 call fact;递归调用子程序 pop ax add dl,ch;加上年龄差 ret fact endp code ends end start心得体会:通过本次课程设计,我认识到递归调用能给我们带来的便利,同时在课程设计的过程中遇到了很多的问题,其中很多都是一些细节方面的小毛病,这就需要我们在今后的学习中,更加的仔细才能更好的完成一项工作!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1