读汇编程序说出编程思路和算法

来源:百度知道 编辑:UC知道 时间:2024/05/08 15:20:04
问题是一个汇编的统计分数程序,要求说出编程思路和算法说明
data SEGMENT
grade DW 76,69,84,90,73,88,99,63,100,80
score5 DB 0
score6 DB 0
score7 DB 0
score8 DB 0
score9 DB 0
score10 DB 0
data ENDS
code SEGMENT
main PROC FAR
ASSUME CS:code,DS:data
start:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,data
MOV DS,AX
MOV CX,9
CALL count
CALL disp
MOV AH,1
INT 21h
RET
main ENDP
count PROC NEAR
MOV SI,0
next:MOV AX,grade[SI]
MOV BL,10
DIV BL
MOV BL,AL
MOV BH,0
SUB BX,5
CMP BX,0
JAE next1
MOV BX,0
next1:
INC score5[BX]
ADD SI,2
LOOP next
RET
count ENDP
disp PROC NEAR
LEA SI,score5
MOV CX,6
loop1:
MOV DL,[SI]
ADD DL,30h
MOV AH,2
INT 21h
INC SI
LOOP loop1
RET
disp ENDP
code ENDS
END start
特别是COUNT子程序的算法解释

data SEGMENT ;定义数据段
grade DW 76,69,84,90,73,88,99,63,100,80
score5 DB 0 ;小于50分的
score6 DB 0 ;小于60分的
score7 DB 0 ;小于70分的
score8 DB 0 ;小于80分的
score9 DB 0 ;小于90分的
score10 DB 0 ;小于100分的
data ENDS
code SEGMENT ;定义代码段
main PROC FAR ;主程序
ASSUME CS:code,DS:data
start:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,data
MOV DS,AX
MOV CX,9
CALL count
CALL disp
MOV AH,1 ;输出一个字符结束
INT 21h
RET
main ENDP

count PROC NEAR ;子程序
MOV SI,0
next:MOV AX,grade[SI] ;
MOV BL,10
DIV BL
MOV BL,AL
MOV BH,0
SUB BX,5
CMP BX,0
JAE next1 ;大于等于50分的跳到NEXT1
MOV BX,0 ;小于50分的BX赋值为0
next1:
INC score5[BX] ;以BX的值为分数段从5