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] JAE LL
MOV AL,[SI] LL: INC SI LOOP NEXT1
;将最大的字符的ASCII 码由AL 送DL 显示 MOV DL,AL MOV AH,2H INT 21H
;返回DOS
MOV AX,4C00H INT 21H CODE ENDS END START
19.(29)编写汇编程序,接收从键盘输入的10 个数,输入回车符表示结束,然后将这些数 加密后存于BUFF 缓冲区中。加密表为:
输入数字:0,1,2,3,4,5,6,7,8,9;密码数字:7,5,9,1,3,6,8,0,2,4
解答:
DATA SEGMENT BUFF DB 10 DUP(?)
TABLE DB 7,5,9,1,3,6,8,0,2,4 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 DI,BUFF
NEXT: MOV AH,01H
INT 21H;从键盘上接收单个字符
CMP AL,0AH;与0AH 比,判是否要结束
JZ EXIT
SUB AL,30H;否则,将0~9 的ASCII 码转换为十进制数 LEA BX,TABLE
XLAT;用查表指令进行加密 MOV [DI],AL INC DI JMP NEXT
;退出并返回DOS
EXIT: MOV AX,4C00H INT 21H CODE ENDS END START
20.(23)有一个100 个字节的数据表,表内元素已按从大到小的顺序排列好,现给定一元素,
试编程序在表内查找,若表内已有此元素,则结束;否则,按顺序将此元素插入表中适当 的位置,并修改表长。 解答:
;调试时用了十个数据,本程序已通过调试