设W、X、Y、Z均为8位带符号数,要求完成计算表达式W=X+Y-Z。
程序员文章站
2024-02-01 18:44:16
...
设W、X、Y、Z均为8位带符号数,要求完成计算表达式W=X+Y-Z。
代码如下:
DATAS SEGMENT
;此处输入数据段代码
X DB 1
Y DB 4
Z DB 3
W DB 0
TEN DB 10
STR1 DB 'X+Y-Z=W',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,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,1
INT 21H
SUB AL,30H
MOV Z,AL
MOV AH,2
MOV DL,'='
INT 21H
MOV AL,X
ADD AL,Y ;x+y
SUB AL,Z ;x+y-z
MOV W,AL ;存结果到W单元
;运算结束
CMP W,0
JL JL1
;运算结果大于等于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
JL1:
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
运算结果大于10输出
运算结果大于0小于10输出
运算结果小于0输出
注意
输出负数时要记得求补