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 ...
随机推荐
- 多线程——实现Runnable接口实现一个多线程
实现Runnable接口实现一个多线程 Runnable接口源码: package java.lang; //Runnable接口源码只有一个run方法 public interface Runnab ...
- matplot绘图
import matplotlib.pyplot as pltimport numpy as npimport matplotlib # 设置matplotlib正常显示中文和负号matplotlib ...
- NetBeans issues and solutions.(build.xml and debug multiple projects)
Copy a directory to another directory when building the .jar in NetBeans in the build.xml file. Solu ...
- js同时获得数组的两个最小值
//数组中找两个最小值,及索引 //例如数组: [2,6,7,4,10,3,5]; 计算得出,min1=2,index1=0,min2=3,index2=5; var min1 = Infinity; ...
- vue2.3时使用手机调试,提示媒体已断开的解决方案
参考链接:http://www.xitonghe.com/jiaocheng/windows7-9623.html 1.在当前版本vue下开发,发现只能在localhost时调试,不能使用电脑的ip, ...
- cocos2dx 3.x 网络循环接收数据(RakNet::Packet* packet)单步网络接收
void FriendFightLayer::update(float dt) { dealWithPacket(dt); if (m_isNeedSwitchToLobby) { PublicMet ...
- Asp.netCore之安装centos7 资料收集
虚拟机的安装和centos的安装看博友的文章:https://www.cnblogs.com/zhaopei/p/netcore.html ifconfig 在centons中用终端写命令比较费劲,可 ...
- 关于linux中SSH爆破总结
2.思路 (1)对root账号进行暴力破解 (2)使用中国姓名top1000作为用户名进行暴力破解 (3)使用top 10000 password字典进行密码破解 (4)利用掌握信息进行社工信息整理并 ...
- url中是否加斜杠/
通常来说,不加斜杠的形式(如”example.jsp”)请求的是相对于当前页面路径的资源 http://localhost:8080/webapp/examole:加斜杠的形式(”/example.j ...
- Yii数据对象笔记
要执行一个SQL查询,应该遵循以下步骤 - 创建一个 yii\db\Command 的 SQL查询命令 绑定参数(非必须) 执行命令 第1步 - 创建一个 actionTestDb()方法在 Site ...