汇编语言课程设计-汇编语言实现四则运算.doc

上传人:yyf 文档编号:5024889 上传时间:2020-01-29 格式:DOC 页数:20 大小:128.50KB
返回 下载 相关 举报
汇编语言课程设计-汇编语言实现四则运算.doc_第1页
第1页 / 共20页
汇编语言课程设计-汇编语言实现四则运算.doc_第2页
第2页 / 共20页
汇编语言课程设计-汇编语言实现四则运算.doc_第3页
第3页 / 共20页
汇编语言课程设计-汇编语言实现四则运算.doc_第4页
第4页 / 共20页
汇编语言课程设计-汇编语言实现四则运算.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《汇编语言课程设计-汇编语言实现四则运算.doc》由会员分享,可在线阅读,更多相关《汇编语言课程设计-汇编语言实现四则运算.doc(20页珍藏版)》请在三一文库上搜索。

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 mov 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 ;*

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

当前位置:首页 > 研究报告 > 商业贸易


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