课堂综合练习及参考答案.docx
《课堂综合练习及参考答案.docx》由会员分享,可在线阅读,更多相关《课堂综合练习及参考答案.docx(20页珍藏版)》请在冰豆网上搜索。
课堂综合练习及参考答案
课堂练习1
1.写汇编程序片段,判断AL和BL寄存器的最高位,相同时转移到标号L001,否则继续(使用普通指令实现,不能改变AL和BL寄存器的值,且不能使用其它寄存器)。
PUSHAX
XORAL,BL
TESTAL,80H
POPAX
JZL001
2.写汇编程序片段。
寄存器AL存放的是温度(摄氏度,有符号数),将其转换为华氏度(华氏度=摄氏度×1.8+32),取整数,结果存放在AX寄存器中。
MOVBL,9
IMULBL;AL×BL商→AX
MOVBX,5
XORDX,DX
IDIVBX;DX:
AX÷BX商→AX
ADDAX,32
3.当在主机中执行输入指令INAL,DX时,ISA总线的控制总线中哪个信号有效?
DX的值影响ISA总线的什么信号?
ISA控制总线中的-IOR信号有效,DX的值输出到地址总线的低16位。
4.PCI总线的仲裁机制的作用是什么?
PCI信号中哪些信号与仲裁有关系?
总线仲裁机制是PCI主设备取得总线控制权的数字功能电路机制,PCI主设备通过REQ#信号提出向总线仲裁机制提出总线申请,仲裁机制通过GNT#信号应答主设备。
5.PCI中那些信号是中断申请?
在配置空间有哪些字段与中断有关?
PCI总线的中断申请信号有4个,INTA#、INTB#、INTC#和INTD#。
通过配置空间的InterruptPin字段(偏移地址3DH)选择使用上述4个中断申请中的哪一个。
通过配置空间的InterruptLine字段(偏移地址3CH)确定所选中断对应系统中断的编号。
6.在TPC-386EX实验台初始化8253(基地址200H)的通道2,采用0方式、二进制计数、计数器初值1000,写出初始化汇编代码。
TIMER=200H
…
MOVAL,0B0H;定时器2/16位初值/0方式/二进制
MOVDX,TIMER+3
OUTDX,AL
MOVAX,1000
DECDX
OUTDX,AL
MOVAL,AH
OUTDX,AL
7.针对TPC-386实验台,编写中断初始化程序。
要求:
边沿触发,采用单片8259非缓冲方式,中断编号基数为16,普通全嵌套优先权方案,普通结束方式。
中断信号从IR5引入。
;----------8259初始化
MOVAL,00010011B;ICW1
OUT20H,AL
MOVAL,00010000B;ICW2
OUT21H,AL
MOVAL,00000101B;ICW4
OUT21H,AL
;-----------设置中断向量
PUSHDS
XORAX,AX
MOVDS,AX
LEAAX,CS:
IR5p;中断服务程序
MOVDS:
[0054H],AX
MOVAX,CS
MOVDS:
[0056H],AX
POPDS
;-------------------设置中断屏蔽寄存器
MOVAL,0DFH;OCW1
OUT21H,AL
;-------------------打开中断
STI
8.在TPC-386EX实验台写一个使用SIR0中断的中断服务程序的框架(采用普通中断结束方式)。
SIR0pPROCFAR
PUSH…;保护现场
CLI;关闭中断
…
MOVAL,20H;中断结束
OUT0A0H,AL
POP…;恢复现场
STI;开中断
IRET;从中断返回
SIR0pENDP
课堂练习2
1.简述PCI中断。
包括中断产生、中断响应的过程。
当PCI设备需要中断支持,就要在INTA#~INTD#中选择一个中断申请线,在配置空间的InterruptPin(偏移地址3DH)字段定义,并通过配置空间的InterruptLine字段(偏移地址3CH)确定所选中断对应系统中断的编号。
当中断产生,设备的中断申请送到中断控制器,中断控制器向CPU发送中断申请,CPU控制PCI总线进入中断响应周期,获取中断向量(图16.16)。
CPU根据中断向量转入中断服务程序。
2.简述USB的帧和微帧的概念,以及协议中的实现。
说明SOF令牌结构。
USB协议通过帧(低速和全速模式)或微帧(高速模式)的定义,将时间分为1ms或125μs的间隙,并通过帧或微帧同步全部USB设备。
USB主机以广播方式向所有USB设备发送“帧标志”信息。
全速模式下主机每1ms发送一个SOF包。
低速模式下由KeepAlive状态信号替代SOF包。
高速模式下每一个1ms帧分成了8个微帧。
SOF格式:
Sync
PID
FrameNo.
帧序列号11位
CRC5
校验5位
EOP
3.说明USB传输中的“事务”的概念,以及“事务”的构成要件。
USB的事务(Transaction)为USB主机与设备端点之间的一次数据传输。
事务是USB传输(Transfer)过程中的一个阶段(Stage)。
为了实现一个USB事务,需要2~3个数据包(Package)的交换。
每一个数据包被称为一个事务的相位(Phase)。
构成事务的数据包通常依次为令牌包、数据包和联络包,实时传输的事务无联络包。
4.简要说明USB的4种传输模式的特点和性能。
USB的4种传输模式分别为控制传输、中断传输、批量传输和实时传输。
可以根据USB设备的特点选择支持的传输模式。
但USB设备必须支持控制传输。
控制传输实现USB控制信息、配置信息的传输,同时也可以实现用户数据传输。
中断传输可以保证传输延时,适合小批量、非周期性的数据传输。
批量传输可以最大可能的利用传输带宽,适合突发性的、大批量数据传输。
实时传输可以保证传输带宽,适合恒定流量、同时对错误不敏感的数据传输。
4种USB传输的理论速度:
传输类型
控制传输
批量传输
中断传输
实时传输
高速
最大速率(B/s)
15,872K
53,248K
24,576K
24,576K
全速
最大速率(B/s)
832K
1,216K
64K
1,023K
低速
最大速率(B/s)
24K
不支持
800
不支持
5.在TPC-386EX实验箱实现延时脉冲输出。
即当按钮按下后,延时25ms后从8255的PC0输出一个负脉冲,脉冲宽度不限。
基本方法:
将按钮连接至8255的一个输入端(PC7),在主程序检测该输入端的上跳沿,启动定时器,将定时器输出连接到系统中断(MIR5),在中断服务程序向PC0输出负脉冲。
中断初始化:
采用实验台系统中断MIR5,已经完成8259A初始化。
剩下任务包括设置中断向量、设置中断屏蔽寄存器、打开中断。
;-------------------设置中断向量
PUSHDS;保存DS
XORAX,AX;0→AX
MOVDS,AX;→DS
LEAAX,CS:
MIR5p;中断服务入口地址偏移量→AX
MOVDS:
[00D4H],AX;→[00D4H]
MOVAX,CS;中断服务入口地址段值→AX
MOVDS:
[00D6H],AX;→[00D6H]
POPDS;恢复DS
;-------------------设置中断屏蔽寄存器
INAL,21H;读取当前中断屏蔽寄存器
ANDAL,0DFH;将D5置为0
OUT21H,AL;写回中断屏蔽寄存器
;-------------------打开中断
STI
8255初始化:
A组、B组均为0方式输入,PC0~PC3输出,PC4~PC7输入。
(8255片选端连接地址200H)
PPORT=200H
…
MOVAL,10011010B
OUTPPORT+3,AL
MOVAL,1;1→PC0
OUTPPORT+3,AL
按钮按下检测:
读取判断PC7
press0:
INAL,PPORT+2
TESTAL,80H
JNZpress0
press1:
INAL,PPORT+2
TESTAL,80H
JZpress1
8253初始化:
通道2,0方式,输入1MHz,初始值25000。
TIMER=210H
…
MOVAL,10110000B
OUTTIMER+3,AL
MOVAX,25000
OUTTIMER+2,AL
MOVAL,AH
OUTTIMER+2,AL
中断服务:
输出向PC0输出负脉冲。
IRQ5ProPROCFAR
CLI
PUSHAX
MOVAL,0
OUTTIMER+3,AL
…;可加入延时
MOVAL,1
OUTPPORT+3,AL
MOVAL,20H
OUT20H,AL
POPAX
STI
IRET
IRQ5ProENDP
6.电话忙音的频率是450Hz,通断比是350:
350ms。
通过TPC-386EX实验台资源设计一个忙音信号发生器。
方波实现方案之一:
过定时中断控制PC0输出忙音。
通过8253产生900Hz分频(通道1,3方式,1Mhz/900),定时器输出连接中断。
在中断服务程序对一个变量(Tick)进行二次计数,实现350ms的计数值是315,700ms一个周期,采用模630计数。
计数值小于315时反向PC0。
主程序:
;-----------初始化定时器1为2方式
MOVDX,TIMER+3
MOVAL,01110100B
OUTDX,AL
MOVDX,TIMER+1
MOVAX,1111;输入1MHz,输出900Hz
OUTDX,AL
MOVAL,AH
OUTDX,AL
;------初始化8255,PA,PCH:
0输入,PB,PCL:
0方式输出
MOVAL,10011000B
MOVDX,PPORT+3
OUTDX,AL
;------设置中断向量
PUSHDS
XORAX,AX
MOVDS,AX
LEAAX,CS:
MIR5p
MOVDS:
[00D4H],AX
MOVAX,CS
MOVDS:
[00D6H],AX
POPDS
;-------设置中断屏蔽寄存器
INAL,21H
ANDAL,0DFH
OUT21H,AL
STI;打开中断
RTloop:
JMPRTloop;死循环
中断服务程序
MIR5pPROCFAR
PUSHAX;保存寄存器
PUSHDX
CLI;关闭中断
INCtick
.IFtick>=630
MOVtick,0
.ENDIF
.IFtick<315
MOVAL,BYTEPTRtick
ANDAL,1
MOVDX,PPORT+3
OUTDX,AL
.ENDIF
MOVAL,20H;OCW2:
普通EOI命令
OUT20H,AL
STI;开放中断
POPDX;恢复寄存器
POPAX
IRET;从中断服务返回
MIR5pENDP
7.基于TPC-386EX实验台设计一个串行接口信号发生器。
将拨动开关K0~K7连接到8255的一个端口,每当8个拨动开关中任一个开关状态发生变化,就从串行接口发出当前K0~K7的状态字节。
串行接口参数是9600bps、8个数据位、1个停止位、无校验。
画出流程图,并写出汇编代码。
实现方案:
8255_CS接200H。
初始化8255,PB端口为0方式输入。
连接K0~K7之PB0~PB7;
16550_CS接210H。
初始化16550,9600/N/8/1;
进入主程序,循环读取PB并存储,当PB发生变化进入发送流程;
发送流程:
检测直到发送保持寄存器空,将数据写到16550发送数据寄存器;
发送后延时,以避免拨动开关抖动。
PPORT=200H
UART=210H
DATASEGMENT
keyBYTE0
DATAENDS
;-------------------16550串口初始化
MOVDX,UART+3;80H→LCR
MOVAL,80H
OUTDX,AL
MOVDX,UART;12→波特率因子锁存器
MOVAL,12;9600bps
OUTDX,al
MOVDX,UART+1
MOVAL,0
OUTDX,AL
MOVDX,UART+3;03→LCR
MOVAL,03H;8位数据/1位停止位/无校验
OUTDX,AL
MOVDX,UART+1;0→IER
MOVAL,0;关中断
OUTDX,AL
;---------------初始化8255,PB为0方式输入
MOVDX,PPORT+3
MOVAL,10001011B
OUTDX,AL
MOVDX,PPORT+1
INAL,DX
MOVkey,AL
mloop:
MOVDX,PPORT+1;读取开关状态
INAL,DX
.IFAL!
=key
MOVkey,AL
.REPEAT;检测知道THR空
MOVDX,UART+5
INAL,DX
ANDAL,20H
.UNTILAL!
=0
MOVDX,UART;发送数据字节
MOVAL,key
OUTDX,AL
.ENDIF
MOVCX,50000;循环延时
.REPEAT
.UNTILCXZ
JMPmloop
课堂练习3
1.USB协议定义的IN和OUT令牌包的作用是什么?
其包格式是什么样的?
其中的各个字段的作用是什么?
USB的IN和OUT令牌包是由主机发送到设备的。
IN令牌的作用是要求指定设备发送指定端点的数据到主机,OUT令牌的作用是主机通知指定设备要发送数据到它的指定端点。
IN和OUT令牌的格式是一样的:
Sync
PID
ADDR
ENDP
CRC5
EOP
其中:
Sync:
同步字,8位,00000001;
PID:
信息包标志,8位,低4位是标志编码,高4位是低4位反码;
ADDR:
设备地址,7位;
ENDP:
端点地址,4位;
CRC5:
循环冗余校验码,5位;
EOP:
包结束标志信号。
2.USB协议采用了什么差错控方法来保证传输的安全性?
为了实现信息传输安全,信息包中采用CRC校验,接收方根据CRC信息验证信息的正确性。
当接收方检测错误信息包,通过回送NAK握手包要求发送方重传;
信息包的PID字段是USB信息包的最关键信息,采用重复冗余传输防止PID信息传输错误;
数据包传输中顺序使用DATA0、DATA1、DATA2,以避免包丢失。
3.在TPC-386EX实验台产生一个固定延时、任意脉宽的负脉冲信号。
要求程序运行后指定信号输出端为1,按下按钮,待按钮释放开始延时10ms后输出端输出一个负脉冲,宽度不限。
设计实现方案,并画出流程图。
实现方案:
采用定时器5方式,按钮输出接到GATE端,OUT即要求的输出信号。
定时器输入接1MHz时钟,分频初值10000。
TIMER=200H
…
;采用定时器2通道
MOVAL,10111010B
OUTTIMER+3,AL
MOVAX,10000
OUTTIMER+2,AL
MOVAL,AH
OUTTIMER+2,AL
Floop:
JMPFloop
4.通过TPC-386EX实验台设计一个音频信号数字延时器的实现方案。
要求采样频率为8K/s,延时时间50ms。
(定时器控制的AD+FIFO存储+DA)
实现方案:
通过定时器产生8K/s的周期性中断(8253的2或3方式),在中断服务程序操作AD和DA变换;
定义一个数据区,400字节,可以存储50ms的数字化音频数据。
按照FIFO规则访问;
中断服务中先读取AD数据,再启动AD的顺序操作。
5.在TPC-386EX实验台实现AD变换演示。
将电位器分压值(0~+5V)送AD变换器,将8255的一个端口的8位依次连接到8个发光二极管L0~L7。
AD变换器获得的值由小到大分为8个等份,分别点亮L0、L1、…L7。
实现方案:
初始化8255,将端口C设置为输出。
利用端口C的8位输出连接L0~L7;
主程序循环AD变换(启动AD—延时—读取AD值);
根据获得的AD变换数据的高3位,经过位移等操作变换成为针对端口C的置位/复位;
0→端口C(将全部发光二极管灭),置位命令→端口C(点亮指定发光二极管)
汇编程序代码:
PPORT=200H
ADCON=210H
…
begin:
MOVDX,PPORT+3
MOVAL,10000000B
OUTDX,AL
MOVAL,0;PC输出0
DECDX
OUTDX,AL
mloop:
MOVDX,ADCON;启动变换
OUTDX,AL
MOVCX,1000;延时等待
delay1:
NOP
LOOPdelay1
MOVDX,ADCON+1;读取结果
INAL,DX
SHRAL,1;右移4位
SHRAL,1
SHRAL,1
SHRAL,1
ANDAL,0EH;高4位置0
ORAL,1;0000D7D6D51
MOVAH,AL
MOVDX,PPORT+2;向PC输出0
MOVAL,0
OUTDX,AL
INCDX;送置位/复位命令
MOVAL,AH
OUTDX,AL
JMPmloop
6.通过TPC-386EX实验台设计一个按钮启动的方波信号发生器,程序运行后信号输出端无输出,通过按钮启动800Hz方波开始输出,再次按动按钮停止输出。
设计电路连接并写出代码。
设计方案:
将按钮(PLUS1,正脉冲)连接到8255(PC7);
使用一个定时器,3方式。
输入(CLK2)连接1MHz,门控(GATE2)接+5V,输出(OUT2)即为要求的信号输出;
主程序初始化定时器和8255后,循环检测按钮状态,当按钮按下,启动或停止8253分频输出。
电路连接图:
程序流程图:
汇编程序代码(部分):
TIMER=200H;8254
PPORT=210H;8255
;----------数据段
stateBYTE0
;----------代码段
MOVAL,10011011B
OUTPPORT+3,AL
mloop:
INAL,PPORT+2
TESTAL,80H
JNZmloop
kpress:
INAL,PPORT+2
TESTAL,80H
JZkpress
INCstate
TESTstate,1
JZfstop
MOVAL,10110110B
OUTTIMER+3,AL
MOVAX,1250
OUTTIMER+2,AL
MOVAL,AH
OUTTIMER+2,AL
JMPmloop
fstop:
MOVAL,10110110B
OUTTIMER+3,AL
JMPmloop