关键词不能为空

当前您在: 主页 > 英语 >

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

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-29 23:59
tags:

-

2021年1月29日发(作者:村民自治组织法)


;


本程序实现加减混合运算输入格式必须为



1+2-3=


;


程序思路:



遇到一个操作符执行前一次运算,等号执行最后一次运算,然后保


存本次操作符




;---------

< br>提示信息


------


DISPL


MACRO DI




MOV


AH,9




MOV


DX,DI




INT 21H




ENDM


;-----------




DISP


MACRO V


AR




MOV


AH,2




MOV


DL,V


AR




INT 21H




ENDM




;--------


输入函数


-------


INPUT MACRO




PUSH


AX



PUSH


BX



PUSH


CX



PUSH


DX



MOV


BX,0









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







XCHG


AX,BX



MOV




CX,10



MUL




CX



ADD




AX,BX






;BX


存放十进制数




;


判断输入是否为


'+'



;


判断输入是否为


'-'





;


判断


‘=’



;


将输入的数转换成


10


进制数














JC




NEXT1



XCHG


AX,BX






JMP



NEXT0


NEXT1:



MOV




DX,0



MOV




BX,0






MOV




DI,


OFFSET


STR






;


提示出错







DISPL


DI






MOV




DI,


OFFSET







DISPL


DI



JMP



NEXT0


NEXT2:







CMP




DX,0



JNZ



NEXT1



CMP




COUNT,1








JE



L0



MOV




BUF0,BX



JMP



L1


L0:


MOV




BUF1,BX






JMP



NEXT3



L1:


MOV




OPER,AL








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






对值




JNE


N


2



XCHG


DX,BUF1



MOV



FLAG


,0


N2: CLC


STR2






;


第一次 输入存到


buf0


以后输入全部存放到


buf1






;


将操作符保存至


oper




;


判读那是何种操作








;


加法相应操作







;


加法操作








;


如果原来


buf0


里的数是负数用


buf1-buf0


的绝



















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


D


B


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






INT 21H












;-- ---------


显示函数


--------


PRINT PROC NEAR






PUSH


AX






PUSH


BX



PUSH


CX



PUSH


DX






MOV




CX,0






















;


记录有效数字位数







MOV




BX,10






















;



10


取余







MOV




AX,BUF0


LAST:






MOV




DX,0





















DIV




BX






PUSH


DX






INC




CX






CMP




AX,0






JNZ



LAST


AGE:







POP




DX























;


出栈输出







OR





DX,30H






MOV




AH,2






INT



21H






LOOP AGE






POP




DX






POP




CX



POP




BX



POP




AX



RET



PRINT ENDP


CODES


ENDS







END



START


DISP


MACRO V


AR




MOV


AH,2




MOV


DL,V


AR




INT 21H




ENDM




DATAS


SEGMENT


DATA0


DB



'PLEASE INPUT A 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:'


,


'$$'


OPER


DB



?


FLAG


DB


0


FLAG1


DB


0


DATA



DW


3


DUP


(


?


)


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


DATA0



;


提示信息







CALL DISPL






MOV



SI,0
















;SI


作为数组下标







CALL INPUT






CALL NEWLINE



MOV




DI,


OFFSET



DATA3



;


提示信息




CALL DISPL


AGAIN:






MOV



AH,1
















;1


号功能输入四则运算符







INT 21H



CMP



AL,


'+'















;


判断输入的是不是


+


-



*



/



JE



NEXT0



CMP



AL,


'-'



JE



NEXT0



CMP



AL,


'*'



JE



NEXT0



CMP



AL,


'/'



JE



NEXT0



CALL NEWLINE











;


输入的运算符不合法,重新输入






MOV



DI,


OFFSET



DATA4




CALL DISPL



JMP


AGAIN


NEXT0:






MOV



OPER,AL











;


保存运算符







CALL NEWLINE






MOV


DI,


OFFSET



DATA2




;


输入第二个操作数


-


-


-


-


-


-


-


-



本文更新与2021-01-29 23:59,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/587999.html

汇编语言实现四则混合运算的相关文章