




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课 程 设 计 说 明 书实验名称:汇编语言实现四则运算 指导教师: 院 系: 信息科学与工程学院 学生姓名: 学 号: 专业班级: 计算机网络技术 2011年05月29日目录一课程设计的目的二总体设计思想.1三各算法流程图.3 四、源代码.6五、程序执行结果.19.设计总结.20 设计目的一设计目的 通过本课程设计所要达到的目得是:1.培养理论联系实际的设计思想,提高综合运用汇编语言课程的理论分析问题.解决问题的能力。2.通过查找运用设计资料,完成必须的基本训练。3.通过本课程设计加深对计算机系统内部的了解,为以后的学习打好基础。设计思想二设计思想2.1 存储结构(1)根据提示信息从键盘上
2、输入第一个、第二个十进制数。将这两个数分别存放在digit1、digit2 中。(2)对这两个数分别做加、减、乘、除。所得结果分别存放在result_add、result_sub、result_mul、result_div1、result_div2。2.2 设计方法(1)从键盘上输入两个十进制数(2)将这两个十进制数分别转化成二进制数。(3)对二进制数分别进行加、减、乘、除运算。(4)对于减、除运算要比较两个数的大小。(5)将所得的结果在转化成十进制输出。各算法流程图做减法运算做加法运算输入两个数开始做乘法运算做除法运算输出结果 结束图1、主流程结束输出结果做加法运算输入两个数开始图2、加法流
3、程做减法运算输出结果结束小于大于比较被减数于减数的大小输入两个数输入两个数输入两个数输入两个数开始符号位和值分开处理图3、减法流程结束输入结果做乘法运算输入两个数开始 图4、乘法流程符号位和值分开处理小于大于输入两个数比较被除数于除数的大小做除法运算输入结果结束开始 图5、除法流程源代码.model small.stack.data user_string db 11,?,11 dup(0) ;键盘缓冲区,存放键入的十进制ASCII码 digit1 DW 0,0,0,0,$ ;输入的第一个十进制数 digit2 DW 0,0,0,0,$ ;输入的第二个十进制数 result_add DW 0,
4、0,0,0,$ ;两个十进制数的和 result_sub DW 0,0,0,0,$ ;两个十进制数的差 result_mul DW 0,0,0,0,0,0,$ ;两个十进制数的积 result_div1 DW 0,0,0,0,0,0,$ ;两个十进制数的商 result_div2 DW 0,0,0,0,0,0,$ ;两个十进制数的商的余数 result_str DB 24 dup(0),$ ;暂时存放要输出的十进制数的ASCII码 mulfact DW 10 ;乘数因子 flag dw 3 ;标志 temp_DX dw 0,0,0,0 string_L db 0AH,0DH,digit1 di
5、git2,$ string_E db 0AH,0DH,digit1 = digit2,shang 1 yu 0.,$ string_crlf db 0AH,0DH,$ string_digit1 db 0AH,0DH,the first digit is:,$ string_digit2 db 0AH,0DH,the second digit is:,$ string_he db 0AH,0DH, he shi :,$ string_cha db 0AH,0DH, cha shi :,$ string_mul db 0AH,0DH,ji shi :,$ string_div db 0AH,0D
6、H, shang shi(the first is shang,the second is yushu):,$.code ;*main proc far ;主过程start: mov AX,data mov DS,AX ;* mov DX,offset string_digit1 ;输入第一个十进制数 call displaystring mov DX,offset user_string call read_keys call crlf mov DI,offset user_string mov BX,offset digit1 ;将第一个十进制数存入digit1 call asc_dec
7、;* mov DX,offset string_digit2 ;输入第二个十进制数 call displaystring mov DX,offset user_string call read_keys call crlf mov DI,offset user_string mov BX,offset digit2 ;将第二个十进制数存入digit2 call asc_dec ;* mov DX,offset string_he ;将两个数求和,并将结果存入 call displaystring ; result_add call option_add mov BX,offset result
8、_add mov DI,offset result_str+23 call dec_asc ;把result_add数组转为ASCII码输出;* mov DX,offset string_cha ;将两个数相减 call displaystring ; 结果存入result_sub call option_sub mov BX,offset result_sub mov DI,offset result_str+23 call dec_asc ;将result_sub转为ASCII码并输出;* mov DX,offset string_mul ;把两个数的积存入string_mul call
9、displaystring call option_mul mov BX,offset result_mul mov DI,offset result_str+23 call dec_asc ;将string_mul转为ASCII并输出 ;* mov DX,offset string_div ;两个数相除 call displaystring call option_div ;* mov AX,4C00H int 21H ;退出程序 main endp ;*option_add proc near ; 求两个数的和 mov AX,digit1 mov DX,digit1+2 mov CX,di
10、git1+4 ADD AX,digit2 ADC DX,digit2+2 ADC CX,digit2+4 ADC result_add+6,0 mov result_add,AX mov result_add+2,DX mov result_add+4,CX ret option_add endp ;*option_cmp proc near ;比较两个数的大小 mov SI,6 cmpnext: mov AX,digit1SI CMP AX,digit2SI JB B JA A CMP SI,0 JE O DEC SI DEC SI jmp cmpnext B: mov DL,- JMP c
11、mpexit A: mov DL,+ JMP cmpexit O: mov DL,0 cmpexit: ret option_cmp endp ;*option_sub proc near ;差的符号和值分别处理, call option_cmp ;通过option_cmp子过程 mov AH,02H ;判断符号,通过大数减 int 21H ;去小数得到差的绝对值 CMP DL,0 ;符号和绝对值分开输出 JE osexit CMP DL,- JNE f1 mov BX,offset digit2 mov DI,offset digit1 JMP f2 f1: mov BX,offset di
12、git1 mov DI,offset digit2 f2: CLC pushf mov SI,0 mov CX,3 subnext: mov AX,BX+SI popf push BX mov BX,DI SBB AX,BX+SI pop BX pushf mov result_subSI,AX INC SI INC SI loop subnext popf osexit: ret option_sub endp ;*option_mul PROC mov DX,0 mov AX,digit1 ;取被乘数低16位 mul digit2 ;被乘数低16位*乘数低16位 MOV result_mu
13、l,AX ;保存相乘结果 MOV result_mul+2,DX MOV AX,digit1+2 ;去被乘数高16位 mov DX,0 MUL digit2 ;被乘数高16位*乘数低16位 ADD result_mul+2,AX ADC result_mul+4,DX MOV AX,digit1 ;取被乘数低16位 mov DX,0 MUL digit2+2 ;被乘数低16位*乘数高16位 ADD result_mul+2,AX ;中间结果相加 ADC result_mul+4,DX PUSHF ;暂存标志寄存器 MOV AX,digit1+2 mov DX,0 MUL digit2+2 ;被
14、乘数高16位*乘数高16位 ADD result_mul+4,AX ;中间结果相加 ADC result_mul+6,DX POPF ;取标志寄存器 mov DX,0 ADC result_mul+6,DX RET option_mul ENDP ;*option_div proc near ;通过option_cmp 判断被除数是否 call option_cmp ;大于除数,相等,小于,大于分开 CMP DL,0 ;处理 JE E CMP DL,- JE OL call div_1 call crlf mov BX,offset result_div1 mov DI,offset resu
15、lt_str+23 call dec_asc call crlf mov BX,offset digit1 mov DI,offset result_str+23 call dec_asc JMP odexit E: mov DX,offset string_E JMP dis OL: mov DX,offset string_L dis: call displaystring odexit: ret option_div endp ;*div_1 proc near ; 该子过程处理被除数大于 mov AX,0 ; 除数的情况 mov DX,0 ;将两个数相除,并将结果商和 mov CX,0
16、 mov SI,0dodnext: ; 余数分别存入 相应的数组 push DX push AX push SI push CX call option_cmp pop CX pop SI pop AX CMP DL,+ JE d1 CMP DL,0 JE d2 pop DX JMP div1exit d2: pop DX ADD AX,1 ADC DX,0 ADC CX,0 ADC SI,0 JMP div1exitd1: pop DX CLC mov BX,digit1 SBB BX,digit2 mov digit1,BX mov BX,digit1+2 SBB BX,digit2+2
17、mov digit1+2,BX mov BX,digit1+4 SBB BX,digit2+4 mov digit1+4,BX mov BX,digit1+6 SBB BX,digit2+6 mov digit1+6,BX ADD AX,1 ADC DX,0 ADC CX,0 ADC SI,0 JMP dodnextdiv1exit: mov result_div1,AX mov result_div1+2,DX mov result_div1+4,CX mov result_div1+6,SI ret div_1 endp ;*asc_dec proc near ;将ASCII码表示的十转为
18、二进制表示的十进制数 INC DI mov CX,0 mov CL,DI a_decnext: INC DI mov AX,0 mov AL,DI sub AL,030H call mul_10 call add_char loop a_decnext aexit: ret asc_dec endp ;*add_char proc near ;将一个数字加入到内存十进制数中 add BX,AX pushf mov AX,0H popf adc BX+2,AX adc BX+4,AX ret add_char endp ;*(入口:BX)* mul_10 proc near ;将内存中一个十进制
19、数乘10(10个字节大小) push DX ;BX中放有十进制数的偏移地址 push AX push CX mov CX,4 mov SI,0 mnext: mov DX,0H mov AX,BX+SI mul mulfact mov BX+SI,AX mov temp_DXSI,DX INC SI INC SI loop mnext CLC mov DX,0 mov AX,temp_DX ADC BX+2,AX ADC BX+4,DX ADC BX+6,DX ADC BX+8,DX mov AX,temp_DX+2 ADD BX+4,AX ADC BX+6,DX ADC BX+8,DX mo
20、v AX,temp_DX+4 ADD BX+6,AX ADC BX+8,DX mov AX,temp_DX+6 ADD BX+8,AX pop CX pop AX pop DX ret mul_10 endp ;*dec_asc proc near ;将二进制表示的十进制数转化为十进制ASCII码 mov flag,3 ;BX和DI为入口寄存器c00: mov DX,0 mov AX,0 mov AX,2 mul flag L: mov SI,AX c4: mov DX,0 mov AX,BX+SI CMP AX,0 JE c9 mov CX,flag INC CX next: mov AX,BX+SI DI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育数字化转型中的技术工具与平台发展
- 2024年昭通市工会招聘社会工作专业人才笔试真题
- 2025广东交通职业技术学院单招《职业适应性测试》考试黑钻押题(精练)附答案详解
- 2024年中国烟草总公司上海市公司考试真题试卷及答案
- 2024内蒙古丰州职业学院单招《物理》模考模拟试题附答案详解【培优A卷】
- 即兴伴奏培训课件图片
- 江苏省扬州市2026届高三第四次模拟考试生物试题
- ICU气管插管的护理
- 居家养老服务志愿者培训
- 2025白城职业技术学院单招《职业适应性测试》练习题【A卷】附答案详解
- 2025至2030中国智能物流行业发展趋势分析与未来投资战略咨询研究报告
- 病历书写规范与管理制度
- 如皋护士招聘题目及答案
- 国家开放大学《中国法律史》期末机考题库
- 【MOOC】国际商务-暨南大学 中国大学慕课MOOC答案
- 国家开放大学本科《古代小说戏曲专题》形考任务1-4试题及答案
- 2024年北京大学强基计划物理试题(附答案)
- (正式版)JBT 14449-2024 起重机械焊接工艺评定
- 部编人教版六年级下册语文 第六单元素养提升卷 优质试题课件
- 集团公司落实子企业董事会职权工作方案
- 教程5.13g加密所属
评论
0/150
提交评论