接口技术:总线部分练习题(PCI配置空间)

基础知识

1.配置机构的端口设置

配置机构的地址端口的寄存器是0CF8H-0CFBH;数据端口寄存器是0CFCH-0CFFH。

2.配置操作实现的步骤

①将所要访问的总线号、设备号、功能号和双字地址写到配置地址端口寄存器中;
②执行一次对配置数据端口寄存器的读操作或写操作。

3.配置空间的内容

在这里插入图片描述

4.配置地址信息的格式

在这里插入图片描述

5.基址寄存器中的内容分析

在这里插入图片描述

例题

第一题(对配置空间进行读取)

读PCI总线的1号扩展槽(设备号)2号功能设备的厂商标志(寄存器号)。(写出汇编语言代码段)

题目分析:读操作相对于写操作更加简单。首先确定需要进行传输给配置地址端口寄存器的内容。使能位为1,保留位中各位均为0,总线号默认为0,设备号为1,功能号为2,寄存器号为0(因为在第一行),因此可以得到需要写入到地址端口寄存器中的内容为:10000000000000000000101000000000(转换为十六进制即为80000A00H)

;首先将控制端口的地址放入地址寄存器DX中
MOV DX,0CF8H
;接着将双字地址放入双字累加寄存器EAX中
MOV EAX,80000A00H
;将需要写入地址端口的内容通过OUT指令输出到地址端口中
OUT DX,EAX
;首先将数据端口的地址放入地址寄存器DX中
MOV DX,0CFCH
;使用IN指令从指定的端口地址DX处读取数据并送入EAX寄存器中
IN EAX,DX

第二题(对配置空间进行写)

给总线号为7的PCI总线的4号扩展槽(设备号)0号功能设备的基址寄存器0分配8个I/O地址空间(写出汇编语言代码段)。

题目分析:和上一题的思路类似。首先通过向地址端口赋值用于指定总线号、设备号、功能号和寄存器号;接着向数据端口输出基址寄存器中应该存放的数据即可。

①确定地址端口的写入内容:根据基础知识中配置地址信息的格式可知,此处写入地址端口寄存器的数据的二进制形式应该为(其中寄存器号通过基础知识中配置空间的内容获得)

1 0000000 00000111 00100 000 010000 00 B

转换为十六进制即为80072040H。
②确定数据端口的写入内容:根据基础知识中基址寄存器中的内容分析可知,基地址中末位b0=1,表示是I/O空间指针。同时b1位保留位置零。由于分配大小为8个字节,因此第一位为1的位是b3。由此可以确定基地址寄存器中的内容为:

FFFF FFF9(最后一个字节是1001)

③编写完整汇编代码

;首先将地址端口寄存器的地址存入寄存器DX中
MOV DX,0CF8H
;接下来将要向地址端口写入的数据放入寄存器中
MOV EAX,80072040H
;把地址数据写入到地址端口中
OUT DX,EAX
;把数据端口寄存器的地址存入寄存器DX中
MOV DX,OCFCH
;把要向数据端口写入的数据放入寄存器中
MOV EXA,FFFFFF9H
;向数据端口输出数据
OUT DX,EAX

第三题(对配置空间进行写)

给总线号为5的PCI总线的3号扩展槽4号功能设备的基址寄存器4分配256个存储器地址空间。
题目分析:
①确定地址端口寄存器写入的内容:

1 0000000 00000101 00011 100 100000 00

转化为十六进制即为

80051C80H

②确定数据寄存器端口写入的内容

1111 1111 1111 1111 1111 1111 0000 0000

转化为十六进制数即为

FFFFFF00H

③编写完整汇编代码

MOV DX,0CF8H
MOV EAX,80051C80H
OUT DX,EAX
MOV DX,0CFCH
MOV EXA,FFFFFF00H
OUT DX,EAX
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值