匯編中的ASSUME的使用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM