码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 接口技术:总线部分练习题(PCI配置空间)


    文章目录

      • 基础知识
        • 1.配置机构的端口设置
        • 2.配置操作实现的步骤
        • 3.配置空间的内容
        • 4.配置地址信息的格式
        • 5.基址寄存器中的内容分析
      • 例题
        • 第一题(对配置空间进行读取)
        • 第二题(对配置空间进行写)
        • 第三题(对配置空间进行写)

    基础知识

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    给总线号为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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    给总线号为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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Frontiers | 北林邬荣领/何晓青-网络作图揭示拟南芥与叶际微生物组互作机制
    LVS+Keepalived
    恢复IDEA误删除的git提交,提交被删除,尝试恢复提交
    详解|一级建造师考试报名流程有哪些?
    互联网Java工程师面试题·MySQL 篇·第一弹
    两台电脑连接时,A电脑可以ping通B电脑,而B电脑pingA电脑时出现超时问题,解决:
    微信小程序的生命周期概览
    JVM 上数据处理语言的竞争:Kotlin, Scala 和 SPL
    [激光原理与应用-30]:典型激光器 -2- 气体激光器 (连续激光器)
    [数据集][目标检测]睡岗检测数据集VOC+YOLO格式3290张4类别
  • 原文地址:https://blog.csdn.net/hanmo22357/article/details/127635445
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号