微型计算机原理习题参考答案
STACK SEGMENT STACK ENDS ;
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK,ES:DATA START: MOV AX,DATA
MOV DS,AX ;CH3-14
LEA SI,DAT1 LEA DI,DAT2 MOV CX,128
AGAIN: MOV AL,[SI]
MOV [DI],AL
INC SI INC DI
LOOP AGAIN
;CH3-15,将两个数据块逐个单元进行比较,若有错 BL=00H,否则 BL=FFH
LEA SI,DAT1 LEA DI,DAT2 MOV CX,128 NEXT: MOV AL,[SI]
MOV BL,[DI]
CMP AL,BL JNZ ERROR INC SI INC DI
LOOP NEXT MOV BL,0FFH
JMP EXIT
ERROR: MOV BL,00H EXIT:
MOV AX,4C00H INT 21H
CODE ENDS END START
6.试编程序将当前数据区从 BUFF 开始的 4K 个单元中均写入 55H,并逐个单元读出比较,看写入的与读出的是否一致。若全对,则将 ERR 单元置 0H;如果有错,则将 ERR 单元置 FFH。解答:
DATA SEGMENT BUFF DB 1000H DUP(?)
- 16 -
微型计算机原理习题参考答案
ERR DATA ;
CODE
DB ? ENDS SEGMENT
CS:CODE,DS:DATA
ASSUME
START: MOV AX,DATA
MOV DS,AX
;将 55H 依次放入 BUFF 开始的 4K 个单元 LEA SI,BUFF
MOV CX,1000H MOV AL,55H NTXT: MOV [SI],AL INC SI
LOOP NEXT
;取出与 55H 比较,全对则 ERR=0,否则 ERR=FFH LEA DI,BUFF LEA SI,ERR
MOV CX,1000H NEXT1: MOV AL,[DI] INC DI CMP AL,55H
JNZ ERROR;若有一个不同,即置 ERR=FFH
LOOP NEXT1 MOV AL,00H
MOV [SI],AL;全比较完无错,则置 ERR=0 JMP EXIT ERROR: MOV AL,0FFH MOV [SI],AL ;返回 DOS
EXIT: MOV AH,4CH INT 21H CODE ENDS END START END
7.在上题中,如果发现有错时,要求在 ERR 单元中存放出错的数据个数,则程序该如何修改?解答:
DATA SEGMENT BUFF DB 1000H DUP(?) ERR DATA ; CODE
DW ? ENDS SEGMENT
CS:CODE,DS:DATA
ASSUME
START: MOV AX,DATA
- 17 -
微型计算机原理习题参考答案
MOV DS,AX
;将 55H 依次放入 BUFF 开始的 4K 个单元 LEA SI,BUFF
MOV CX,1000H MOV AL,55H NTXT: MOV [SI],AL INC SI
LOOP NEXT ;取出与 55H 比较 LEA DI,BUFF
LEA SI,ERR MOV DX,0000H MOV CX,1000H NEXT1: MOV AL,[DI] INC DI CMP AL,55H
JZ
NEXT2;若相同,则比较下一个 INC DX;否则将放出错个数的 DX 加 1
NEXT2: LOOP NEXT1 MOV
[SI],DX ;
EXIT:
MOV AH,4CH
INT 21H CODE ENDS END START END
8.试编写程序段,完成将数据区从 0100H 开始的一串字节数据逐个从 F0H 端口输出,已知数据串以 0AH 为结束符。解答: DATA SEGMENT ORG 0100H
DATA1 DB N DUP(?) DATA ; CODE
ENDS SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
;将 DATA1 数据串中的数据取出并从 F0H 端口中输出 LEA SI,DATA1 MOV CX,N MOV BL,0AH NTXT: MOV AL,[SI]
- 18 -
微型计算机原理习题参考答案
CMP JZ OUT INC
AL,BL EXIT 0F0H,AL SI
LOOP NEXT
;返回 DOS
EXIT: MOV AH,4CH INT CODE END END
9.(24)内存中以 FIRST 和 SECOND 开始的单元中分别存放着两个 4 位用压缩 BCD 码表示的十进制数, 低位在前。编程序求这两个数的和,仍用压缩 BCD 码表示, 并存到以 THIRD 开始的单元。解答: DATA SEGMENT FIRST DW 3412H SECOND DW 7856H THIRD DB ?,?,? 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,FIRST LEA DI,SECOND LEA BX,THIRD MOV CX,2 CLC
AGAIN: MOV AL,BYTE PTR[SI]
MOV DL,BYTE PTR[DI] ADC AL,DL
DAA
MOV BYTE PTR[BX],AL INC SI INC DI INC BX
LOOP AGAIN
- 19 -
21H ENDS START
微型计算机原理习题参考答案
JC AA
MOV BYTE PTR[BX],0
AA:
JMP EXIT
MOV BYTE PTR[BX],1
EXIT: MOV AX,4C00H
INT 21H CODE ENDS END START
10.(27)设字变量单元 A、B、C 存放有三个数,若三个数都不为零,则求三个数的和,存放在 D 中;若有一个为零,则将其余两个也清零,试编写程序。 解答:
DATA SEGMENT A DB ? B DB ? C DB ? D DW ? 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 LEA MOV CMP JZ ADC LEA
SI,A DI,D AL,[SI] AL,00 ZERO DX,AL SI,B
MOV AL,[SI] CMP AL,00 JZ ZERO ADC LEA
DX,AL SI,C
MOV AL,[SI] CMP AL,00 JZ ZERO
- 20 -