JMP
STOR
CHANGE: STOR:
NEG MOV AL
DATA3,AL
3
HLT DATA1 DB
DATA2 DB 5 DATA3 DB ?
3.13 存从40000H到4BFFH的个单元均写入55H,并再逐个读出,验证是否一致,若一致,置AL为7EH,否则置AL为81H.
ORG 100h MOV MOV
AX,4000H; DS,AX;
MOV SI,0 START: MOV CX,0BFFFH BEGIN: MOV [SI],55H MOV AL,[SI]
INC SI
CMP AL,55H JNZ ERR
LOOP BEGIN MOV AL,7EH
JMP STOP ERR: MOV AL,81H STOP: HLT
3.14~3.15 端口03FBH的BIT5为状态标志,当该位为1时,表示外设忙,不能接收数据;当为0时,表示外设闲,可以接收数据;当CPU向端口03F8H写入一个字节的数据时,03FBH的BIT5置1,当它变为0状态时,又可以写入下一个数据。据此编写将起始地址为SEDAT的50个数据输出到03F8H端口的程序。
WAIT:
MOV DX,03FBH IN AL,DX TEST
AL,0010 0000B;(20H)
JZ SEND JMP WAIT SEND:MOV DX,3F8H MOV AL,[SI];
CMP AL,0AH;输出字串结束标志符 JZ STOP OUT DX,AL
WAIT
JMP
STOP:HLT
3.16口02E0H的BIT2和BIT5同时为1,表示端口02E7H有一个字节型数据准备好可以
用以输入,当CPU从该端口读入数据后,02E0端口的BIT2和BIT5就不再同时为1;只有当02E7H端口的数据再次准备好时,它们才会再次同时为1,据此编写从02E7H端口输入32个数据然后存入A1000H单元开始的区域。
MOV MOV MOV MOV
AX,0A000H DS,AX
SI,1000H; CL,20H;
设置存储区地址 输入数据个数
BEGIN:MOV DX,0E20H IN AL,DX TEST AL,0010 0100B;
测试状态位 BIT5、BIT2
JZ BEGIN; 不同时为1继续测试 MOV DX,02E7H IN AL,DX; 输入数据 MOV [SI],AL; 存到指定区域 INC SI;
移动地址指针
循环
LOOP BEGIN; HLT
3.17 在内存40000H开始的16K的单元中存放着一组数据,将其顺序搬移到起始地址为A0000H的区域。
解:利用字符串操作指令 MOVSB,16K即16*1024=3FFFH。
MOV
AX,4000H
DS,AX AX,A000H ES,AX SI,0
MOV MOV MOV MOV MOV MOV
DI,0 CX,3FFFH
CLD
REPMOVSB
HLT
3.18 上题的基础上,将两个区域的数据逐个进行比较,若有错将BL置0,全对将BL置
FFH。
MOV MOV
AX,4000H DS,AX
MOV MOV MOV MOV MOV
AX,A000H ES,AX SI,0 DI,0
CX,03FFH
CLD AAB: CMPSB
JNZ STOP LOOP AAB MOV BL,0FFH
JMP EX1 STOP: MOV BL,0; EX1: NOP HLT
3.19 统计由40000H单元开始的16K个单元中所存字符?A‘的个数,统计结果存放在DX寄存器中。
MOV MOV MOV MOV MOV
AX,4000H DS,AX SI,0;
CX,3FFFH; 数据个数
DX,0;统计结果寄存器清零 XOR DX,DX
AAB:
AAC:
CLD LODSB CMP AL,?A‘; 比较 JZ AAC;字符为?A‘转计数 LOOP AAB; 循环
JMP STOP; 处理完毕转结束 INC DX; 统计结果加1 DEC CX; 循环次数减1
JCXNZ AAB; CX<>0继续
STOP: HLT
3.20 编写对AL中的数据进行―偶校验‖的一个过程,并将校验结果放入AL寄存器。
PJY
PROC NEAR PUSH PUSH PUSH PUSH MOV AND
AX BX CX DX
AL,DAT AL,AL
JNP PJY1
3.21
MOV
AL,00H; 表示为偶
JMP EXIT
PJY1: MOV AL,FFH; 表示为奇 EXIT: POP
DX
CX BX AX
POP POP POP
PJY RET ENDP DAT DB ?
对80000H开始的256个单元的数据加上偶校验。
ORG 100h
MOV AX,8000H MOV DS,AX MOV MOV
SI,0
CX,100H
PAR0:
CLD
LODSB;(MOV AL,[SI] ;INC SI) TEST AL,AL JNP PAR1
LOOP PAR0 JMP STOP OR AL,80H; MOV [SI-1],AL DEC CX
PAR1:
JNZ PAR0 STOP: HLT
4-1 某以8088为CPU的微型计算机内存RAM区为00000H ~3FFFFH,若采用6264、62256、
2164或21256各需要多片芯片? 解答: 8088 内存单元为8 bit,所以,从00000H 到3FFFFH,共需要214 个byte,共214*8bit,也就是共占用16K byte空间。由于各种芯片的数据总线根数不同,所以在连接时要特别注意芯片的位数; 对于如下芯片:
6264 有8根数据线,13根地址线,故其容量为 2*8bit,即8Kbyte, 所以需要2片; 62256 有8根数据线,15根地址线,故其容量为 215*8bit,即32 Kbyte, 所以仅需要1片;尽管题目要求只需要16K的空间,但在使用62256时不得不使用1片。
2164 有8根数据线,12根地址线,故其容量为 2*8bit,即4Kbyte, 所以需要4片; 21256 有1根数据线,10根地址线(实际为20根,分两组),但由于仅有一根数据线,要构成八位的存储器至少需要8片,但总容量为8*256Bit,远远超过题目的要求。
4.2 利用全地址译码将6264接在8088的系统总线上,其所占的地址范围为BE000H~BFFFFH,试画出连接图。
解答:6264有13根地址线,连接时接到系统总线的低13位,即A0~A12, 其他7根地址线A19~A13的 地址译码输入应该为:1011 111 B,故而有如下的连接:
1213
4.3
试利用6264 芯片,在8088系统总线上实现0000H~03FFFH的内存区域,试画出电路连接图。