DOS下读取PCI配置空间信息的汇编程序(通过IOCF8/IOCFC)
汇编程序编写的读取PCI配置空间信息的代码(通过IOCF8/IOCFC):
- ;------------------------------------------------
- ;功能: 读取PCI 配置信息,存入文件zpci_config.txt
- ;环境: DOS + MASM5
- ;时间: 2015/08
- ;说明: 通过端口CF8h / CFCh 来读取
- ;
- ;---------------------自定义宏结构-------------------
- ;功能: 在文件中换行
- nextrow macro
- mov buffer ,0dh
- mov buffer+,0ah
- mov dx,offset buffer
- mov cx,
- mov ah,40h
- int 21h
- endm
- ;功能:把ascii 表示的字符写入文件
- tofile macro ascii
- mov buffer,ascii
- mov dx,offset buffer
- mov cx,
- mov ah,40h
- int 21h
- endm
- ;------------------------------------------------
- .386P
- ;-------------------------------------------------
- dseg segment use16
- busnum dw 0000h ;总线号0 - 00FFh
- devnum dw 001fh ;设备号0 - 001Fh
- funnum dw 0007h ;功能号0 - 0007h
- regnum dw 00ffh ;寄存器0 - 00FFh
- ;
- config_addr dd 00000000h ;用来暂存eax中的地址
- buff_num db 'bus:device:function:'
- ;
- config_data dd 00000000h ;用来存放eax中的pci数据
- fname db '\zpci_config.txt', ;文件名
- buffer db
- dseg ends
- ;----------------------------------------------------
- ;----------------------------------------------------
- cseg segment use16
- assume cs:cseg, ds:dseg
- start:
- mov ax,dseg
- mov ds,ax
- ;
- mov dx,offset fname
- mov cx, ;common file
- mov ah,3ch ;creat file
- int 21h
- ;
- mov bx,ax ;save file handle
- ;
- mov busnum,0000h
- mov devnum,0000h
- mov funnum,0000h
- mov regnum,0000h
- ;-----------------------------------------
- call print_num ;打印busnum:devnum:funnum = 00:00:00
- nextrow ;换行
- nextreg:
- call pci_read ;读取pci 配置空间
- cmp regnum,00h
- jnz continue ;判断不是第一个寄存器
- cmp ax,0ffffh ;判断设备是否存在
- jz nextfun ;不存在,跳到下一个fun
- continue:
- call writefile
- add regnum, ;只能每次读4个寄存器
- cmp regnum,00ffh ;判断
- ja nextfun ;256B 已读完,跳到下一个function
- jmp nextreg ;否则,读下一个reg
- nextfun:
- nextrow
- ;
- mov regnum,0000h
- inc funnum
- cmp funnum,0007h
- ja nextdev ;funnum 大于 7,跳到下一个dev
- call print_num
- nextrow
- jmp nextreg
- nextdev:
- mov regnum,0000h
- mov funnum,0000h
- inc devnum
- cmp devnum,001fh
- ja nextbus ;devnum 大于 1fh,跳到下一个bus
- call print_num
- nextrow
- jmp nextreg
- nextbus:
- mov regnum,0000h
- mov funnum,0000h
- mov devnum,0000h
- inc busnum
- cmp busnum,0005h
- ja endd ;busnum 大于5,跳到结束
- call print_num
- nextrow
- jmp nextreg
- ;-----------------------结束------------------------
- endd:
- mov ah,3eh ;close file
- int 21h
- ;
- mov ah,4ch ;return DOS
- int 21h
- ;---------------------------------------------------
- ;--------------------------------------------------
- ;函数功能:打印busnum:devnum:funnum
- print_num proc
- mov config_addr,eax ;保护eax中的地址
- ;------------------------------------
- mov dx,offset buff_num
- mov cx,
- mov ah,40h
- int 21h
- ;----------busnum------------
- mov ax,busnum
- push ax
- shr al,
- call toascii
- tofile al
- pop ax
- call toascii
- tofile al
- tofile 2Dh
- ;----------devnum----------
- mov ax,devnum
- push ax
- shr al,
- call toascii
- tofile al
- pop ax
- call toascii
- tofile al
- tofile 2Dh
- ;-----------funnum---------
- mov ax,funnum
- push ax
- shr al,
- call toascii
- tofile al
- pop ax
- call toascii
- tofile al
- ;-----------
- mov eax,config_addr ;恢复eax
- ret
- print_num endp
- ;------------------------------------------------------
- ;---------------------- writefile ----------------------------
- ;函数功能: 把eax 中的值写入文件
- ;入口参数: eax
- ;出口参数: 无
- ;所用寄存器和存储单元:ebx,ecx,edx
- writefile proc
- mov config_data,eax ;用config_data暂存eax中的pci数据
- ;--------第一个字节-----
- push eax
- shr al,
- call toascii
- tofile al
- pop eax
- call toascii
- tofile al
- tofile 20h
- ;--------第二个字节------
- mov eax,config_data
- shr eax,
- ;
- push eax
- shr al,
- call toascii
- tofile al
- pop eax
- call toascii
- tofile al
- tofile 20h
- ;--------第三个字节-------
- mov eax,config_data
- shr eax,
- ;
- push eax
- shr al,
- call toascii
- tofile al
- pop eax
- call toascii
- tofile al
- tofile 20h
- ;--------第四个字节---------
- mov eax,config_data
- shr eax,
- ;
- push eax
- shr al,
- call toascii
- tofile al
- pop eax
- call toascii
- tofile al
- tofile 20h
- ret
- writefile endp
- ;---------------------------------------------------
- ;-----------------------toascii---------------------------
- ;子程序名: toascii
- ;功能: 把al的低4位的值转成ascii码,存入al
- ;入口参数: al
- ;出口参数: al
- toascii proc
- and al,0fh
- add al,90h
- daa
- adc al,40h
- daa
- ret
- toascii endp
- ;----------------------------------------------------
- ;----------------------pci_read---------------------------
- ;子程序名: pci_read
- ;功能: 根据eax中的地址读取pci的配置空间,并存入eax
- ;入口参数: busnum、devnum、funnum、regnum
- ;出口参数: eax
- ;
- pci_read proc
- ;protect register
- push ebx
- push dx
- ;clear
- xor eax,eax
- xor ebx,ebx
- ;enable
- add eax,1h
- shl eax,
- ;bus number
- mov ebx,ds:[]
- and ebx,0ffh
- shl ebx,
- add eax,ebx
- ;device number
- xor ebx,ebx
- mov ebx,ds:[]
- and ebx,0ffh
- shl ebx,
- add eax,ebx
- ;function number
- xor ebx,ebx
- mov ebx,ds:[]
- and ebx,0ffh
- shl ebx,
- add eax,ebx
- ;register
- xor ebx,ebx
- mov ebx,ds:[]
- and ebx,0ffh
- add eax,ebx
- ;read IO
- mov dx,0cf8h
- out dx,eax
- mov dx,0cfch
- in eax,dx
- ;resume register
- pop dx
- pop ebx
- ret
- pci_read endp
- ;--------------------------------------------
- ;----------------------------------------------
- cseg ends
- end start
DOS下读取PCI配置空间信息的汇编程序(通过IOCF8/IOCFC)的更多相关文章
- DOS下读取spd信息的汇编程序(通过SMBus)
汇编程序编写的读取spd信息的代码: ;----------------------------------------------------------- ;功能: 通过SMbus 读取内存的SP ...
- SpringBoot(十三)-- 不同环境下读取不同配置
一.场景: 在开发过程中 会使用 开发的一套数据库,测试的时候 又会使用测试的数据库,生产环境中 又会切换到生产环境中.常用的方式是 注释掉一些配置,然后释放一下配置.SpringBoot提供了在不同 ...
- DOS下读取smbios的汇编程序(通过搜索memory)
汇编程序编写的读取smbios的代码: ;------------------------------------------------- ;功能: 读取SMBIOS 的Entry Point ,并 ...
- [转]WinForm和WebForm下读取app.config web.config 中邮件配置的方法
本文转自:http://blog.csdn.net/jinbinhan/article/details/1598386 1. 在WinForm下读取 App.config中的邮件配置语句如下: Con ...
- dos下的edit命令使用详解
dos下的edit命令使用详解 来源:网络 作者:未知 edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件. 比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当 ...
- PCI配置空间简介
一.PCI配置空间简介 PCI有三个相互独立的物理地址空间:设备存储器地址空间.I/O地址空间和配置空间.配置空间是PCI所特有的一个物理空间.由于PCI支持设备即插即用,所以PCI设备不占用固定的内 ...
- Linux下Redis服务器安装配置
说明:操作系统:CentOS1.安装编译工具yum install wget make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel ...
- [C] zlstdint(让VC、TC等编译器自动兼容C99的整数类型)V1.0。支持Turbo C++ 3等DOS下的编译器
作者:zyl910 以前我曾为了让VC++等编译器支持C99的整数类型,便编写了c99int库来智能处理(http://www.cnblogs.com/zyl910/p/c99int_v102.htm ...
- CentOS下Redis服务器安装配置
说明: 操作系统:CentOS 1.安装编译工具 yum install wget make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-de ...
随机推荐
- 亚马逊IOT-SDK,线程池数
1111
- Jmeter测试报告
服务器: 2个CPU,每个CPU 1个核,4G内存 20G硬盘 客户端(Jmeter):2个CPU,每个2个核,4+8内存 500G硬盘 ---------------------------- ...
- 新手详解JAVA+数据库+JSP完成简单页面
本篇以数据库添加为例(本例中数据库名为“xinxi”表单名字为“stud”) 准备---实体层: package entity; public class Student { private Stri ...
- TensorFlow读取CSV数据
代码来源于官方文档,做了一些小小的调整: # -*- coding:utf-8 -*- import tensorflow as tf filename_queue = tf.train.string ...
- cocos2dx 3.x(打开网页webView)
#include "ui/CocosGUI.h" using namespace cocos2d::experimental::ui; WebView *webView = Web ...
- 如何解决“504 Gateway Time-out”错误
做网站的同学经常会发现一些nginx服务器访问时候提示504 Gateway Time-out错误,一般情况下是由nginx默认的fastcgi进程响应慢引起的,但也有其他情况,这里我总结了一些解决办 ...
- react native 中使用swiper
1.下载依赖 cnpm install react-native-swiper --save 2.在组件中使用 import React, { Component } from 'react'; im ...
- LeetCode118.杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], [1,2,1], [ ...
- Web Audio初步介绍和实践
Web Audio还是一个比较新的JavaScript API,它和HTML5中的<audio>是不同的,简单来说,<audio>标签是为了能在网页中嵌入音频文件,和播放器一样 ...
- Mvcpager以下各节已定义,但尚未为布局页“~/Views/Shared/_Layout.cshtml”呈现:“Scripts”。
解决办法如下: 1.在_Layout.cshtml布局body内,添加section,Scripts.Render和RenderSection标签示例代码如下: <body class=&quo ...