汇编程序编写的读取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. Dell服务器Raid5之后安装系统

    在做raid之后,安装系统.竟然安装不成功! 百度之后,发现第一启动项是raid的硬盘,不是我本机的ssd. 报错如下: 启动机器F2—boot setting 如果引导模式是UEFI 换成了bios ...

  2. java.lang.UnsatisfiedLinkError: dlopen failed: library "libsqlite.so" not found

    项目在7.0以下系统的手机上运行正常,但在7.0的手机上运行异常. 出现这个问题的原因是:从 Android 7.0 开始,Android系统将阻止应用动态链接非公开 NDK 库. 解决方法有两种 第 ...

  3. 网络编程——socket编程

    一.客户端/服务端架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网企业处处是C/S架构 C/S架构与socket的关系:学习socket就是为了完成C/S架构的开发 二.OSI七层 一个 ...

  4. 【LeetCode每天一题】Remove Nth Node From End of List(移除链表倒数第N个节点)

    Given a linked list, remove the n-th node from the end of list and return its head. Example:        ...

  5. gem安装出错了

    1.首先是SSL出错. SSL 证书错误 正常情况下,你是不会遇到 SSL 证书错误的,除非你的 Ruby 安装方式不正确. 如果遇到 SSL 证书问题,你又无法解决,请修改 ~/.gemrc 文件, ...

  6. Groovy动态解析

    A:前面需要说些什么吗? B:不需要吗? A:需要吗? 解析方式一:通过指定的paths来初始化GroovyScriptEngine //通过指定的paths来初始化GroovyScriptEngin ...

  7. php __FILE__ symlink

    定义 __FILE__ 是一个魔法变量(预定义常量),当前运行文件的完整路径(真是文件路径,非软链路径)和文件名.如果用在被包含文件中,则返回被包含的文件名. 官方解释:  __FILE__  文件的 ...

  8. 使用 nghttpx 搭建 HTTP/2 代理 (转)

    来自http://www.fanyue.info/2015/08/nghttpx-http2.html 使用 nghttpx 搭建 HTTP/2 代理 [转] HTTP/1.1,定义于 1999 年, ...

  9. 把Web Services生成服务器端C#、VB。或者接口

    什么是Web Services? Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-contained)并可自我描 ...

  10. HttpServletRequest常用方法

    1.获取客户机信息 getRequestURL:该方法返回客户端发出请求时的完整URL getRequestURI:该方法返回请求行中的资源名部分 getQueryString:该方法返回请求中的参数 ...