OFFSET Operator in Assembly language for x86 Processors

ⅰ亾dé卋堺 提交于 2021-02-08 09:18:24

问题


I am rather confused by the concept OFFSET Operator. According to Kip R. Irvine's book Assembly Language for x86 Processors, he defines the Offset Operator as the operator that returns the distance of a variable from the beginning of its enclosing segment. He also says the Offset Operator returns the offset of a data label and that represents the distance (in bytes) of the label from the beginning of the data segment. What is the offset? What does he mean by the distance of the label from the beginning of the data segment? Also, did he come about to this result:

He declares three different types of variables:

.data
bVal  BYTE ?
wVal  WORD ?
dVal  DWORD ?
dVal2 DWORD ?

If bVal were located at offset 00404000 (hexadecimal), the OFFSET operator would return the following values:

mov esi, OFFSET bVal     ;ESI = 00404000h
mov esi, OFFSET wVal     ;ESI = 00404001h
mov esi, OFFSET dVal     ;ESI = 00404003h
mov esi, OFFSET dVal2    ;ESI = 00404007h

Where did he arrive at those values? Please help. Thank you so much!


回答1:


Outside of 16-bit code, on normal OSes, virtual memory is flat, with all the segments having base=0.

So it's just a complicated way to say that OFFSET var gives you the address of var as an immediate, instead of loading from it.

mov esi, bVal          ; load from [bVal], in MASM syntax

mov esi, OFFSET bVal   ; esi= address of bVal
mov esi, [esi]         ; load from [bVal]

See also Assembly difference between [var], and var for the difference between MASM and NASM syntax.




回答2:


The theory of offset means,"An offset is the number of address location in based address in order to go to the specifice absolute address.".So,it look like an index (a data item or a field) of an array (a data element or a block or a frame).An offset indicate the distance between data item and data element.All items of an element are the same size (typically given in bytes or words).

So,in your case,".data" is a memory segment or a block or an element and variables in this segment are data items or offsets.This offsets are virtual address of the space of the non-contiguous areas of physical memory.So,this numbers represent the virtual address of the space of the non-contiguous areas of physical memory.



来源:https://stackoverflow.com/questions/39482404/offset-operator-in-assembly-language-for-x86-processors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!