汇编语言实现四则混合运算

上传人:l**** 文档编号:134989864 上传时间:2020-06-10 格式:DOC 页数:10 大小:45KB
返回 下载 相关 举报
汇编语言实现四则混合运算_第1页
第1页 / 共10页
汇编语言实现四则混合运算_第2页
第2页 / 共10页
汇编语言实现四则混合运算_第3页
第3页 / 共10页
汇编语言实现四则混合运算_第4页
第4页 / 共10页
汇编语言实现四则混合运算_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《汇编语言实现四则混合运算》由会员分享,可在线阅读,更多相关《汇编语言实现四则混合运算(10页珍藏版)》请在金锄头文库上搜索。

1、;本程序实现加减混合运算输入格式必须为 1+2-3=;程序思路: 遇到一个操作符执行前一次运算,等号执行最后一次运算,然后保存本次操作符;-提示信息-DISPLMACRO DI MOV AH,9MOV DX,DIINT 21HENDM;-DISPMACRO VARMOV AH,2MOV DL,VARINT 21HENDM;-输入函数-INPUT MACRO PUSH AXPUSH BXPUSH CXPUSH DXMOV BX,0 ;BX存放十进制数CLCMOV DX,0NEXT0:MOV AH,1INT 21HCMP AL,2BH ;判断输入是否为+JE NEXT2CMP AL,2DH ;判断

2、输入是否为-JE NEXT2 CMP AL,3DH ;判断=JE NEXT2SUB AL,30HJL NEXT1CMP AL,9JG NEXT1MOV AH,0 ;将输入的数转换成10进制数XCHG AX,BXMOV CX,10MUL CXADD AX,BXJC NEXT1XCHG AX,BX JMP NEXT0NEXT1:MOV DX,0MOV BX,0 MOV DI,OFFSET STR ;提示出错 DISPLDI MOV DI,OFFSETSTR2 DISPLDIJMP NEXT0NEXT2: CMP DX,0JNZ NEXT1CMP COUNT,1 ;第一次输入存到buf0以后输入全部

3、存放到buf1 JE L0MOV BUF0,BXJMP L1L0: MOV BUF1,BX JMP NEXT3L1: MOV OPER,AL ;将操作符保存至oper MOV COUNT,1 MOV BX,0 JMP NEXT0NEXT3:CMP OPER,+ ;判读那是何种操作JE N0CMP OPER,-JE N1N0:MOVBX,BUF0 ;加法相应操作ADDBX,BUF1MOVBUF0,BXCMPAL,=JENEXT4JMP L1N1: MOV DX,BUF0 ;加法操作CMPFLAG,1 ;如果原来buf0里的数是负数用buf1-buf0的绝对值JNEN2XCHG DX,BUF1MO

4、VFLAG,0N2:CLC SBBDX,BUF1 JNC N3 MOVFLAG,1 NEG DX ;如果相减为负数则存放绝对值N3: MOVBUF0,DX CMPAL,=JENEXT4 JMPL1NEXT4: CMP FLAG,1 JNE NEXT5 DISP - ;若果结果为负数输出负号NEXT5: CALL PRINT POP DXPOP CXPOP BXPOP AX ENDMDATAS SEGMENTSTRDB 0AH,0DH,$STR0DBplease input arithmetic expressions:,0AH,0DH,$STR2DBthe num is unexpected,

5、input again:,0AH,0DH,$BUF0 DW ?BUF1 DW ?FLAGDB 0OPERDB ?COUNTDB 0DATAS ENDSSTACKS SEGMENT DW256 DUP(?) ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV DI,OFFSET STR0 DISPL DI INPUT MOV AH,4CH INT 21H ;-显示函数-PRINT PROC NEAR PUSH AX PUSH BXPUSH CX

6、PUSH DX MOV CX,0 ;记录有效数字位数 MOV BX,10 ;除10取余 MOV AX,BUF0LAST: MOV DX,0 DIV BX PUSH DX INC CX CMP AX,0 JNZ LASTAGE: POP DX ;出栈输出 OR DX,30H MOV AH,2 INT 21H LOOP AGE POP DX POP CXPOP BXPOP AXRETPRINT ENDPCODES ENDS END STARTDISPMACRO VARMOV AH,2MOV DL,VARINT 21HENDMDATAS SEGMENTDATA0 DB PLEASE INPUT A

7、NUMBER(0-999):,$DATA1 DB over flow input again:,$DATA2 DB PLEASE INPUT ANOTHER NUMBER(EXP:123),$DATA3 DB PLEASE INPUT AN OPREATOR:,$DATA4 DB THE OPERATOR IS WRONG,INPUT AGAIN:,$OPERDB?FLAGDB 0FLAG1DB 0DATA DW 3 DUP(?)DATAS ENDSSTACKS SEGMENT DW 256 DUP(?)STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:D

8、ATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOVDI,OFFSETDATA0 ;提示信息 CALL DISPL MOVSI,0 ;SI作为数组下标 CALL INPUT CALL NEWLINEMOV DI,OFFSETDATA3 ;提示信息CALL DISPLAGAIN: MOVAH,1 ;1号功能输入四则运算符 INT 21HCMPAL,+ ;判断输入的是不是+,-,*,/JE NEXT0CMPAL,-JE NEXT0CMPAL,*JE NEXT0CMPAL,/JE NEXT0CALL NEWLINE ;输入的运算符不合法,重新输入 MOVDI

9、,OFFSETDATA4 CALL DISPLJMPAGAINNEXT0: MOVOPER,AL ;保存运算符 CALL NEWLINE MOV DI,OFFSETDATA2 ;输入第二个操作数 CALL DISPL MOVSI,2 CALL INPUT MOVAX,DATA0 MOVBX,DATA2CMPOPER,+ ;判断是那种操作,进行运算JE NEXT1CMPOPER,-JE NEXT2CMPOPER,*JE NEXT3CMPOPER,/JE NEXT4 NEXT1: ;加法运算CLCADCAX,BXJNC N1MOVFLAG,1 ;判断是否进位N1: MOVDATA4,AX ;运算结

10、果放入存JMP OUTPUT NEXT2: ;减法运算CLCSBBAX,BXJNC N2MOVFLAG,1 ;判断是否借位NEGAXN2: MOVDATA4,AX ;运算结果放入存 JMP OUTPUTNEXT3: ;乘法运算CLCMOVDX,0MULBX MOVDATA4,AX ;运算结果放入存 JMP OUTPUTNEXT4: ;除法运算CLCMOVDX,0CMPBX,0JNZN4 ;判断除数是否为0CALLNEWLINECALLERROR CALLNEWLINE MOVDI,OFFSETDATA2 CALL DISPL MOVSI,2 CALL INPUT JMPNEXT4N4:DIVBX MOVDATA4,AX ;运算结果放入存OUTPUT: CALL NEWLINE MOV DI,0 ;输出第一个操作数 CALL PRINT DISP OPER ;输出运算符 MOV DI,2 CALL PRINT ;输出第二个操作数DISP=CMPFLAG,1JNZNEXT5DISP -NEXT5:MOVDI,4CALLPRINT ;输出结果 MOV AH,4CH INT 21H

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

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号