W=((X+Y)*2-Z)/2 ;X,Y,Z,W均为8位二进制数值
代码如下:
DATAS SEGMENT
;此处输入数据段代码
X DB 1
Y DB 4
Z DB 3
W DB 0
TWO DB 2
TEN DB 10
STR1 DB '1.((X+Y)*2-Z)/2=W',10,13,'$'
STR2 DB '2.X,Y,Z,W,ENTER',10,13,'$'
STR3 DB 10,13,'$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
MOV AH,9
MOV DX,OFFSET STR1
INT 21H
MOV AH,9
MOV DX,OFFSET STR2
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
CMP AL,1
JE JL1
JNE JL2
JL1:
MOV AH,9
MOV DX,OFFSET STR3
INT 21H
MOV AH,2
MOV DL,'('
INT 21H
MOV AH,2
MOV DL,'('
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
MOV X,AL
MOV AH,2
MOV DL,'+'
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
MOV Y,AL
MOV AH,2
MOV DL,')'
INT 21H
MOV AH,2
MOV DL,'*'
INT 21H
MOV AH,2
MOV DL,'2'
INT 21H
MOV AH,2
MOV DL,'-'
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
MOV Z,AL
MOV AH,2
MOV DL,')'
INT 21H
MOV AH,2
MOV DL,'/'
INT 21H
MOV AH,2
MOV DL,'2'
INT 21H
MOV AH,2
MOV DL,'='
INT 21H
JMP OUT1
JL2:
MOV AH,9
MOV DX,OFFSET STR3
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
MOV X,AL
MOV AH,9
MOV DX,OFFSET STR3
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
MOV Y,AL
MOV AH,9
MOV DX,OFFSET STR3
INT 21H
MOV AH,1
INT 21H
SUB AL,30H
MOV Z,AL
MOV AH,9
MOV DX,OFFSET STR3
INT 21H
JMP OUT1
OUT1:
MOV AL,X
ADD AL,Y ;x+y
MUL TWO
SUB AL,Z ;x+y-z
DIV TWO
MOV W,AL ;存结果到W单元
;运算结束
CMP W,0
JL JL3
;运算结果大于等于0,输出
MOV AL,W
MOV AH,0
DIV TEN
MOV BX,AX
ADD BX,3030H
MOV AH,2 ;调用DOS中断INT 21H功能的2号子功能
MOV DL,BL
INT 21H ;此3条语句输出数字的ASCII码
MOV AH,2 ;调用DOS中断INT 21H功能的2号子功能
MOV DL,BH
INT 21H
JMP EXIT
;运算结果小于0
JL3:
MOV AH,2
MOV DL,'-'
INT 21H
MOV AL,W
NEG AL
MOV AH,2
ADD AL,30H
MOV DL,AL
INT 21H
JMP EXIT
EXIT:
MOV AH,4CH
INT 21H
CODES ENDS
END START
第一种输出(第三行的‘1’是跳转指令)
第二种输出(第三行的‘2’是跳转指令)