




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机组成原理与汇编语言程序设计(2013)汇编程序大作 业云南大学软件学院实验报告姓名年级班级学号专业序号实验名称实验八 汇编程序综合设计实验(四则运算器)成绩指导教师 (签名):实验内容:1设计一个功能完善的四则运算器:程序有友好的运行界面;可以方便的输入输出2,10,16进制数据(要求可以处理4位的数据);可以方便的对数据进行四则运算;要求程序能够处理基本的错误信息;程序要求菜单控制;其他程序简介:该程序采用了主程序、子程序、宏相结合的编写方式,通过主程序调用了加、减、乘、除的子程序,在这四个子程序中有分别调用了二、十、十六进制输入输出、进制间转化的子程序。在数值转化为ASCII码的部分,定义了宏进行调整输出。程序实现了16位的二进制、4位的十进制、4位的十六进制的加、减、乘、除运算,并可以通过用户的选择将其转化为其他相应的进制。其中乘法运算的进制转化功能尚不完善,当运算结果超过4位时不能正确的将结果进行输出并进行进制转化。子过程: addition:加法部分 subtraction:减法部分 multiplication:乘法部分division:除法部分b_in:二进制输入hd_in:十六进制、十进制输入b_out:二进制输出btod:二进制转化十进制并输出both:二进制转化十六进制并输出宏: btth:将数值转化为ASCII码保存算法说明: 二进制计算时,要求输入0和1,从高到低为输入,将先输进的数*2+后输入的数,保存到寄存器中,如 1011则按(1*2+0)*2+1)*2+1 十进制计算时,要求输入0-9的整数,从高到低输入,将先输进的数*10+后输进的数,保存到寄存器中,如9817 则按(9*10+8)*10+1)*10+7 十进制计算时,要求输入0-F的整数,从高到低输入,将先输进的数*10H+后输进的数,保存到寄存器中,如AD17 则按(A*10H+D)*10H+1)*10H+7 通过add、sub、mul、div等汇编指令进行计算。二进制输出,从高位到低位按位依次保存到dl中,加30h后输出十进制输出,将结果分别除以10000、(上一步余数除)1000、(上一步余数除)100、(上一步余数除)10将商分别加30h后输出,将最后的余数加上30h后输出 十六进制输出,从高到低每四位依次输出与9比较,大于9加37h调整,小于9加30h调整程序流程及实验结果:主程序部分:提示用户进行运算符号的选择,并进行子程序部分的调用四则运算部分流程:四则运算的加、减、乘、除四部分子程序的流程大致相同,此处采用同一个流程图表示,该部分提示用户进行进制选择,跳转的相应位置并进行相应的运算,调用输入输出子程序,对结果进行进制转化二进制输入流程:该部分进行二进制数的输入,通过移位将先输入的数保存到高位,后输入的数保存到低位,将最终结果保存到bx中二进制输出:该部分将运算结果以2进制的形式输出,通过加30h将数值转化为ASCII码输出十、十六进制数的输入该部分实现十及十六进制数的输入,将最终结果保存到bx中;二进制转十进制并输出该部分通过将得到的二进制数求商取余的方式将最高位的取到商中并输出;二进制转十六进制:该部分通过移位的方式将二进制数转化为16进制输出,其中判断了所输出值与9的大小关系,大于9则加37h调整,小于9则加30h调整加法部分:二进制加法,并将结果转化为10进制二进制加法,并将结果转化为16进制:十进制加法,并将结果转化为二进制:十进制加法,并将结果转化为16进制:十六进制加法,并将结果转化为二进制:十六进制加法,并将结果转化为十进制减法部分:二进制减法,并将结果转化为十进制输出:二进制减法并将结果转化为十六进制输出:十进制减法,并将结果转化为二进制输出:十进制减法,并将结果转化为十六进制输出:十六进制减法,并将结果转化为二进制输出:十六进制减法,并将结果转化为10进制输出:乘法部分:二进制乘法,并结果转化为10进制输出:二进制乘法并将结果转化为16进制输出:十进制乘法并将结果转化为二进制输出十进制乘法,并将结果转化为16进制输出:十六进制乘法,并将结果转化为二进制输出:十六进制乘法,并将结果转化为十进制输出:除法部分:二进制除法,并将结果转化为十进制输出:二进制除法,并将结果转化为16进制输出:十进制除法,并将结果转化为二进制输出:十进制除法,并将结果转化为16进制输出:十六进制除法,并将结果转化为二进制输出:十六进制除法,并将结果转化为10进制输出:代码:datasegmentnote1 db Input a-add,b-sub,c-mul,d-div,0ah,0dh,$note2 db 0ah,0dh,Input a-binary,b-decimal,c-hexadecimal,0ah,0dh,$note3 db 0ah,0dh,Input addend ,0ah,0dh,$note4 db 0ah,0dh,Input another addend, 0ah,0dh,$note5 db 0ah,0dh,The answer is,0ah,0dh,$note6 db 0ah,0dh,Change the answer to a-decimal,b-hexadecimal,any other key-exit,0ah,0dh,$note7 db 0ah,0dh,Change the answer to a-binary,b-hexadecimal,any other key-exit,0ah,0dh,$note8 db 0ah,0dh,Change the answer to a-binary,b-decimal,any other key-exit,0ah,0dh,$note9 db 0ah,0dh,Input minuend, 0ah,0dh,$note10 db 0ah,0dh,Input subtrahend, 0ah,0dh,$note11 db 0ah,0dh,Input multiplicand ,0ah,0dh,$note12 db 0ah,0dh,Input another multiplicand ,0ah,0dh,$note13 db 0ah,0dh,Input dividend, 0ah,0dh,$note14 db 0ah,0dh,Input divisor, 0ah,0dh,$num dw 0num1 dw 0num2 dw 0sig db ?data endscode segmentassume ds:data,cs:codestart:mov ax,data mov ds,ax lea dx,note1 mov ah,09h int 21h m1:mov ah,01h int 21h cmp al,a je ad cmp al,b je subt cmp al,c je mult cmp al,d je divi jmp m1 ad:call addition jmp over subt:call subtraction jmp over mult:call multiplication jmp over divi:call division over:mov ah,01h int 21h mov ah,4ch int 21haddition proc lea dx,note2 mov ah,09h int 21h mov ah,01h int 21h mov sig,al cmp al,a je b_add cmp al,b je d_add cmp al,c je h_add jmp a_endb_add:lea dx,note3 mov ah,09h int 21h call b_in mov num,bx lea dx,note4 mov ah,09h int 21h call b_in lea dx,note5 mov ah,09h int 21h mov ax,num add bx,ax call b_out;此处存在bug,若产生进位不能进行输出,需提示用户只进行15位的运算 lea dx,note6 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je btd cmp al,b je bth jmp a_end btd:lea dx,note5 mov ah,09h int 21h call btod jmp a_end bth:lea dx,note5 mov ah,09h int 21h call btoh jmp a_endd_add:lea dx,note3 mov ah,09h int 21h call hd_in mov num,bx lea dx,note4 mov ah,09h int 21h call hd_in mov ax,num add bx,ax push bx lea dx,note5 mov ah,09h int 21h call btod lea dx,note7 mov ah,09h int 21h mov ah,01 int 21h cmp al,a je dtb cmp al,b je dth jmp a_end dtb:lea dx,note5 mov ah,09h int 21h pop bx call b_out jmp a_end dth:lea dx,note5 mov ah,09h int 21h pop bx call btoh jmp a_endh_add:lea dx,note3 mov ah,09h int 21h call hd_in mov num,bx lea dx,note4 mov ah,09h int 21h call hd_in mov ax,num add bx,ax lea dx,note5 mov ah,09h int 21h call btoh;此处存在bug,当产生进位是,不能对进位进行输出 lea dx,note8 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je htb cmp al,b je htd jmp a_end htb:lea dx,note5 mov ah,09h int 21h call b_out jmp a_end htd:lea dx,note5 mov ah,09h int 21h call btod jmp a_enda_end:retaddition endpsubtraction proc lea dx,note2 mov ah,09h int 21h mov ah,01h int 21h mov sig,al cmp al,a je b_sub cmp al,b je d_sub cmp al,c je h_sub jmp s_endb_sub:lea dx,note9 mov ah,09h int 21h call b_in mov num,bx lea dx,note10 mov ah,09h int 21h call b_in mov ax,num xchg ax,bx sub bx,ax lea dx,note5 mov ah,09h int 21h call b_out lea dx,note6 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je btd cmp al,b je bth jmp s_endd_sub:lea dx,note9 mov ah,09h int 21h call hd_in mov num,bx lea dx,note10 mov ah,09h int 21h call hd_in mov ax,num xchg ax,bx sub bx,ax push bx lea dx,note5 mov ah,09h int 21h call btod lea dx,note7 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je dtb cmp al,b je dth jmp s_endh_sub:lea dx,note9 mov ah,09h int 21h call hd_in mov num,bx lea dx,note10 mov ah,09h int 21h call hd_in mov ax,num xchg ax,bx sub bx,ax lea dx,note5 mov ah,09h int 21h call btoh lea dx,note8 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je htb cmp al,b je htd jmp s_ends_end:retsubtraction endpmultiplication proc lea dx,note2 mov ah,09h int 21h mov ah,01h int 21h mov sig,al cmp al,a je b_mul cmp al,b je d_mul cmp al,c je h_mulb_mul:lea dx,note11 mov ah,09h int 21h call b_in mov num,bx lea dx,note12 mov ah,09h int 21h call b_in mov ax,num mul bx mov num1,dx mov num2,ax lea dx,note5 mov ah,09h int 21h mov num1,dx mov bx,dx call b_out mov ax,num2 mov bx,ax call b_out lea dx,note6 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je m_btd cmp al,b je m_bth jmp m_endm_btd:lea dx,note5;此处错误,尚需修改 mov ah,09h int 21h mov dx,num1 mov bx,dx call btod mov ax,num2 mov bx,ax call btod jmp m_endm_bth:lea dx,note5 mov ah,09h int 21h mov dx,num1 mov bx,dx call btoh mov ax,num2 mov bx,ax call btohd_mul:lea dx,note11 mov ah,09h int 21h call hd_in mov num,bx lea dx,note12 mov ah,09h int 21h call hd_in mov ax,num mul bx push ax lea dx,note5 mov ah,09h int 21h pop ax push ax mov bx,ax call btod lea dx,note7 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je m_dtb cmp al,b je m_dthm_dtb:lea dx,note5 mov ah,09h int 21h pop ax mov bx,ax call b_out jmp m_endm_dth:lea dx,note5 mov ah,09h int 21h pop ax mov bx,ax call btohh_mul:lea dx,note11 mov ah,09h int 21h call hd_in mov num,bx lea dx,note12 mov ah,09h int 21h call hd_in mov ax,num mul bx push ax lea dx,note5 mov ah,09h int 21h pop ax push ax mov bx,ax call btoh lea dx,note8 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je m_htb cmp al,b je m_htdm_htb:lea dx,note5 mov ah,09h int 21h pop ax mov bx,ax call b_out jmp m_endm_htd:lea dx,note5 mov ah,09h int 21h pop ax mov bx,ax call btodm_end:retmultiplication endpdivision proc lea dx,note2 mov ah,09h int 21h mov ah,01h int 21h mov sig,al cmp al,a je b_div cmp al,b je d_div cmp al,c je h_div jmp d_endb_div:lea dx,note13 mov ah,09h int 21h call b_in mov num,bx lea dx,note14 mov ah,09h int 21h call b_in mov ax,num cwd xor dx,dx div bx mov num1,ax mov num2,dx lea dx,note5 mov ah,09h int 21h mov bx,num1 call b_out mov cx,6 l:mov dl,. mov ah,02h int 21h loop l mov bx,num2 call b_out lea dx,note6 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je d_btd cmp al,b je d_bth jmp d_endd_btd:lea dx,note5 mov ah,09h int 21h mov bx,num1 call btod mov cx,6 l4:mov dl,. mov ah,02h int 21h loop l4 mov bx,num2 call btod jmp d_endd_bth:lea dx,note5 mov ah,09h int 21h mov bx,num1 call btoh mov cx,6 l5:mov dl,. mov ah,02h int 21h loop l5 mov bx,num2 call btoh jmp d_endd_div:lea dx,note13 mov ah,09h int 21h call hd_in mov num,bx lea dx,note14 mov ah,09h int 21h call hd_in mov ax,num cwd xor dx,dx div bx mov num1,ax mov num2,dx lea dx,note5 mov ah,09h int 21h mov bx,num1 call btod mov cx,6 l2:mov dl,. mov ah,02h int 21h loop l2 mov bx,num2 call btod lea dx,note7 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je d_dtb cmp al,b je d_dth jmp d_endd_dtb:lea dx,note5 mov ah,09h int 21h mov bx,num1 call b_out mov cx,6 l6:mov dl,. mov ah,02h int 21h loop l6 mov bx,num2 call b_out jmp d_endd_dth:lea dx,note5 mov ah,09h int 21h mov bx,num1 call btoh mov cx,6 l7:mov dl,. mov ah,02h int 21h loop l7 mov bx,num2 call btoh jmp d_endh_div:lea dx,note13 mov ah,09h int 21h call hd_in mov num,bx lea dx,note14 mov ah,09h int 21h call hd_in mov ax,num cwd xor dx,dx div bx mov num1,ax mov num2,dx lea dx,note5 mov ah,09h int 21h mov bx,num1 call btoh mov cx,6 l3:mov dl,. mov ah,02h int 21h loop l3 mov bx,num2 call btoh lea dx,note8 mov ah,09h int 21h mov ah,01h int 21h cmp al,a je d_htb cmp al,b je d_htd jmp d_endd_htb:lea dx,note5 mov ah,09h int 21h mov bx,num1 call b_out mov cx,6 l8:mov dl,. mov ah,02h int 21h loop l8 mov bx,num2 call b_out jmp d_endd_htd:lea dx,note5 mov ah,09h int 21h mov bx,num1 call btod mov cx,6 l9:mov dl,. mov ah,02h int 21h loop l9 mov bx,num2 call btod jmp d_endd_end:retdivision endp b_inproc xor dx,dx mov bx,2 mov cx,16 bin2:mov ah,1 int 21h xor ah,ah sub al,30h add dx,ax mov ax,dx cmp cx,1 je bin1 mul bx bin1:mov dx,ax loop bin2 mov bx,dx retb_in endpb_out proc mov ch,8 mov cl,1 mov dh,bhbot1:ro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民用爆炸物品安全员培训课件
- 民法肖像权课件
- 大学军事考试题目及答案
- 我国新质生产力的发展趋势
- 河南新质生产力先锋图谱
- 民族课件边框
- 新质生产力主题写作:标题技巧
- 新质生产力企业立意高远
- 培养新质生产力的时代意义
- 新质生产力发展倡议书撰写指南
- 信息安全岗位竞聘
- 食品经营许可和备案管理办法培训2024
- 住院患儿实施院内转运临床实践指南2023版课件
- 打包机吊装方案
- 如何列好小说提纲
- 【新教材】部编道德与法治六年级上册-全册-表格式教案教学设计
- 文言实词本义引申义
- 07J902-3 医疗建筑(卫生间、淋浴间、洗池)
- 2024年电工(高级技师)职业鉴定理论考试题库-下(多选、判断题)
- 2024年网上大学智能云服务交付工程师认证考试题库800题(含答案)
- 公共数据交换技术规范
评论
0/150
提交评论