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 个字节的数据表,表内元素已按从大到小的顺序排列好,现给定一元素,
试编程序在表内查找,若表内已有此元素,则结束;否则,按顺序将此元素插入表中适当
的位置,并修改表长。 解答:
;调试时用了十个数据,本程序已通过调试 DATA SEGMENT TABLE_LEN DB ? X DB 99H
TABLE DB 98H,90H,80H,70H,60H,50H,40H,30H,20H,10H;X1,X2,...,X100 COUNT EQU $-TABLE 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 个数求和后求平均值 MOV DX,0000 LEA SI,TABLE MOV CX,COUNT
MOV AL,X;假设X 为给定元素 ;在TABLE 中是否有元素X AGAIN: MOV BL,[SI] CMP BL,AL JZ EXIT INC SI
LOOP AGAIN
;X 元素不在表中,将X 插入表中适当位置 LEA SI,TABLE
MOV DI,SI;DI 为表的末地址 ADD DI,COUNT-1
MOV CX,COUNT AGAIN0:MOV BL,[SI] CMP BL,AL JA NEXT0
BB: CMP DI,SI JZ AA
MOV AH,[DI]
MOV [DI+1],AH;将比X 小的元素后移一位 DEC DI JMP BB
AA: MOV [DI+1],BL MOV [DI],AL
MOV TABLE_LEN,COUNT+1 JMP EXIT
NEXT0: INC SI LOOP AGAIN0
MOV [DI+1],AL;若比较后,X 元素为最小,则放在最末单元的后面,并将表长加1
MOV TABLE_LEN,COUNT+1 ;退出并返回DOS EXIT: MOV AX,4C00H INT 21H CODE ENDS END START
21.(26)在当前数据段(DS),偏移地址为DATAB 开始的顺序80 个单元中,存放着某班80
个同学某门考试成绩。按要求编写程序:
①编写程序统计≥90 分;80 分~89 分;70 分~79 分;60 分~69 分,<