微型计算机原理习题参考答案
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
L:
INC DX
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
- 26 -
微型计算机原理习题参考答案
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 中保存
- 27 -
微型计算机原理习题参考答案
LEA MOV
SI,DAT CX,20
NEXT: MOV AH,01H INT 21H MOV INC
[SI],AL SI
LOOP NEXT
;比较 20 个字符中的最大字符,并放入 AL 中 MOV CX,19 LEA MOV INC
SI,DAT AL,[SI] 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
- 28 -
微型计算机原理习题参考答案
START: MOV AX,DATA MOV
DS,AX
; LEA DI,BUFF NEXT: MOV AH,01H INT CMP JZ SUB LEA
21H;从键盘上接收单个字符 AL,0AH;与 0AH 比,判是否要结束 EXIT
AL,30H;否则,将 0~9 的 ASCII 码转换为十进制数 BX,TABLE
XLAT;用查表指令进行加密 MOV [DI],AL INC JMP
DI 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
- 29 -
微型计算机原理习题参考答案
MOV MOV
CX,COUNT
AL,X;假设 X 为给定元素
;在 TABLE 中是否有元素 X AGAIN: MOV BL,[SI] CMP JZ INC
BL,AL EXIT SI
LOOP AGAIN
;X 元素不在表中,将 X 插入表中适当位置 LEA SI,TABLE MOV ADD
DI,SI;DI 为表的末地址 DI,COUNT-1
MOV CX,COUNT AGAIN0:MOV BL,[SI] CMP JA
BL,AL NEXT0
BB: CMP DI,SI JZ AA MOV AH,[DI] MOV DEC JMP MOV MOV
[DI+1],AH;将比 X 小的元素后移一位 DI BB
[DI],AL
TABLE_LEN,COUNT+1
AA: MOV [DI+1],BL
JMP EXIT NEXT0: INC SI LOOP AGAIN0 MOV MOV EXIT:
[DI+1],AL;若比较后,X 元素为最小,则放在最末单元的后面,并将表长加 1 TABLE_LEN,COUNT+1
;退出并返回 DOS MOV AX,4C00H INT 21H
CODE ENDS END START
21.(26)在当前数据段(DS),偏移地址为 DATAB 开始的顺序 80 个单元中,存放着某班 80 个同学某门考试成绩。按要求编写程序:
①编写程序统计≥90 分;80 分~89 分;70 分~79 分;60 分~69 分,<60 分的人数各为多少,并将结果放在同一数据段、偏移地址为 BTRX 开始的顺序单元中。
②试编程序,求该班这门课的平均成绩为多少,并放在该数据段的 AVER 单元中。 解答:
;统计学生成绩
- 30 -