汇编语言实现四则混合运算_第1页
汇编语言实现四则混合运算_第2页
汇编语言实现四则混合运算_第3页
汇编语言实现四则混合运算_第4页
汇编语言实现四则混合运算_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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:D

11、IVBX 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 ;-输入函数- INPUT PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV BX,0 ;BX存放十进制数CLCMOV DX,0L0: ;-输入数字-MOV AH,1 ;

12、判断数字是否合法INT 21HCMP AL,0DHJE L2SUB AL,30HJL L1CMP AL,9JG L1;-转换成十进制数-MOV AH,0 ;转换成10进制数放入内存XCHG AX,BXMOV CX,10MUL CXADD AX,BXJC L1XCHG AX,BX JMP L0L1:MOV DX,0MOV BX,0 CALL NEWLINECALL ERRORJMP L0L2: CMP DX,0JNZ L1MOV DATASI,BXMOV DX,0POP DXPOP CXPOP BXPOP AXRETINPUT ENDP;-提示信息-DISPLPROC NEAR MOV AH,9

13、MOV DX,DIINT 21HRETDISPLENDP;-回车换行-NEWLINE PROC NEARPUSH AXPUSH DXMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HPOP DXPOP AXRETNEWLINE ENDP;-错误提示- ERROR PROC NEAR PUSH AX PUSH DX MOV DX,OFFSET DATA1 MOV AH,9 INT 21H POP DX POP AX RET ERROR ENDP ;-显示函数-PRINT PROC NEAR PUSH AX PUSH BXPUSH CXPUSH DX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论