CODE ENDS END START
3.25 定义一数组GRADE存放有100个学生某门功课的考试成绩,要求编一程序,统计各分数段的人数,即要求统计90~100分,80~89分,70~79分,60~69分以及60分以下的各有多少人。
DATA SEGMENT
GRADE DB 12,65,77,88,98,23,94,75,85,62 LEN EQU $-GRADE A DB 0 B DB 0 C DB 0 D DB 0 E DB 0 DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,LEN ALOOP1: MOV SI,CX DEC SI
CMP GRADE[SI],60
JB GRE ;<60, E+1->E CMP GRADE[SI],70
JB GRD ;<70, D+1->D CMP GRADE[SI],80
JB GRC ;<80, C+1->C CMP GRADE[SI],90
JB GRB ;<90, B+1->B INC A ;>=90, A+1->A JMP GOON GRB: INC B
JMP GOON GRC: INC C
JMP GOON GRD: INC D
JMP GOON GRE: INC E
JMP GOON GOON: LOOP ALOOP1 MOV AH, 4CH INT 21H CODE ENDS END START
3.26 编一程序,在以BUF为首址的字节单元中存放了COUNT个无符号数,找出其中最大数送MAX单元。
DATA SEGMENT
BUF DB 11,23,43,45,67,82,38,48,98,34,67 COUNT EQU $-BUF MAX DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,COUNT MOV AL,0 ;AL用力存放最大数,初值为0
ALOOP: MOV SI,CX DEC SI
CMP AL,BUF[SI] ;从后面取数据,与AL比较 JAE GOON
MOV AL,BUF[SI]
GOON: LOOP ALOOP MOV MAX,AL MOV AH, 4CH INT 21H CODE ENDS END START
3.27 利用系统功能调用从键盘输入10个一位无符号数,求出其中最大和最小数,在显示器上输出显示。
DATA SEGMENT
IN_STR DB 'Please Input 10 Num of 0~9:$' MAX_STR DB 0DH,0AH,'MAX Num is:$' MIN_STR DB 0DH,0AH,'MIN Num is:$' MAX DB ? MIN DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,IN_STR MOV AH,09H
INT 21H ;提示输入10个数字 IND: MOV AH,01H
INT 21H ;输入一个字符 CMP AL,30H
JB IND ;<30H,ERROR CMP AL,39H
JA IND ;>39H,ERROR SUB AL,30H
MOV MIN,AL ;第一个数初始化MIN MOV MAX,AL ;第一个数初始化MAX MOV CX,3 ALOOP: MOV AH,01H
INT 21H ;输入一个字符 CMP AL,30H
JB ALOOP ;<30H,ERROR CMP AL,39H
JA ALOOP ;>39H,ERROR SUB AL,30H ;ASCII->数 CMP AL,MIN
JB GOMIN ;小于最小数,AL->MIN,输入下一个数 CMP AL,MAX
JA GOMAX ;大于最大数,AL->MAX,输入下一个数 JMP GOON GOMIN: MOV MIN,AL JMP GOON
GOMAX: MOV MAX,AL
GOON: LOOP ALOOP LEA DX,MAX_STR MOV AH,09H
INT 21H ;提示输出最大数 MOV DL,MAX ADD DL,30H MOV AH,02H
INT 21H ;输出最大数 LEA DX,MIN_STR MOV AH,09H
INT 21H ;提示输出最小数 MOV DL,MIN ADD DL,30H MOV AH,02H
INT 21H ;输出最小数 MOV AH, 4CH INT 21H CODE ENDS END START
3.28 利用系统功能调用,完成将键盘输入的小写字母转换成大写字母输出显示,直到输入$字符时,停止输出。
CODE SEGMENT ASSUME CS:CODE START: MOV AH,01H
INT 21H ;输入一个字符 CMP AL,'$'
JE STOP ;'$'符,退出 CMP AL,'a' JB START CMP AL,'z' JA START ;非小写字母,继续输入 SUB AL,20H MOV DL,AL MOV AH,02H INT 21H ;小写字母转换成大写字母输出 JMP START STOP: MOV AH, 4CH INT 21H CODE ENDS END START
3.29 设有一字符串已存放在STRBUF为首址的数据区中,编一程序找出其中的$字符,并将其存放地址送ADRBUF单元中。
DATA SEGMENT
STRBUF DB 'a;sldkfjasldkf$asdf' LEN EQU $-STRBUF ADRBUF DB ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV CX,LEN ;最多查询次数 MOV BX,0
ALOOP: CMP STRBUF[BX],'$'
JZ STOP ;找到,地址送ADRBUF,退出程序 INC BX
LOOP ALOOP STOP: MOV ADRBUF,BL MOV AH, 4CH INT 21H CODE ENDS END START
3.30 用子程序结构编程计算:S=1!+2!+3!+4!+?+8! 修改原有答案结果,SUM2为结果
STACK SEGMENT STACK DW 256 DUP(?) TOP LABEL WORD STACK ENDS
DATA SEGMENT BUFF DB 1,2,3,4,5,6,7,8 SUM DW 0000H SUM2 DW 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX
MOV SP,OFFSET TOP MOV CH,0 MOV CL,8
MOV SI,OFFSET BUFF LOP1:
MOV AX,OFFSET SUM PUSH AX MOV AH,0 MOV AL, [SI] PUSH AX
CALL FAR PTR FACT MOV DX,SUM ADD SUM2,DX INC SI
LOOP LOP1 MOV AH,4CH INT 21H CODE ENDS
CODES SEGMENT ASSUME CS:CODES FACT PROC FAR PUSH BP MOV BP,SP PUSH BX PUSH AX
MOV BX,[BP+8] MOV AX,[BP+6] CMP AX,0 JE DONE PUSH BX DEC AX PUSH AX CALL FACT MOV BX,[BP+8] MOV AX,[BX]
MUL WORD PTR [BP+6] JMP RETURN
DONE: MOV AX,01H RETURN:MOV [BX],AX POP AX POP BX POP BP