DOS下读取smbios的汇编程序(通过搜索memory)
汇编程序编写的读取smbios的代码:
;-------------------------------------------------
;功能: 读取SMBIOS 的Entry Point ,并读取SMBIOS 表的前128-byte
;环境: DOS + MASM5
;时间: 2015/08
;--------------------------------------------------
;功能: 显示ascii 表示的字符
echoch macro ascii
mov ah,
mov dl,ascii
int 21h
endm
;-------------------------------------
.386P
;--------------- data segment ------------------------
dseg segment use16
buff_len =
buff_ep db buff_len dup() ;用来存放entry point的数据
ep_offset dw 0000h ;保存ep在内存f段中的偏移地址
table_add dd 00000000h ;保存SMBIOS 表在内存中的开始地址
buff_tb db buff_len dup() ;用来存放table的数据
dseg ends
;-------------data segment end ------------------------------
;----------------code segment --------------------------
cseg segment use16
assume cs:cseg, ds:dseg
start:
mov ax,dseg
mov ds,ax
;
mov ax,0f000h
mov ds,ax
mov si,0000h ;从F000:[0000]开始搜索内存
continue:
mov eax,ds:[si]
inc si
cmp eax,5f4d535fh ;比较' _SM_' ,这里不能用变量,否则loop 出错?
jnz continue ;没找到,继续
;
dec si
mov ep_offset,si ;ep的偏移地址保存到ep_offset 中
;
;-----------------------------------------------------
;--------------把Entry Point 存到buff_ep中-----------
mov ax,0f000h ;设置源地址
mov ds,ax
mov si,ep_offset
;
mov ax,dseg ;设置目的地址
mov es,ax ;段地址为数据段的段地址
mov di,offset buff_ep ;偏移地址为 buff_ep的偏移地址
;
mov cx,20h ;设置循环次数
cld ;设置si / di 自增
repz movsb ;字符串传送es:[di] <-- ds:[si] , cx--
;---------------------------------------------------------
;-------打印buff_ep的内容(以ascii 形式)----------------
mov ax,dseg ;设置源地址
mov ds,ax ;段地址
mov si,offset buff_ep ;偏移地址
mov cx,20h ;设置循环次数
cld ;设置si 自增
nextline1:
dec cx
echoch 0dh ;换行
echoch 0ah
mov bp, ;每行显示16 字节
nextch1:
lodsb ;字符串加载al <-- ds:[si] , si++
;
push ax
shr al, ;al 的高4位移到低4位
call toascii
echoch al
pop ax
call toascii
echoch al
echoch ' '
;
dec bp
jz nextline1 ;bp == 0 ,jmp
loop nextch1
;-------打印buff_ep的内容(以字符形式)------------------
mov ax,dseg
mov ds,ax
mov si,offset buff_ep
mov cx,20h
cld
nextline2:
dec cx
echoch 0dh
echoch 0ah
mov bp,
nextch2:
lodsb
echoch al
dec bp
jz nextline2
loop nextch2
;--------------------------------------------------------------------
echoch 0dh
echoch 0ah
;---------------读取SMBIOS 的表信息, 存到buff_tb-----------------------------
mov si,ep_offset ;恢复ep在f段中的偏移地址
mov eax,[si+18h] ;得到strucrute table address
;
;关于strucrute table address :
;(1)如果在1M地址空间之外,需要使用保护模式来访问
;(2)这里我们得到的是000e_6dc0
;(3)如果strucrute table address 大于000F_FFFF,
; 下面的程序就会出错,或得到的值不正确
;
mov si,ax ;设置源地址, si = 6dc0
shr eax, ;0000_000e
shl eax, ;0000_e000
mov ds,ax ;ds = e0000
;
mov ax,dseg ;设置目的地址
mov es,ax ;段地址为数据段的段地址
mov di,offset buff_tb ;偏移地址为 buff_tb的偏移地址
mov cx,40h
cld
repz movsb ;es:[di] <-- ds:[si] , cx--
;---------------------------------------------------
;------打印buff_tb的内容(以ascii 形式)--------------
mov ax,dseg
mov ds,ax
mov si,offset buff_tb
mov cx,40h
cld
nextline3:
dec cx
echoch 0dh
echoch 0ah
mov bp,
nextch3:
lodsb
;
push ax
shr al,
call toascii
echoch al
pop ax
call toascii
echoch al
echoch ' '
;
dec bp
jz nextline3
loop nextch3
;------打印buff_ep的内容(以字符形式)---------------
mov ax,dseg
mov ds,ax
mov si,offset buff_tb
mov cx,40h
cld
nextline4:
dec cx
echoch 0dh
echoch 0ah
mov bp,
nextch4:
lodsb
echoch al
dec bp
jz nextline4
loop nextch4
;------------------------------------------------
;---------------返回 dos-----------
mov ah,4ch
int 21h
;----------------------------------------
;函数功能:把al 的低4位转成ascii码,并存入al
;入口参数: al
;出口参数: al
toascii proc
and al,0fh ;高四位清零
add al,90h ;1001_xxxx
daa
adc al,40h
daa
ret
toascii endp
;-------------------------------------------
cseg ends
;------------ code segment end---------------------------------
end start
DOS下读取smbios的汇编程序(通过搜索memory)的更多相关文章
- DOS下读取spd信息的汇编程序(通过SMBus)
汇编程序编写的读取spd信息的代码: ;----------------------------------------------------------- ;功能: 通过SMbus 读取内存的SP ...
- DOS下读取PCI配置空间信息的汇编程序(通过IOCF8/IOCFC)
汇编程序编写的读取PCI配置空间信息的代码(通过IOCF8/IOCFC): ;------------------------------------------------ ;功能: 读取PCI 配 ...
- dos下的edit命令使用详解
dos下的edit命令使用详解 来源:网络 作者:未知 edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件. 比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当 ...
- linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)
linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...
- JAVA设置环境变量和在DOS下运行java程序
在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...
- Windows常用的一些DOS下的CMD命令整理
Windows常用的一些DOS下的CMD命令整理... -------------- 正斜杠--/////-----向右倒--网址正斜杠反斜杠--\\\\------向左倒--文件路径反斜杠 DOS命 ...
- DOS下windows系统查看wifi密码
DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...
- WinCE下读取注册表获得SD路径
WinCE下读取注册表获得SD路径 [要点]WinCE注册表中[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory\] 下键Folde ...
- JAVA手记 JAVA入门(安装+Dos下运行)
JAVA入门特供= =,今天设置环境变量后用dos运行的时候发现出现“找不到或无法加载主类”,索性查了些资料重新看了看JAVA入门的部分. 声明:我的笔记本暂时用的是Win10系统,Windows其他 ...
随机推荐
- 将常用的T-CODE收藏进 文件夹
1:选中文件夹,右键>insert transaction>输入相应的t-code.
- python 内置方法join 给字符串加分隔符
#!/usr/bin/python3 # -*- coding: utf-8 -*- test = "今天吃了吗" test = "_".join(test) ...
- 阿里云香港主机自动换IP
为什么要写这个脚本原因你懂的,现在都是直接封IP pip3 install aliyun-python-sdk-alidns aliyun-python-sdk-domain aliyun-pytho ...
- [LeetCode] 607. Sales Person_Easy tag: SQL
Description Given three tables: salesperson, company, orders.Output all the names in the table sales ...
- canvas 写一个刮刮乐抽奖
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- iOS 新浪微博-4.0 OAuth授权
申请开发者 想要拉到到新浪微博的数据,首先让自己成为开发者.申请成为开发者账号很简单,只要有新浪微博的账号即可. 申请地址:http://open.weibo.com/ 在开发的过程中,我们需要拿到几 ...
- 让bat以管理员权限运行
有的电脑是非管理员登录,运行程序时,需要提示是否运行运行.解决方法如下: @ echo off % % ver|find "5.">nul&&goto :Ad ...
- 014-Session服务器状态保持
开始并为Session赋值:Session[“uName”]=“CNYaoMing”;取值:string strName = Session[“uName”].ToString();销毁(取消/退出) ...
- LeetCode13.罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...
- Visio 保存卡死解决办法
右键Visio图标 属性--兼容性--以兼容模式运行这个程序 要打上对勾 且下面的系统版本要选和你电脑版本一致的选项 特权等级 以管理员身份运行次程序 要打上对勾