汇编程序编写的读取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. 将常用的T-CODE收藏进 文件夹

    1:选中文件夹,右键>insert transaction>输入相应的t-code.

  2. python 内置方法join 给字符串加分隔符

    #!/usr/bin/python3 # -*- coding: utf-8 -*- test = "今天吃了吗" test = "_".join(test) ...

  3. 阿里云香港主机自动换IP

    为什么要写这个脚本原因你懂的,现在都是直接封IP pip3 install aliyun-python-sdk-alidns aliyun-python-sdk-domain aliyun-pytho ...

  4. [LeetCode] 607. Sales Person_Easy tag: SQL

    Description Given three tables: salesperson, company, orders.Output all the names in the table sales ...

  5. canvas 写一个刮刮乐抽奖

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. iOS 新浪微博-4.0 OAuth授权

    申请开发者 想要拉到到新浪微博的数据,首先让自己成为开发者.申请成为开发者账号很简单,只要有新浪微博的账号即可. 申请地址:http://open.weibo.com/ 在开发的过程中,我们需要拿到几 ...

  7. 让bat以管理员权限运行

    有的电脑是非管理员登录,运行程序时,需要提示是否运行运行.解决方法如下: @ echo off % % ver|find "5.">nul&&goto :Ad ...

  8. 014-Session服务器状态保持

    开始并为Session赋值:Session[“uName”]=“CNYaoMing”;取值:string strName = Session[“uName”].ToString();销毁(取消/退出) ...

  9. LeetCode13.罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  10. Visio 保存卡死解决办法

    右键Visio图标 属性--兼容性--以兼容模式运行这个程序 要打上对勾  且下面的系统版本要选和你电脑版本一致的选项 特权等级   以管理员身份运行次程序  要打上对勾