從網上找的,我已經修改正確,生成的exe只能在dos下執行。
但不能重複輸入
;給出一個百分制成績,要求輸出成績等級A、B、C、D、E。90 分以上為A,80-89
;分為B,70-79 分為C,60-69分為D,60 分一下為E。
;要求:提示輸入一分數score;
;鍵盤輸入,並換行顯示結果,
data segment
S1 DB 0DH,0AH,"Enter score: $"
S2 DB 0DH,0AH,"The grade is: $"
D1 DB 0 ;輸入的成績
data ends
code segment
assume cs:code,ds:data
start:
main proc far
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,9 ;提示輸入成績
MOV DX,OFFSET S1
INT 21H
RE_I: MOV AH,07H ;輸入數字(用不回顯方式)
CMP AL,0DH
JNE N1
mov ah,9
mov dx,offset S2
int 21h
MOV AL,D1
CMP AL,90
JB X1
MOV DL,"A"
JMP DISP
X1: CMP AL,80
JB X2
MOV DL,"B"
X2: CMP AL,70
JB X3
MOV DL,"C"
X3: CMP AL,60
JB X4
MOV DL,"D"
X4: MOV DL,"E"
DISP: MOV AH,2
JMP EXIT
N1: CMP AL,"0" ;過濾掉數字外的字元
JB RE_I
CMP AL,"9"
JA RE_I
MOV DL,AL
MOV AH,2 ;顯示輸入的數字
MOV AH,0
MOV BL,10
MUL BL
POP BX
SUB BL,30H
ADD AL,BL
MOV D1,al
Jmp RE_I
EXIT: RET
main endp
code ends
end start
從網上找的,我已經修改正確,生成的exe只能在dos下執行。
但不能重複輸入
;給出一個百分制成績,要求輸出成績等級A、B、C、D、E。90 分以上為A,80-89
;分為B,70-79 分為C,60-69分為D,60 分一下為E。
;要求:提示輸入一分數score;
;鍵盤輸入,並換行顯示結果,
data segment
S1 DB 0DH,0AH,"Enter score: $"
S2 DB 0DH,0AH,"The grade is: $"
D1 DB 0 ;輸入的成績
data ends
code segment
assume cs:code,ds:data
start:
main proc far
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,9 ;提示輸入成績
MOV DX,OFFSET S1
INT 21H
RE_I: MOV AH,07H ;輸入數字(用不回顯方式)
INT 21H
CMP AL,0DH
JNE N1
mov ah,9
mov dx,offset S2
int 21h
MOV AL,D1
CMP AL,90
JB X1
MOV DL,"A"
JMP DISP
X1: CMP AL,80
JB X2
MOV DL,"B"
JMP DISP
X2: CMP AL,70
JB X3
MOV DL,"C"
JMP DISP
X3: CMP AL,60
JB X4
MOV DL,"D"
JMP DISP
X4: MOV DL,"E"
DISP: MOV AH,2
INT 21H
JMP EXIT
N1: CMP AL,"0" ;過濾掉數字外的字元
JB RE_I
CMP AL,"9"
JA RE_I
MOV DL,AL
PUSH AX
MOV AH,2 ;顯示輸入的數字
INT 21H
MOV AL,D1
MOV AH,0
MOV BL,10
MUL BL
POP BX
SUB BL,30H
ADD AL,BL
MOV D1,al
Jmp RE_I
EXIT: RET
main endp
code ends
end start