- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言实现四则混合运算
;本程序实现加减混合运算输入格式必须为 1+2-3=
;程序思路: 遇到一个操作符执行前一次运算,等号执行最后一次运算,然后保存本次操作符
;---------提示信息------
DISPL MACRO DI
MOV AH,9
MOV DX,DI
INT 21H
ENDM
;-----------
DISP MACRO VAR
MOV AH,2
MOV DL,VAR
INT 21H
ENDM
;--------输入函数-------
INPUT MACRO
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,0 ;BX存放十进制数
CLC
MOV DX,0
NEXT0:
MOV AH,1
INT 21H
CMP AL,2BH ;判断输入是否为+
JE NEXT2
CMP AL,2DH ;判断输入是否为-
JE NEXT2
CMP AL,3DH ;判断‘=’
JE NEXT2
SUB AL,30H
JL NEXT1
CMP AL,9
JG NEXT1
MOV AH,0 ;将输入的数转换成10进制数
XCHG AX,BX
MOV CX,10
MUL CX
ADD AX,BX
JC NEXT1
XCHG AX,BX
JMP NEXT0
NEXT1:
MOV DX,0
MOV BX,0
MOV DI,OFFSET STR ;提示出错
DISPL DI
MOV DI,OFFSET STR2
DISPL DI
JMP NEXT0
NEXT2:
CMP DX,0
JNZ NEXT1
CMP COUNT,1 ;第一次输入存到buf0以后输入全部存放到buf1
JE L0
MOV BUF0,BX
JMP L1
L0: MOV BUF1,BX
JMP NEXT3
L1: MOV OPER,AL ;将操作符保存至oper
MOV COUNT,1
MOV BX,0
JMP NEXT0
NEXT3:
CMP OPER,+ ;判读那是何种操作
JE N0
CMP OPER,-
JE N1
N0:
MOV BX,BUF0 ;加法相应操作
ADD BX,BUF1
MOV BUF0,BX
CMP AL,=
JE NEXT4
JMP L1
N1:
MOV DX,BUF0 ;加法操作
CMP FLAG,1 ;如果原来buf0里的数是负数用buf1-buf0的绝对值
JNE N2
XCHG DX,BUF1
MOV FLAG,0
N2: CLC
SBB DX,BUF1
JNC N3
MOV FLAG,1
NEG DX ;如果相减为负数则存放绝对值
N3:
MOV BUF0,DX
CMP AL,=
JE NEXT4
JMP L1
NEXT4:
CMP FLAG,1
JNE NEXT5
DISP - ;若果结果为负数输出负号
NEXT5:
CALL PRINT
POP DX
POP CX
POP BX
POP AX
ENDM
DATAS SEGMENT
STR DB 0AH,0DH,$
STR0 DB please input arithmetic expressions:,0AH,0DH,$
STR2 DB the num is unexpected,input again:,0AH,0DH,$
BUF0 DW ?
BUF1 DW ?
FLAG DB 0
OPER DB ?
COUNT DB 0
DATAS ENDS
STACKS SEGMENT
DW 256 DUP(?) ;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV DI,OFFSET STR0
DISPL DI
INPUT
MOV AH,4CH
文档评论(0)