




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 从生产到消费探讨如何利用区块链优化商品供应链流程
- 医疗器械设计的发展趋势与材料应用
- 医疗设备安全与质量控制
- 医疗大数据的采集、存储与隐私保护技术探讨
- 医药企业药品说明书合规经营策略
- 医疗信息化趋势下的电子健康记录标准化探索
- 医院信息化建设中的多部门协同策略
- 公交卡制作合同范例
- 供销合同范例格式
- 医疗大数据下的患者隐私保护策略研究
- (三模)温州市2025届高三第三次适应性考试语文试卷
- 《危险化学品企业安全生产标准化规范》专业深度解读与应用培训指导材料之5:5管理要求-5.5 安全风险管理和双重预防机制建设(雷泽佳编制-2025A0)
- 2025年二级注册建筑师《建筑经济、施工与设计业务管理》考试真题卷(附解析)
- 铁塔施工安装技术方案
- 2025陕西烟草专卖局招聘42人易考易错模拟试题(共500题)试卷后附参考答案
- 矿山水灾事故处理
- 2024年烟台栖霞市考选毕业生考试真题
- 2025北京九年级(上)期末语文汇编:现代文阅读2
- 光谱分析在大气污染物成分识别中的应用研究
- 2025年高中生物学业水平考试知识点归纳总结(复习必背)
- 2025-2030中国晶圆转移机器人末端执行器行业市场发展趋势与前景展望战略研究报告
评论
0/150
提交评论