INC DI INC DI
NEXT: INC SI INC SI
LOOP AGAIN
;找出ARRAY_EVEN 中的最大数 LEA SI,ARRAY_EVEN MOV CX,999 MOV AX,[SI] MOV BX,AX INC SI INC SI
NEXT: CMP AX,[SI] JAE LL
MOV AX,[SI] LL: INC SI INC SI
LOOP NEXT MOV MAX,AX
;找出ARRAY_EVEN 中的最小数(第13 题增加的部分) LEA SI,ARRAY_EVEN MOV CX,999 MOV AX,[SI]
MOV BX,AX INC SI INC SI
NEXT: CMP AX,[SI] JBE SS
MOV AX,[SI] SS: INC SI INC SI
LOOP NEXT MOV MIN,AX ;返回DOS
MOV AX,4C00H INT 21H CODE ENDS END START
13.在上题中,如果要求同时找出最大和最小的偶数,并把它们分别存放于MAX 和MIN 单元中,试完成程序。 解答:略(见第12 题)。
14.(28)在DATA 字数组中存放有100H 个16 位补码数,试编写一程序求它们的平均值,放
在AX 中,并求出数组中有多少个数小于平均值,将结果存于BX 中。 解答:
DATA SEGMENT
DAT DW X1,X2,...X256 DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX
;将数组中的100H 个数求和后求平均值 LEA SI,DAT MOV CX,100H CLC
MOV BX,0000 MOV DX,0000
AGAIN: MOV AX,[SI] ADD BX,AX JNC NEXT
ADC DX,1 NEXT: INC SI INC SI
LOOP AGAIN MOV CX,100H MOV AX,BX DIV CX
;找出DAT 中的小于平均值的个数 LEA SI,DAT MOV CX,100H MOV DX,0000H
AGAIN0:MOV BX,[SI]
CMP BX,AX;与平均值AX 比较,大于等于则转NEXT0,否则将读数器DX 加1 JGE NEXT0 INC DX
NEXT0: INC SI INC SI
LOOP AGAIN0 MOV BX,DX ;返回DOS
MOV AX,4C00H INT 21H CODE ENDS END START
15.(17)编写一个子程序,对AL 中的数据进行偶校验,并将经过校验的结果放回AL 中。
解答:
DATA SEGMENT COUNT EQU 7 DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX PUSH AX MOV DX,0
MOV CX,COUNT AGAIN: RCR AL,1 JNC L INC DX L: LOOP AGAIN POP AX TEST DX,01 JZ EXIT OR AL,80
EXIT: MOV AX,4C00H INT 21H
;ANOTHER METHORD JP EXIT OR AL,80H
EXIT: MOV AX,4C00H INT 21H CODE ENDS END START
16.(18)利用上题的予程序,对DATA 开始的256 个单元的数据加上偶校验,试编程序。 解答:
DATA SEGMENT
DAT DB ...;256 DUP (?) RESULT DB ...;256 DUP (?) NUM EQU 256 COUNT EQU 7 DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX LEA SI,DAT LEA DI,RESULT MOV CX,NUM
NEXT: MOV AL,[SI] CALL SUB1
MOV [DI],AL;MOV [SI],AL INC SI INC DI
LOOP NEXT MOV AX,4C00H INT 21H SUB1 PROC PUSH AX MOV DX,0
MOV CX,COUNT AGAIN: RCR AL,1 JNC L INC DX
L: LOOP AGAIN POP AX TEST DX,01 JZ QUIT OR AL,80H QUIT: RET SUB1 ENDP CODE ENDS END START
17.(19)试编写程序实现将键盘输入的小写字母转换成大写字母并输出。 解答:
DATA SEGMENT
MESS DB 'THE INPUT IS NOT CORRECT.',0DH,0AH,'$' DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX
NEXT: MOV AH,01H INT 21H
CMP AL,'Q' JZ EXIT
CMP AL,'a' JB ERROR CMP AL,'z' JA ERROR SUB AL,20H MOV AH,02H MOV DL,AL INT 21H JMP NEXT
ERROR: MOV AH,09H LEA DX,MESS INT 21H JMP NEXT
EXIT: MOV AX,4C00H INT 21H CODE ENDS END START
18.从键盘接收20 个字符,按键入顺序查找最大的字符,并显示输出。 解答:
DATA SEGMENT DAT DB 20 DUP(?) DATA ENDS ;
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA MOV DS,AX
;从键盘接收20 个字符,并送DAT 中保存 LEA SI,DAT MOV CX,20
NEXT: MOV AH,01H INT 21H
MOV [SI],AL INC SI
LOOP NEXT
;比较20 个字符中的最大字符,并放入AL 中 MOV CX,19
LEA SI,DAT MOV AL,[SI] INC SI
NEXT1: CMP AL,[SI]