资源描述
第二章 微处理器及其结构2- 7 什么是逻辑地址 ? 什么是物理地址 ? 在实地址方式下 ,如何求存储器的物理 地址?设一个16字的数据区,它的起始地址为70A0H:DDF6(段基址:偏移地址). 写出这个数据区的首字单元和末字单元的物理地址.解:1) . 实模式下,逻辑地址由段基址和偏移地址组成 .物理地址是真正的存储单 元的地址.2) . 物理地址=段基址*16 + 偏移地址3) . 首字单元地址:70A0H*16 +DDF6H = 70A00H + DDF6H = 7E7F6H末字单元地址:7E7F6H + (16-1)*2 = 7E7F6H + 1EH = 7E814H相邻两个存储单元可构成一个字长为 16 位的字,在对准字时,用偶地址表示 字的地址.|2 | 3 | 4 | 5 | 6 | 7| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 160H 2H 4H 6H 8H AH CH EH 10H 12H 14H 16H 18H 1AH 1CH 1EH 20H第三章 指令系统3- 6 分别指出下列指令中源操作数和目标操作数的寻址方式 . 若是存储器寻址, 用表达式表示 EA=?1 )AND AX, 00FFH2)ADDBX, 00FFH3)MOVAX, BX+10H4)ADDAX, ESI*85)SUBBPSI, AX6)MOVAX, BX+DI+20H7)CMPSI, AX8)ORAX, DX9)MOVEAX, ESIEDI*210)PUSH DS解:(1) 立即数寻址(2) 直接寻址 EA=00FFH(3) 基址寻址 EA=(BX)+10(4) 比例间址 EA=ESI*8(5) 基址加间址寻址 EA=(BP)+(SI)(6) 带位移的基址加间址寻址 EA=(BX)+(DI)+20H(7) 间址寻址 EA=(SI)(8) 寄存器寻址(9) 基址加比例间址寻址 EA=(ESI)+(EDI)*2(10) 寄存器寻址注意:16位寻址:BX和BP作为基址寄存器.BX以DS作为默认段寄存器,BP以 SS 为默认段寄存器.SI和DI作为间址寄存器.默认DS为段寄存器 32位寻址:8个32位通用寄存器均可作为基址寄存器,其中ESP,EBP以SS为 默认段寄存器,其余均以DS为默认段寄存器.除ESP外的其它7个寄存器均可作间址寄存器,EBP默认SS 作段基址寄存器, 其它以 DS 作段基址寄存器3-7 32位微机工作在实地址模式下,已知(DS) = 1000和(SS) = 2000H, (SI)= 007FH, (BX) = 0040H, (BP) = 0016H,变量 TABLE 的偏移地址为 0100H.指出下 列指令中源操作数的寻址方式,求它的有效地址(EA)和物理地址(PA).(1)MOV AX, 1234H(2)MOV AX, TABLE(3)MOV AX, BX+100H(4)MOV AX, TABLEBPSI解:(1)直接寻址EA=1234HPA=(DS)*16 + EA = 11234H(2)直接寻址EA=(TABLE)=0100HPA=(DS)*16+EA=10100H(3)基址寻址EA=(BX)+100H=0140H PA=(DS)*16+EA=10140H(4)带位移的基址加间址寻址EA=(BP)+(SI)+TABLE=0195H PA=(SS)*16+EA=20195H注意: 当基址寄存器和间址寄存器默认的段寄存器不同时 ,一般规定,由基址 寄存器来决定默认的段寄存器为段基址寄存器.这里BP为基址寄存器,所以默认 SS 为段基址寄存器.3-8 指出下列指令的错误,并加以改正.(1)MOV DS, 100(2)MOV 1020H, DX(3)SUB 1000H, SI(4)PUSH AL(5)IN AL, 80H6)MOV DS, ES7)JMPBX8)SHRDX, 49)OUT380H, AX10ADDAL, BX11)POPCS12)MOVCL, 3300H解:(1)立即数不能直接传送到段寄存器中去应改为: MOV AX, 100MOV DS, AX2)立即数只能出现在源操作数位置 应改为: MOV DX,1020H3)源操作数和目标操作数不能同时为寄存器寻址 应改为: MOV AX, 1000HSUB AX, SI4)PUSH 指令不能操作 8 位数据 应改为: PUSH AX5)80H 不是端口 IN AL ,80H 应改为: IN AL, 80H6)两个段寄存器之间不能直接传送应改为: MOV AX, ESMOV DS,AX7)对8)移位次数超过 1 的时候,要把移位次数放入 CL 中 应改为: MOV CL, 4SHR DX, CL9)端口地址大于 255 时,要把地址放入 DX 中 应改为: MOV DX, 380HOUT DX, AX10)源操作数和目标操作数不匹配 应改为: ADD AX, BX11)POP 指令只能使用在存储器或通用寄存器 可改为: POP AX12)源操作数和目标操作数不匹配 应改为: MOV CX, 3300H3-9 已知: (DS) = 091DH, (SS) = 1E4AH, (AX) = 1234H, (BX) = 0024H, (CX) = 5678H, (BP) = 0024H, (SI) = 0012H, (DI) = 0032H, 09226H = 00F6H, 09228H = 1E40H, 1E4F6H = 091DH. 试求下列各指令单独执行后的结果 .; (CL) = ?; IE4F6H = ? : (BX) = ?: (AX) = ?; (SI) = ?; (AX) = ?; 09226H = ?(1) MOV CL, 20HBXSI(2) MOV BPDI, CX(3) LEA BX, 20HBXSI MOV AX, 2BX(4) LDS SI, BXDI MOV SI, BX(5) XCHG CX, 32HBX XCHG 20BXSI, AX 解:(1) (CL) = 00F6H(2) IE4F6H = 5678H(3) (BX) = 0056H (AX) = 1E40H(4) (SI)= 0024H5)(AX) = 5678H 09226H = 1234H3-10 已知(AL) = 0C4H, DATA单元中内容为5AH,写出下列每条指令单 独执行后的结果 (ODITSZAPC:0-xxux0)1 )AND AL, DATA2) OR AL, DATA3) XOR AL, DATA4) NOT DATA5) AND AL, 0FH6) OR AL, 1H7) XOR AL, 0FFH(8) TEST AL, 80H解:1 )(AL)= 40H2) (AL)= DEH3) (AL)= 9EH4) (AL)= A5H5) (AL)= 04H6) (AL)= C5H7) (AL)= 3BHCF=0,OF=0,SF=0,ZF=0,PF=0,AF 无定义CF=0,OF=0,SF=1,ZF=0,PF=1,AF 无定义CF=0,OF=0,SF=1,ZF=0,PF=0,AF 无定义不影响任何标志位CF=0,OF=0,SF=0,ZF=0,PF=0,AF 无定义CF=0,OF=0,SF=1,ZF=0,PF=1,AF 无定义CF=0,OF=0,SF=0,ZF=0,PF=0,AF 无定义(8) (AL)不变=0C4H CF=0,OF=0,SF=1,ZF=0,PF=0,AF 无定义3-12 (AL)=8EH,(BL)=72H,执行以下指令后,标志位 OF、SF、ZF、AF、 PF和CF的值是什么?(1) ADD AL,BL(2) AND BL,AL(3) CMP AL,BL(4) SHL AL,1 解:(1) OF=0,SF=0,ZF=1,AF=1,PF=1,CF=1(2) OF=0,SF=0,ZF=0,AF=(未定义),PF=0,CF=0(3) OF=1,SF=0,ZF=0,AF=0,PF=0,CF=0(4) OF=1,SF=0,ZF=0,AF=(未定义),PF=0,CF=13-15试用CMP指令和无条件指令实现以下判断(1)AX和CX中的内容均为无符号数( AX)(CX)则转至BIGGER标号执行 倉(AX) (CX)则转至LESS标号执行(2)BX和DX中的内容均为有符号数(BX)(DX)则转至BIGGER标号执行(BX) (DX)则转至LESS标号执行解:(1)CMP AX,CXJA BIGGERJB LESS(2)CMP BX,DXJG BIGGERJL LESS第四章 汇编语言程序设计4- 9 试用伪指令编写一数据段与下面程序等效。MOV AX, 0913HMOV DS, AXMOV BX, 20HMOV BX, ABDATA SEGMENT AT 0931HORG 20HDATA1 DW ?(或 DATA1 DW AB)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DATA1,ABCODE ENDS4-10 下面各题有语法错误,分别用两种办法修改,使其正确 (1) M1 DW 5060H MOV BL, M1改:M1 DB 60H, 50HMOV BL,M1M1 DW 5060HMOV BL, BYTE PTR M1MOV BX, M1M2 LABEL BYTEM1 DW 5060HMOV BL,M2(2) M2 EQU 10H MOV M2,AL改:DATA SEGMENTORG 10HM2 DB?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV M2,ALCODE ENDSEND STARTMOV SI,10HMOV SI, ALMOV DS:0010H,AL(3) M3 DW ABCD改: M3 DW AB,CDM3 DB ABCD(4) M4 DB 1234改: M4 DB 1234M4 DW 1234(5) DATA1 SEGMENTDA1 DW 1234HDATA1 ENDSDATA2 SEGMENTDA2 DW 5678HDATA2 ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA1MOV BX, DA2CODE ENDSASSUME CS: CODE, DS: DATA2ASSUME CS:CODE, DS: DATA1ASSUME DS: NOTHINGASSUME DS: DATA2ASSUME CD:CODE, DS: DATA1, ES: DATA2MOV AX, DATA2MOV ES, AXMOV BX,DA24-12 按照下面要求写出程序的框架(1)数据段的位置从 8000H 开始,数据段中定义一个有 100 个字节的数组(2)堆栈段名为STACK1,留100个字的空间。(3)代码段指定段寄存器,主程序从 1000H 开始,给有关段寄存器赋值。DATA SEGMENT AT 800HM1 DB 100 DUP (?)DATA ENDSSTACK1 SEGMENT STACKDW 100 DUP (?)STACK1 ENDSCODE SEGMENT AT 100HASSUME CS:CODE,DS:DATA, SS: STACK1START: MOV AX,DATAMOV DS,AXCODE ENDSEND START4-15将MBUF为起始单元的5个数按相反次序传到NBUF单元开始的存储单元 之中.DATA SEGMENTMBUF DW 1,2,3,4,5NBUF DW 5 DUP(?)M EQU 10HDATA ENDSSTACK1 SEGMENT PARA STACK DB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA,SS:STACK1START: MOV AX, DATAMOV DS, AXMOVMOVMOVADDLOP: MOVMOVDECDECINCSI, OFFSET MBUF DI, OFFSET NBUF CX, 5SI, 8AX, SIDI,AXSISIDIINC DIDEC CXJNZ LOPMOV AH, 4CHINT 21HCODE ENDSEND START4-16 试编写程序,完成下列数字表达式的功能l(X = 1)Y = 0(-1 v X v 1)-1(X v=-1)解:DATA SEGMENTXX DB XY DB ?DATA ENDSSTACK1 SEGMENT PARA STACKDB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA,SS:STACK1START: MOV AX, DATAMOV DS, AXMOV AL, XXCMP AL, -1JG BIGRMOV AL, -1JMP JUST2BIGR: CMP AL, 1JGE JUST1MOV AL, 0JMP JUST2JUST1: MOV AL, 1JUST2: MOV Y, ALMOV AH, 4CHINT 21HCODE ENDSEND START4-17 将内存中某数据块中的正数和负数分开 ,并分别将这些正数和负数送同一 数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数.DATA SEGMENTD1 DB -1, -2, 1, 2, 3, -4, 4,5,-5,0,0,9,-3COUNT EQU $-D1D2DB 100 DUP(?)D3DB 100 DUP(?)PNUM DW 1 DUP(?)NNUM DW 1 DUP(?)CONST DW 10000,1000,100,10,1DECS DB 5 DUP(0)HEAD1 DB THE NUMBER OF POSITIVE NUMBER IS:$HEAD2 DB THE NUMBER OF NEGATIVE NUMBER IS:$ DATA ENDSSTACK1 SEGMENT PARA STACKDB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA,SS:STACK1START: MOV AX, DATAMOVMOVMOVDS, AXBX, OFFSET D1SI, OFFSET D2MOV DI, OFFSET D3 MOV CX, COUNTLOP: MOV AL, BXCMP AL, 0JGE JUST1MOV DI, ALINC DIINC NNUMJMP JUST2JUST1: JE JUST2MOV SI, ALINCSIINCPNUMJUST2: INCBXDECCXJNZLOPMOV AH,9HMOV DX,OFFSET HEAD1INT 21HMOV AX,PNUMMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HMOV AH,9HMOV DX,OFFSET HEAD2INT 21HMOV AX,NNUMCALL DISPLAYMOV DL,0AHMOV AH,02HINT 21HMOV DL,0DHMOV AH,02HINT 21HMOV AH, 4CHINT 21HDISPLAY PROC NEARMOV CX,5LEA SI,CONSTLEA DI,DECS CONV3: MOV BL,0 LOP1: SUB AX,SIJC NEXT INC BLJMP LOP1 NEXT: ADD AX,SIOR BL,30HMOV DI,BL INC SI INC SIINC DILOOP CONV3MOV AH,02HMOV CX,5LEA DI,DECSCONV4: MOV DL,DICMP DL,30HJZ NODIS JMP DISP NODIS: INC DI LOOP CONV4 DISP: INT 21HCMP CX,0 JZ QUIT INC DIMOV DL,DI LOOP DISP QUIT: RET DISPLAY ENDPCODE ENDSEND START4-19内存BLOCK开始,存放着256个字节的带符号数编写程序,从这些数中找出绝对值最大的数,将其放入MAX中.解:DATA SEGMENTBLOCK DB -1, -3, 2, 5, -4, -7, -8,9,10,-124COUNT EQU $-BLOCKMAXDB ?MAX1DB ?DATA ENDSSTACK1 SEGMENT PARA STACK DB 100 DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA,SS:STACK1START:MOV AX, DATAMOV DS, AXMOV SI, OFFSET BLOCKMOV CX, COUNTMOV BL,SICMP BL, 0JL ABS1JMP CON1ABS1: NEG BLCON1: DEC CXLOP: INC SIMOV AL,SICMP AL, 0JL ABS2JMP CON2ABS2: NEG ALCON2: CMP BL, ALJAE JUST1XCHG BL, ALMOV DI,SIJUST1: DEC CXJNZ LOPMOVBH,DIMOVMAX,BHMOVMAX1, BLMOVAH, 4CHINT21HCODE ENDSEND START第五章 存储器5-7若用1024*lb的RAM芯片组成16K*8b的存储器,,需要多少芯片?在地址线 中有多少位参与片内寻址?多少位用做芯片组选择信号?解:先进行位扩展,一组芯片需要 8 片再进行字扩展,需要16组芯片.所以共需要16*8=128片1024=1K,需要10位参与片内寻址16=24,需要4位做选择信号.5-8 试用 4K*8b 的 EPROM2732 和 8K*8b 的 SRAM6264,以及 74LS138 译码器, 构成一个8KB的ROM,32KB的RAM存储系统,要求设计存储器扩展电路,并指出 每片存储芯片的地址范围.解:译码f J片内译码 f芯片型号A15A13A12A11A0地址范围1#2732000000011 10000H-0FFFH2#273200011000H1FFFH3#62640010001112000H3FFFH4#62640104000H-5FFFH5#62640116000H-7FFFH6#62641008000H9FFFH5-9 用 EPROM2764(8K*8b)和 SRAM6264 (8k*8b)各一片组成存储器,其地 址范围为FCOOOFFFFFH,试画出存储器与CPU的连接图和片选信号译码电路 (CPU 地址线 20 位,数据线 8 位)。1111 1100 0000 0000 00001111 1101 1111 1111 11111111 1110 0000 0000 00001111 1111 1111 1111 11115- 10现有存储芯片:2K*1b的ROM和4K*1bde RAM,若用它们组成容量为16KB 的存储器,前4KB为ROM,后12KB为RAM,问各种存储芯片分别用多少片?解:4KB=4K*8b 需要2*8=16片12KB=12K*8b 需要3*8=24片第六章 中断技术6- 18某系统使用一片8259A管理中断,中断请求由IR2引入,采用电平触发、 完全嵌套、普通EOI结束方式,中断类型号为42H,端口地址为80H和81H, 试画出8259A与CPU的硬件连接图,并编写初始化程序。解:电路图参见教材 P178 图 6-19, CS 由 A19-A1=0000 0000 0000 1000 000 和 M/IO给出低电平。MOV AL, 1BH(00011011B)OUT 80H, ALMOV AL,40H(01000000B)OUT 81H,ALMOV AL, 01H(00000001B)OUT 81H, ALMOV AL, FBH(11111011B)OUT 81H, AL;设置 ICW1:设置 ICW2:设置 ICW4设置 OCW16-19 某系统使用两片 8259A 管理中断,从片的 INT 连接到主片的 IR2 请求输 入端。设主片工作于边沿触发、特殊完全嵌套、非自动结束和非缓冲方式,中断 类型号为70H,端口地址为80H和81H;从片工作与边沿触发、完全嵌套、非 自动结束和非缓冲方式,中断类型号为40H,端口地址为20H和21H。要求:(1)画出主、从片级联图(2)编写主、从片初始化程序 解: 电路图参见教材 P179 图 6-21,主片 CS 由 A19-Ai=0000 0000 0000 1000 000 和 M/IO给出低电平,从片CS由A19-A1=0000 0000 0000 0010 000和M/IO给出低电 平。主片 8259AMOV AL,11H(00010001B)OUT 80H, AL ;定义 ICW1MOV AL, 70H(01110000B)OUT 81H, AL ;定义 ICW2MOV AL, 04H(00000100B)OUT 81H, AL ;定义 ICW3MOV AL, 11H(00010001B)OUT 81H, AL ;定义 ICW4MOV AL, FBH(11111011B)OUT 81H, AL ;定义 OCW1(开放从片 IR2 的请求)IN AL, 81HAND AL, 11111011OUT 81H, AL从片 8259AMOV AL,11H(00010001B)OUT 20H, AL ;定义 ICW1MOV AL, 40H(01000000B)OUT 21H, AL ;定义 ICW2MOV AL, 02H(00000010B)OUT 21H, AL ;定义 ICW3MOV AL, 01H(00000001B)OUT 21H, AL ;定义 ICW46-20 某系统由 8259A 的 IR2 引入外设中断请求(跳变信号有效),要求当 CPU 响应IR2请求时,输出显示字符串“*”,并中断10次退出,试编写主程序和 中断服务程序。解:设8259A的I/O地址为20H,21H,中断类型号OAH,从IR2引入DATA SEGMENTMESS DB *,OAH,ODH,$INTA00 EQU 0020HINTA01 EQU 0021HDATA ENDSSTACK SEGMENT STACKDB 100H DUP (?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKMAIN:MOV AX, DATA;8259A初始化;写 ICW1;写 ICW2;写 ICW4;设置中断矢量MOV DS, AXMOV DX, INTA00MOV AL, 13HOUT DX, ALMOV DX, INTA01MOV AL, 08HOUT DX, ALMOV AL, 01HOUT DX, ALPUSH DSMOV AX, SEG INT-PMOV DS,AXMOV DX,OFFSET INT-PMOVAL,0AHMOVAH,25HINT21HPOPDSMOVAL,0FBH;写中断屏蔽字 OCW1OUTDX,ALMOVDX,INTA00MOVAL,20H;写中断结束方式 OCW2OUT DX,ALMOV BX,10WAIT1: STI;开中断JMPWAIT1;等待中断INT-P:MOVAX,DATA;中断服务程序入口MOVDS,AXMOVDX,OFFSETMESS ;输出指定字符串MOVAH,09HINT21HMOVDX,INTA00;写0CW2,送中断结束命令EOIMOVAL,20HOUTDX,ALDECBX;控制 10 次循环JNZNEXTMOVDX,INTA01;读屏蔽寄存器 IMRIN AL,DXOR AL, 04HOUT DX, ALSTIMOV AX, 4C00H INT 21HNEXT: IRETCODE: ENDSEND MAIN;屏蔽 IR2 请求;开中断;返回操作系统;中断返回第七章 I/O 接口技术7-6设8255A的A 口工作于方式1输出,B 口工作于方式0输入,试编写初始 化程序(设端口地址为 40H-43H)。解:MOV DX, 43HMOV AL, 10100010B(A2H)OUT DX,AL7-7使用8255A作为开关和LED指示灯的接口。要求8255A的A 口连接8个开 关,B 口连接8个LED指示灯,将A 口的开关状态读入,然后送至B 口控制指 示灯亮、灭。试画出接口电路设计图,并编写程序实现之。解:电路图参见教材P193图7-14。A 口接入8个开关,B 口用LED替代数码管,共 阴接法。设8255四个端口的地址为FFE0HFFE3H。DATA SEGMENTPORTA EQU 0FFE0HPORTB EQU 0FFE1HCONTR EQU 0FFE3HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,90H ;初始化8255,PA为输入,PB为输出MOV DX,CONTROUT DX,ALL0:MOV DX,PORTA 读 PA 口IN AL,DXNOT AL;按下开关灯亮MOV DX, PORTBOUT DX,AL;送 PB 口显示MOV CX,1000;延时L1:DEC CXJNZ L1JMP L0CODE ENDSEND START 7-10利用8254的通道1,产生500Hz的方波信号.设输入时钟频率CKL1=2.5MHz, 端口地址为FFA0HFFA3H试编写初始化程序.解:MOV AL, 01110110BMOV DX, 0FFA3HOUT DX, ALMOV AX, 5000;2.5MHz/500Hz=5000MOV DX, 0FFA1HOUT DX, ALMOV AL, AHOUT DX, AL注意: 端口数大于 255,应先装入 DX 中.7-11 某系统使用 8254 的通道 0 作为计数器,计满 1000,向 CPU 发中断请求,试编 写初始化程序(端口地址自设)解:设端口地址为 80H83HMOVAL, 00110000BOUT83H, ALMOVAX, 1000OUT80H, ALMOVAL, AHOUT80H, AL7-12 采用 8254 的通道 0 产生周期为 10ms 的方波信号,设输入时钟的频率为 100kHz,8254的端口地址为38H3BH,试编写初始化程序解: MOV AL, 00110110BOUT 3BH, ALMOV AX, 1000;10ms*100kHz=1000OUT 38H, ALMOV AL, AHOUT 38H, AL注意: 计数值的高低字节的装入;7-15 什么是波特率?假设异步传输的一帧信息由1位起始位、7位数据位、1位 校验和 1 位停止位构成,传送的波特率为 9600,则每秒钟能传输的字符个数是 多少?解:波特 率表示每秒钟传送二进制的位数。 每秒钟能传 输的字 符个数为 9600/10=960。7-16 一个异步串行发送器,发送的字符格式为:1位起始位,7位数据位,1位 奇偶校验位和2位停止位,若每秒发送100个字符,则其波特率为多少? 解:波特率为100X11=1100。7-19 设某系统使用一片8250进行串行通信,要求波特率为2400、8位数据位、2 位停止位、偶校验,对接收缓冲器满开中断,试编写初始化程序。解:设8250端口地址为3F8H-3FEH,基准频率1.8432MHZ,初始化程序如下:MOV DX, 3FBHMOV AL, 80H(10000000B)OUT DX, AL;置线路控制寄存器 DLAB 为“1”MOV DX, 3F8HMOV AL, 30H;1843200 / (1200*16) = 48=30HOUT DX, ALINCDXMOV AL,0OUT DX, AL;写除数R高位MOV DX, 3FBHMOV AL, 1FH(00011111B)OUT DX, AL;写线路控制 RMOV DX, 3FCHMOV AL, 03H(00000011B)OUT DX, AL ;写MODEM控制R,数据终端就绪,请求发送MOV DX, 3F9HMOV AL, 1H(00000001B)OUT DX, AL ;接收缓冲器满中断7-21设计一个应用系统,要求:8255A的A 口输入8个开关信息,并通过8250 以串行的方式循环,将开关信息发送出去。已知:8255的端口地址为100H-103H。 8250输入的基准时钟频率为1.8432MHz,传输波特率为2400,数据长度为8位, 2位停止位,奇校验,屏蔽全部中断,端口地址为108H-10EH,采用查询方式传 送。要求:(1)设计该系统的硬件接口电路(包括地址译码电路)。(2)编写各芯片的初始化程序;(3)编写完成上述功能的应用程序。解:电路图主要由CPU与8255A的连接、8255A 口输入电路(参见教材P193图7-1)、8250与CPU的连接(应画出D7D。、IOR、IOW、时钟等,参见教材P223 图 7-45)、8255A 地址译码电路(AA0=00-11, CS 由 A19-A2=00000000 0001 000000和 M/IO给出低电平)、8250地址译码电路(A2A1A0=000-111, CS2由A19-A2=00000000 0001 0000 1 和 M/IO给出低电平)等组成。DATA SEGMENTA DB ?DATA ENDSSTACK1 SEGMENT PARA STACKDW 100 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA, SS:STACK1START: MOV AX, DATAMOV DS, AXMOV DX, 103HMOV AL, 10010000B(90H)OUT DX,ALMOV DX,10BHMOV AL,80H(10000000B)OUT DX,AL;置线路控制寄存器 DLAB 为“1MOV DX,108HMOV AL,30H;1843200 / (2400*16) = 48=30HOUT DX,ALINC DXMOV AL,0OUT DX, AL;写除数R高位MOV DX, 10BHMOV AL, 0FH(00001111B)OUT DX, AL;写线路控制 RMOV DX, 10CHMOV AL, 03H(00000011B)OUT DX, AL ;写 MODEM 控制 RMOV DX, 109HMOV AL, 0OUT DX, AL ;屏蔽全部中断WAIT_FOR: MOV DX, 10DH:读线路状态寄存器;出错否;发送寄存器空否,不空则返回等待IN AL, DXTEST AL, 00011110BJNZ ERRORTEST AL, 00100000B;读A 口状态;发送;出错则读线路状态寄存器,并显示“?”JZ WAIT_FORMOV DX, 100HIN AL, DXMOV DX, 108HOUT DX, ALJMP WAIT_FORERROR: MOV DX, 10DH IN AL, DXMOV DL, ?MOV AH, 02HINT 21HJMP WAIT_FORCODE ENDSEND START7-25采用8237的通道1控制外设与存储器之间的数据,设该片的CS由地址线 A15-A4=031H译码提供。试编写初始化程序,把外设中1KB的数据传送到内存 2000H开始的存储区域,传送完毕停止通道工作。解:START:MOV DX, 031DHOUT DX,AL;软件复位,先/后触发器为 0MOV DX, 0312HMOV AL,00HOUT DX,AL;2000H 写入基(当前)地址寄存器MOV AL,20HOUT DX,ALMOV AX, 1024 ;传输的字节数1024DECAXMOVOUT;计数值调整为 1024-1DX, 0313HDX, AL ;计数值写入基(当前)字节计数器MOVAL, AHOUTDX, ALMOVAL, 85H;块传送,地址增 1,写传送,禁止自动预置MOVDX, 031BHOUTDX, AL;写方式字MOVAL, 00H;DACK1=0, DREQ1=0,允许 8237 工作MOVDX, 0318HOUTDX, AL;写命令字MOVAL, 01HMOVDX, 031AHOUTDX, AL;写屏蔽字,允许通道1请求
展开阅读全文