15. 已知:在内存BUF开始的单元中,存在一串数据:58,75,36,42,89。
编程找出其中的最小值存入MIN单元中,并将这个数显示在屏幕上。
解:
STACK SEGMENT STACK
DB 100 DUP(?)
STACK ENDS
DATA SEGMENT
BUF DB 58H, 75H, 36H, 42H, 89H
MIN DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START: PUSH DS
MOV AX, DATA
MOV DS, AX
MOV CX, 4
MOV BX, OFFSET BUF
MOV AL, [BX]
ST1: INC BX
CMP AL, [BX]
JBE NEXT
MOV AL, [BX]
NEXT:LOOP ST1
MOV MIN, AL
AND AL, 0F0H
MOV CL,4
ROR AL, CL
ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
MOV AL, MIN
AND AL, 0FH
ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
POP DS
MOV AH, 4CH
INT 21H
HLT
CODE ENDS
END START
18. 某班有20个同学的微机原理成绩存放在LIST开始的单元中,要求编程先从高到低的次序排列好,再求出总分和平均值,分别存放在SUM和AVER开始的单元中。
解:
STACK ENDS
DATA SEGMENT
LIST DB 65H,76H,78H,54H,90H,85H,68H,66H,77H,88H
DB 99H, 89H, 79H, 69H,75H,85H,63H,73H,83H,93H
SUM DW 0
AVER DB 0
BUF DB 100 DUP (?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: PUSH DS
MOV AX,DATA
MOV DS,AX
MOV DI, OFFSET LIST
MOV BX, 19
LP0: MOV SI, DI
MOV CX, BX
LP1: MOV AL, [SI]
INC SI
CMP AL, [SI]
JNC LP2
MOV DL, [SI]
MOV [SI-1], DL
MOV [SI], AL
LP2: LOOP LP1
DEC BX
JNZ LP0
LP3: MOV CX, 20
MOV BX, OFFSET LIST
MOV SUM, 0
XOR AX, AX
LP4: ADD AL, [BX]
DAA
ADC AH, 0
INC BX
LOOP LP4
MOV SUM, AX
MOV BL, 20H
DIV BL
ADD AL,0。