码迷,mamicode.com
首页 > 其他好文 > 详细

汇编中的ASSUME的使用

时间:2014-11-26 18:37:56      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:style   ar   os   使用   sp   art   ad   as   line   

assume 最典型的用法:是指明变量与段寄存器的联系,比如 assume ds:data,它是告诉编译器以后所有在data段中定义的变量寻址时,使用ds作为段地址,但是它不对程序作任何事,比如你必须自己对ds赋值,这也就是为什么dos下典型的汇编段如下:
.data
  ........
.code
  ........
  assume cs:code,ds:data
start: .......
  mov ax,data
  mov ds,ax
  ...
ends
end start

它也经常用来将寄存器当作结构体指针来用

ASSUME edx:ptr STRUCT ;将edx 定义为STRUCT指针变量
把STRUCT结构体的起始地址给edx
lea edx, STRUCT ;用 [edx].调用STRUCT的字段
ASSUME edx:nothing ;取消定义 这个时候edx 不是指针 [edx].不能调用字段了

实例: 参见《Windows PE权威指南》
BookStrore STRUCT
  Name db 8 dup(8);书库的名字
  Address dd ? ;书库所在地址
  Count dd ? ;书库中藏书量
BookStrore ENDS

name1 db "书库1",0
lib1 BookStrore <?>

move ebx ,lib1
assume ebx:ptr BookStrore;
invoke memcpy,[ebx].Name,add name1 (此处跟书上有略微不同)
mov eax,12345h
mov [ebx].Address ,eax;
mov eax, 2
mov [ebx].Count, eax
assume ebx:nothing

汇编中的ASSUME的使用

标签:style   ar   os   使用   sp   art   ad   as   line   

原文地址:http://www.cnblogs.com/tiantianchaoren/p/4123688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!