16位乘法指令完成32位无符号数乘法微机接口课程设计.doc

上传人:星星 文档编号:1081773 上传时间:2024-04-14 格式:DOC 页数:11 大小:127.50KB
下载 相关 举报
16位乘法指令完成32位无符号数乘法微机接口课程设计.doc_第1页
第1页 / 共11页
16位乘法指令完成32位无符号数乘法微机接口课程设计.doc_第2页
第2页 / 共11页
16位乘法指令完成32位无符号数乘法微机接口课程设计.doc_第3页
第3页 / 共11页
16位乘法指令完成32位无符号数乘法微机接口课程设计.doc_第4页
第4页 / 共11页
16位乘法指令完成32位无符号数乘法微机接口课程设计.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、微机原理与接口技术课程设计 17周 B330 微机原理与接口技术课程设计题目一:用位乘法指令完成位无符号数乘法、 要求:以十六进制格式输入乘数与被乘数,以十六进制格式显示结果,两个数相乘。十六进制输入,十六进制输出。、 设计思路:实现个位无符号数的相乘,被乘数在和寄存器中,乘数在和寄存器中,最后的位乘积在,中。、 程序代码如下:data segment p1 db Input the first number:$ p2 db 0dh,0ah,Input the second number:$ p3 db 0dh,0ah,The result is:$ p4 db 0dh,0ah,Error!,

2、$ key1 db 11 dup(?) key2 db 11 dup(?) x db 4 dup(?) y db 4 dup(?) p dw 4 dup(?)data endssstack segment stack stack db 100h dup(?)sstack endscode segmentmain proc far assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset p1 mov ah,09h int 21h ; 显示 p1 mov dx,offset x mov si,dx mov dx,offset

3、 key1 mov bx,dx mov bx,byte ptr 9 mov ah,0ah ;输入第一个数 int 21h mov dx,offset key1 call switch mov dx,offset p2 mov ah,09h int 21h ;显示p2 mov dx,offset y mov si,dx mov dx,offset key2 mov bx,dx mov bx,byte ptr 9 mov ah,0ah ;输入第二个数 int 21h call switch mov ah,x+2;个数乘法 mov al,x+3 ;x1 mov bh,y+2 mov bl,y+3 ;

4、y1 mul bx ;x1*y1 mov p+2,dx mov p,ax mov ah,x mov al,x+1 ;x2 mul bx ;x2*y1 add p+2,ax adc p+4,dx mov ah,x+2 mov al,x+3 ;x1 mov bh,y mov bl,y+1 ;y2 mul bx ;x1*y2 add p+2,ax adc p+4,dx adc p+6,0 mov ah,x mov al,x+1 ;x2 mul bx ;x2*y2 add p+4,ax adc p+6,dx mov dx,offset p3;取出结果 mov ah,09 int 21h mov bx,

5、offset p ;显示结果 mov ch,8loop2: mov al,bx+7 push ax and al,0f0h;保留al的高位,清零低位 mov cl,4 shr al,cl;将al右移位 add al,30h cmp al,3ah jb ds1 add al,7ds1: mov dl,al;将al中的ASCII送入dl mov ah,2;将dl的内容输出到屏幕上 int 21h pop ax and ax,0fh add al,30h cmp al,3ah jb ds2 add al,7ds2: mov dl,al;将al中的ASCII送入dl mov ah,2 int 21h

6、dec bx dec ch jnz loop2 mov ah,4ch; 返回操作系统 int 21hmain endpswitch proc;子程序转换 mov bx,dx add bx,2 mov cx,0404hloop1: mov al,bx sub al,30h cmp al,0ah jb L1 sub al,07h cmp al,10h jb L1 sub al,20h cmp al,10h jb L1 mov dx,offset p4 mov ah,09h int 21h mov ah,4ch int 21hL1: shl al,cl push ax mov al,bx+1 sub

7、 al,30h cmp al,0ah jb L2 sub al,07h cmp al,10h jb L2 sub al,20h cmp al,10h jb L2 mov dx,offset p4 mov ah,09h int 21h mov ah,4ch int 21hL2: mov dl,al pop ax add al,dl mov ds:si,al inc si add bx,2 dec ch jnz loop1 retswitch endpcode ends end start ;程序结束、运行结果正确结果显示。错误输入给出错误提示!题目二:递归调用子程序设计有个人坐在一起,问第五个人

8、多少岁?他说比第四个人大岁。问第四个人,他说比第三个大岁,问第三个人,又说比第二个人大岁。问第二个人,说比第一个人大岁,最后问第一个人,他说是岁,请问第五个人多大?用递归调用的方法设计程序完成本题。、 要求:个人,输入人数和第一个人的年龄,输出结果,十进制输入,十进制输出。、 实验原理算法:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10通用公式:age(n)=age(n-1)+2 当n1时age(1)=10 当n=1时3、程序流程图、程序代码如下:data segmentp1 db Input the

9、number of people(199):$p2 db 0dh,0ah,Input the age of first people:$p3 db 0dh,0ah,The age cha is:$p4 db 0dh,0ah,The age of last people:$p5 db 0dh,0ah,Input Error!$keybuf db 5 dup(?)data endssstack segment stack sstack st1 db 100 dup(?)sstack endscode segmentmain proc far assume cs:code,ds:data,ss:ss

10、tackstart: mov ax,data mov ds,ax mov dx,offset p1 mov ah,09h int 21h ; 显示 p1 call hl cmp ch,0ffh je hl push ax mov dx,offset p2 mov ah,09h int 21h ; 显示 p2 call hl cmp ch,0ffh je hl push ax mov dx,offset p3 mov ah,09h int 21h ; 显示 p3 call hl cmp ch,0ffh je hl push ax pop cx;年龄差 pop bx;第一个人的年龄 pop ax;

11、总人数 mov dx,0 call lv mov bx,dx mov dx,offset p4 ; 显示p4 mov ah,09h int 21h mov cl,08h ; 将结果转化成进制并且显示 xor ax,ax mov ax,bx mov dl,100 div dl push ax add al,30h ; 显示百位 mov dl,al mov ah,2 int 21h pop ax shr ax,cl mov dl,10 div dl push ax add al,30h ; 显示 十位 mov dl,al mov ah,2 int 21h pop ax shr ax,cl add

12、al,30h ; 显示 个位 mov dl,al mov ah,2 int 21h mov ah,4ch ; 返回操作系统 int 21hmain endpswitch proc add bx,2 mov cl,4 mov al,bx sub al,30h cmp al,0ah jb L1 mov dx,offset p5 mov ah,09h int 21h mov ch,0ffh jmp L3 ; 给出错误提示L1: push ax inc bx mov al,bx sub al,30h cmp al,0ah jb L2 mov dx,offset p5 mov ah,09h int 21

13、h mov ch,0ffh jmp L3 ; 给出错误提示L2: mov dl,al pop ax mov bl,0ah mul bl add al,dlL3: ret switch endphl proc near mov dx,offset keybuf mov bx,dx mov bx,byte ptr 3 mov ah,0ah ; 输入数字 int 21h call switch rethl endplv proc near ; 递归子程序 cmp al,1 ;与作比较 jnz chn ; 不等于,跳转到chn mov dl,bl ; 等于1,产生第一个人的年龄 ret ; 返回主程序

14、chn: push ax; ax进栈 dec al ;人数减1 call lv ; 再次调用子程序lv pop ax ;ax出栈 add dl,cl ;递归计算结果 ret ;返回主程序lv endpcode ends end start ;程序结束、运行结果共个人,第一个人的年龄是10岁,差龄是岁,最后一个人的年龄是岁共个人,第一个人的年龄是10岁,差龄是岁,最后一个人的年龄是岁因为是10 进制输入,给出错误提示!课程设计总结通过这次的课程设计,让我懂嘚了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把握所学的理论知识与实际相结合起来,从理论中得出结论,才能真正提高自己的能力!在设计的过程中遇到问题,可以说还行,毕竟第一次做的,难免会遇到各种问题,同时在此过程中发现了自己的不足之处,对以前所学过的知识理解不够深,掌握不牢固。不过最终还是挺顺利的,在此谢谢老师的指导,还有同学们的帮助!本文来自网络,版权归原作者所有,请下载后,尽快删除。11计算机班30号。

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922