📄 root.asm
字号:
DATA SEGMENT
MSG DB 'INPUT THE VALUE OF a AND c:$'
ROOT0 DB 'NO ROOT',0AH,0DH,'$'
ROOT1 DB '1 ROOT',0AH,0DH,'$'
ROOT2 DB '2 ROOTS',0AH,0DH,'$'
AL0 DB 0AH,0DH,'A<0',0AH,0DH,'$'
CL0 DB 0AH,0DH,'C<0',0AH,0DH,'$'
NEWLINE DB 0AH,0DH,'$'
DDA DB 0
CCC DB 0
TEMPIN DB ?
DALTA DB ?
DATA ENDS
STACK SEGMENT PARA STACK'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,STACK
MOV SS,AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MSG
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
XOR BX,BX
MOV CH,2
OTHER: XOR CL,CL;CL代表符号位,0---为正,1---为负
XOR DX,DX
INNUM: MOV AH,1
INT 21H
CMP AL,'#'
JE EXITIN
CMP AL,'-'
JE NEGETIVE;否则为数字,中间结果保存在DL中
AND AL,0FH
MOV BL,AL;保护刚输入的一位
MOV AL,DL;
MOV BH,10
MUL BH;左移一位,乘10
MOV DL,AL
ADD DL,BL
JMP INNUM
NEGETIVE: MOV CL,1
JMP INNUM
EXITIN: PUSH DX
MOV DX,OFFSET NEWLINE
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
POP DX
CMP CL,0
JE INAC
NEG DL
INAC: CMP CH,2
JL ENDSIN
DEC CH
MOV DDA,DL
JMP OTHER
ENDSIN: MOV CCC,DL
CMP DDA,0
JGE CCMP0
MOV DX,OFFSET AL0
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
CCMP0: CMP CCC,0
JGE MAINROOT
MOV DX,OFFSET CL0
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
MAINROOT:
MOV AL,CCC
MOV BL,4
MUL BL ;4*C
MUL DDA ; 4*A*C
MOV DL,36 ;
SUB DL,AL
MOV DALTA,DL
MOV DX,OFFSET NEWLINE
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
CMP DALTA,0
JG RROOT2
JL RROOT0
MOV DX,OFFSET ROOT1
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
JMP EXIT
RROOT2: MOV DX,OFFSET ROOT2
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
JMP EXIT
RROOT0: MOV DX,OFFSET ROOT0
MOV AH,9 ;TO OUPUT A STRING BEGIN WITH DX
INT 21H
JMP EXIT
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -