实验内容:
在内存Score缓冲区中存放有100个学生的成绩数据,为无符号字节数。假设学生成绩在[90,100]区间为优秀,在[80,90)区间为良好,在[70,80)区间为一般,在[60,70)区间为及格,在[0,60)区间为不及格,要求统计出不及格,及格,一般,良好和优秀的人数,分别送入Notpassed,Passed,Good,Better和Best字节单元。
1. 用普通的跳转语句实现上述功能。
2. 用地址表法和转移表实现。
*******************************************
DATASEG SEGMENT
NOTPASSED DB 0
PASSED DB 0
GOOD DB 0
BETTER DB 0
BEST DB 0
SCORE DB 90,80,75,30,64,95 DUP(70)
DATASEG ENDS
CODESEG SEGMENT
ASSUME DS:DATASEG,CS:CODESEG
START:
MOV AX,DATASEG
MOV DS,AX
MOV BX,0
MOV CX,100
AGAIN: CMP SCORE[BX],90
JB NEXT
INC BEST ;if >= 90 , Best!
JMP DONE
NEXT: CMP SCORE[BX],80 ;If got here, must <90!
JB NEXT1
INC BETTER ;if >=80 , Better
JMP DONE
NEXT1: CMP SCORE[BX],70 ;and so on......
JB NEXT2
INC GOOD
JMP DONE
NEXT2: CMP SCORE[BX],60
JB NEXT3
INC PASSED ;Passed
JMP DONE
NEXT3: INC NOTPASSED ;Not passed
DONE: INC BX
LOOP AGAIN
MOV AH,4CH ;Oh,mum,it has done,we need go home.
INT 21H
CODESEG ENDS
END START
*********************************************************
DSEG SEGMENT
NOTPASSED DB 0
PASSED DB 0
GOOD DB 0
BETTER DB 0
BEST DB 0
SCORE DB 100,90,88,98,85,82,78,45,92 DUP(90)
AddrTbl DW Func0,Func1,Func2,Func3,Func4,Func5
DSEG ENDS
CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG
START:
MOV AX,DSEG
MOV DS,AX
MOV SI,0
MOV CX,100
AGAIN:
MOV DL,10
MOV AL,SCORE[SI]
CMP AL,60
JB func0
SUB AL,50
MOV AH,0
DIV DL
MOV BL,AL
MOV BH,0
shl bx,1
JMP AddrTbl[BX]
Func0:
INC NOTPASSED
JMP DONE
Func1:
INC PASSED
JMP DONE
Func2:
INC GOOD
JMP DONE
Func3:
INC BETTER
JMP DONE
Func4:
INC BEST
JMP DONE
Func5:
INC BEST
JMP DONE
DONE:
INC SI
LOOP AGAIN
MOV AH,4CH
INT 21H
CSEG ENDS
END START
NOTPASSED DB 0
PASSED DB 0
GOOD DB 0
BETTER DB 0
BEST DB 0
SCORE DB 100,70,88,45,96 DUP(90)
DATASEG ENDS
CODESEG SEGMENT
ASSUME DS:DATASEG,CS:CODESEG
START:
MOV AX,DATASEG
MOV DS,AX
MOV CX,100
MOV SI,0
AGAIN:
MOV DL,10
MOV AL,SCORE[SI]
CMP AL,60
JB Func0
SUB AL,50
MOV AH,0
DIV DL
MOV AH,0
MOV BX,AX
SHL AX,1
ADD BX,AX
ADD BX,OFFSET JmpTbl
JMP BX
JmpTbl:
jmp NEAR PTR func0
jmp NEAR PTR func1
jmp NEAR PTR func2
jmp NEAR PTR func3
jmp NEAR PTR func4
jmp NEAR PTR func5
func0:
INC NOTPASSED
JMP DONE
func1:
INC PASSED
JMP DONE
func2:
INC GOOD
JMP DONE
func3:
INC BETTER
JMP DONE
func4:
INC BEST
JMP DONE
func5:
INC BEST
JMP DONE
DONE:
INC SI
LOOP AGAIN
MOV AH,4CH
INT 21H
CODESEG ENDS
END START
评论