微机原理及应用期末考试题 下载本文

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 分,<