资源描述
;本程序实现加减混合运算输入格式必须为1+2-3;程序思路: 遇到一种操作符执行前一次运算,等号执行最后一次运算,然后保存本次操作符;-提示信息-DISLMACO DI MOV AH,MO D,D D;-IPACRO VARM AH,2MOV L,VARINT 21HEDM;-输入函数-INPUT MACOPUSH XPUSH BXPUSHPU DXMOV X,0 ;BX寄存十进制数CCOVDX,0NEXT0:OV AH,1INT 2HC A,B ;判断输入与否为+ ET2CP L,2DH ;判断输入与否为J NEXT2 CMP AL,DH ;判断=EETSB AL,30 NXT1CMP AL,9JG NET1MV AH,0 ;将输入旳数转换成1进制数XC AX,BXMV C,10MCXAD ,BXC NXT1XCHG AX, P NET0NEXT:MO DX,OV BX, OV DI,FSESTR ;提示出错 DISPLDI V DI,OFFSETTR2 DSPLIJMP NEXNET2: C X, NEXT1CMPCUN, ;第一次输入存到bu0后来输入所有寄存到bu1 JE 0MV BU0,XJMP L1L:MOV BF1,BX JP NET3L1: MOV OPR, ;将操作符保存至oer MOV COUNT,1 MOV BX, JMP EXT0NXT:CP OR,+ ;判读那是何种操作JE N0CP PER,-J 1N0:MOBX,0 ;加法相应操作ADBX,BFMVBUF0,XCMP,=JETM L1: MOVDX,BF0 ;加法操作CPFL,1 ;如果本来buf0里旳数是负数用buf1-buf0旳绝对值JNEN2CHG D,FVFLAG,2:LC SBD,BUF1 J N MOFLG,1 G X ;如果相减为负数则寄存绝对值N: MOVBU0,DX CML,=EXT4 JPL1NEXT4: CMP FLG,1 JN ET5 DIS - ;若果成果为负数输出负号T5: CALL PRN POP DXPOP CXPO POP AX ENDMDTS SEMENTTRB 0A,0DH,$STR0DBplese npu ritetic xpresis:,0AH,0DH,$ST2DBthe num nexpced,inpan:,0AH,H,$BUF DW ?UF1 DW ?FLGDB 0OERDB ?OUNTB0DATAS ESSTACKSSEGMET DW56 DUP(?) ;此处输入堆栈段代码SACKS DSCODES SEGMNT ASUM CS:COE,:DTS,SS:STACKSSTRT: MOV AX,DAAS V DS,X MOV DI,OFST ST0 SPLDI NPUT MOVAH,CH INT 21H ;-显示函数-PRINT PROC NEAR PH X USH BXU XPUSH DX MOV C,0 ;记录有效数字位数 MOV X,10 ;除10取余 O AX,BUF0LS: MOV DX,0 D X PUSH INC CX CMP AX,0 JN LAG: POP D ;出栈输出 R X,0H MO A,2 N21H LOO AGE POP D POP CXP BPOP XRTINT EPCODS ES EN SRDIMACRO VMOVH,V DL,VAINT 21HET EGENDATA0 D PEE IPU NUMB(0-999):,DTA1 DB verfo inpu again:,$A D PLEASE NTAOTHER MBE(XP:2),AA3 DBLESEINUTANATOR:,$DATA4 DBTHPERATO IS ONG,PUT AGAI:,$OPRD?FLAGD 0FLAG1DB0DATA 3 UP(?)DAASENDSSTAKSSEGET DW 5 DUP(?)STACKS ESCDE SEGMET ASSUM CS:COE,DS:AT,S:STACKSSART: M AX,TAS MO DS, MOVI,OFFSETDTA0 ;提示信息 CAL DSL MVSI, ;S作为数组下标 CALL PT CLL WINEO DI,OSETDATA3 ;提示信息CAL ISPLAGAN: OVAH,1 ;1号功能输入四则运算符 IN 1CPAL,+ ;判断输入旳是不是+,-,*,/JE NET0MAL,-JE NEXT0CMPAL,JE NEXTMPAL,/JE NEXCALL NEWLIE ;输入旳运算符不合法,重新输入MOVDI,OFFSEDTA4 CLSPLJMPGINNEXT0: MOVPER,L ;保存运算符 CL NEWLI OV D,FFSAT ;输入第二个操作数 ALL DSPL MVSI,2 CL NUT MOV,DTA MVBX,TACMOPER,+ ;判断是那种操作,进行运算JE NXT1CMPPE,JE NET2CMPOPER,JE NEXTCMPE,/JE NEX4 NEXT1: ;加法运算LCADCAX,XJNCN1MOVA, ;判断与否进位: MOVDT4,AX ;运算成果放入内存JP OUTPUT NEXT2: ;减法运算SBBX,BJNC N2VFLG,1 ;判断与否借位NEGA2: OVATA4,X ;运算成果放入内存 JMP PUTNEXT: ;乘法运算CLCMOVDX,0MULX MVDAA4,AX ;运算成果放入内存 JPOUPUTNEXT4: ;除法运算CCMDX,CPB,JZN4 ;判断除数与否为0CALLNWINECALEROR CALWLIE M,OFSETDTA CALLDISP MOVSI,2 CALL IUT JMPNEX4N4:DI MODA,X ;运算成果放入内存UTPUT: ALL NEWLINE MO D,0 ;输出第一种操作数 CALL PIN DIS OPER ;输出运算符 MODI, CLL PRINT ;输出第二个操作数DISP=CMLAG,1JZXT5DSP -NET5:MDI,CALPRINT ;输出成果 MOV A,4CH INT 1H ;-输入函数- INUT R ERPSH APUSH BXPUS CXSH DXMOV BX,0 ;BX寄存十进制数CLCMOV X,0L0: ;-输入数字-MV AH,1 ;判断数字与否合法IT 21HP ,DHJE SUB A,30HJ 1CMP AL,9JG L;-转换成十进制数-MOV AH,0 ;转换成10进制数放入内存XCH ,BXOV CX,1ML DD A,BXC L1XCHG AX,X JM L0L1:MOV D,MOV BX,0 CALL NLINECALL EORJMP L0L2: C X,JNZ L1MO DATASI,BV ,0PO DXPOP CPO BXPP XEINP ENDP;-提示信息-DISPLPROC NER MOVA,9MOVD,IIT 21ETDISPENDP;-回车换行-EIEPROC NEARPUS AXPUS DXMOV DL,AHMOV AH,2NT 1HOVDL,0HOV A,2NT 21HPO DXPOP ETNEWIE END;-错误提示-ERROR PROC NEAR SHX USHDX OV DX,OFFSET DAT1 MV ,9 IT 2H OP DX PP AX RET EROND ;-显示函数-PINTPR NEAR H AX PUSH BXPU CPUSH X MOV CX, MOV BX, MV AX,ATADILAST: MOVX,0 ;除0压栈 D B PUSH X NC C P AX, JNZ LASTAGE: OP DX ;出栈输出 OR D,30 OV AH,2 N H LOOP AGE POP DX POP CXPP BPO AXPN ENDCOS ENS END TA
展开阅读全文