汇编程序编写的读取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)的更多相关文章

  1. DOS下读取spd信息的汇编程序(通过SMBus)

    汇编程序编写的读取spd信息的代码: ;----------------------------------------------------------- ;功能: 通过SMbus 读取内存的SP ...

  2. DOS下读取PCI配置空间信息的汇编程序(通过IOCF8/IOCFC)

    汇编程序编写的读取PCI配置空间信息的代码(通过IOCF8/IOCFC): ;------------------------------------------------ ;功能: 读取PCI 配 ...

  3. dos下的edit命令使用详解

    dos下的edit命令使用详解 来源:网络 作者:未知 edit命令是一个简单的编辑软件,我们经常用它来编辑一些程序和批处理文件. 比如,我想在c盘根目录下编辑一个简单的批处理文件,要求无论当前盘和当 ...

  4. linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)

     linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...

  5. JAVA设置环境变量和在DOS下运行java程序

    在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...

  6. Windows常用的一些DOS下的CMD命令整理

    Windows常用的一些DOS下的CMD命令整理... -------------- 正斜杠--/////-----向右倒--网址正斜杠反斜杠--\\\\------向左倒--文件路径反斜杠 DOS命 ...

  7. DOS下windows系统查看wifi密码

    DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...

  8. WinCE下读取注册表获得SD路径

    WinCE下读取注册表获得SD路径 [要点]WinCE注册表中[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory\] 下键Folde ...

  9. JAVA手记 JAVA入门(安装+Dos下运行)

    JAVA入门特供= =,今天设置环境变量后用dos运行的时候发现出现“找不到或无法加载主类”,索性查了些资料重新看了看JAVA入门的部分. 声明:我的笔记本暂时用的是Win10系统,Windows其他 ...

随机推荐

  1. 创建genil component

    1: 创建一个类继承 CL_WCF_GENIL_ABSTR_COMPONENT 2:创建 genil _ editor 创建 component, 填入该实现类. 3: genil component ...

  2. Spark中的partition和block的关系

    hdfs中的block是分布式存储的最小单元,类似于盛放文件的盒子,一个文件可能要占多个盒子,但一个盒子里的内容只可能来自同一份文件.假设block设置为128M,你的文件是250M,那么这份文件占3 ...

  3. [py]软件编程知识骨架+py常见数据结构

    认识算法的重要性 - 遇到问题? 学完语言,接到需求,没思路? 1.学会了语言,能读懂别人的代码, 但是自己没解决问题的能力,不能够把实际问题转换为代码,自己写出来.(这是只是学会一门语言的后果),不 ...

  4. Linux命令:lsof

    简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控 ...

  5. 【UML】-NO.43.EBook.5.UML.1.003-【UML 大战需求分析】- 状态机图(State Machine Diagram)

    1.0.0 Summary Tittle:[UML]-NO.43.EBook.1.UML.1.003-[UML 大战需求分析]- 状态机图(State Machine Diagram) Style:D ...

  6. python list成员函数extend与append的区别

    extend 原文解释,是以list中元素形式加入到列表中 extend list by appending elements from the iterable append(obj) 是将整个ob ...

  7. python No tests were found问题解决方法

    由于刚刚开始用python去写测试接口框架,在写的过程中遇到No tests were found问题 原因:python中unittest框架是以Test开头的方法,所以定义方法或类不能以Test开 ...

  8. 32.js 判断当前页面是否被浏览

    可以通过document.hidden属性判断当前页面是否是激活状态. 兼容性:IE10+,Firefox10+,Chrome14+,Opera12.1+,Safari7.1+ 兼容性写法示例: va ...

  9. c#如何判断字符串是否含中文

    如代码: static bool ContainChinese(string input) { string pattern = "[\u4e00-\u9fbb]"; return ...

  10. 向量体系结构(2)----SIMD指令集扩展和GPU

    进行SIMD多媒体扩展的设计,源于一个很容易观察到的事实: 许多多媒体应用程序操作的数据类型比对32位处理器进行针对性优化的数据类型更窄一些. 图像三基色,都是8位.音频采样也都是8位和16位来表示. ...