哪位汇编高手指点下小弟offset的功能,最好能详细点,小弟感激不尽!~

哪位汇编高手指点下小弟offset的功能,最好能详细点,小弟感激不尽!~,第1张

OFFSET 其实用起来很简单的,一般就是用来获得标号处相对于程序段其实位置的偏移地址

MOV AX,OFFSET SUB,把SUB所在的偏移地址传送到AX中

JMP SUB1其实等同于 JMP OFFSET SUB1

总的来说OFFSET的功能就是去的标号所在的偏移地址,与其相对应的是标号SEG

SEG是取得标号所在的段地址

assume cs:code

table dw offset s,seg s ;这里用数据标号存放两个字,低位字存放S偏移地址,高位字存放S的段地址。下面用JMP 跳转到S处得标号

code segment

start:

jmp dword ptr table[0];段间转移

db 128 dup (0)

s: mov ax,4c00h

int 21h

code ends

end start

这里有三个概念 你需要明白 1 物理地址 2逻辑地址(有效地址)

3偏移地址

在80x86里 总线接口部件BIU 提供了16双向数据总线 20位地址总线

8086最大寻址1MB的存储空间 但是在CPU 内部寄存器结构都是16位 显然不能满足20位的地址寻址要求 所以就将1MB的空间 划分出若干个逻辑段 每个段最大位64KB 段用一个段地址来标识 段寄存器就是用来存放段的起始地址的 因此 物理地址 有段地址 和 段内偏移量地址两部分组成

有效地址是这样表示的:xxxx:yyyy 前四位是段的起始地址 后四位是 在本段内的偏移地址 就是偏移量 这就是逻辑地址

而物理地址是20位的 它是怎样得到的呢?

使段地址左移一位 这样就成了xxxx0 然后在加上yyyy 这个偏移地址

就得到了 所谓的物理地址了 这样就得到了公式:

物理地址=段地址16(就是相当于左移一位)+偏移地址;

这样说 明白嘛??

呵呵,我帮你认真的解释一下:

TABLE DW 10,20,30,40,50

;第一句的解释:定义以TABLE为首地址的五个数据; DW指字类型,就好像C语言的基本类型

的功能一样,前面的TABLE则是标识符。

ENTRY DW 3

;第二句的解释:道理同上,看懂一的解释二应该也清楚了。

MOV BX,OFFSET TABLE

;第三句的解释:意思是将TABLE的首地址传送给基址寄存器BX,OFFSET +X符识符,

表示取X的首地址,整个语句的寻址方式为立即数寻址,MOV在这语句中

起传送地址的作用此时BX=TABLE(表示地址)

ADD BX,ENTRY

;第四句的解释:BX = BX+0003H =TABLE+3(0003H是3的十六进制也没什么区别)

MOV AX,[BX]

;第五句的解释:BX是一个寄存器,加上"[BX]"就是BX(从上面我们可以看出BX寄存器里面是地址) 这个地址里包含的内容,些时BX=TABLE+3而[TABLE+3]的内容就是1E00H传送给AX

如果看懂上面的文字后,就可以分析AX为什么是1E00H了:

TABBLE的数是这样的存储的:

10——>000AH 逻辑存储——>0A (TABLE+0)位

20——>0014H 00 (TABLE+1)位

30——>001EH 14 (TABLE+2)位

40——>0028H 00 (TABLE+3)位

50——>0032H 1E (TABLE+4)位

00 (TABLE+5)位

。。。 。。。。

从第五句我们可以看到:

AX=[BX]=[TABLE+3]

而汇编有这样的规定,以低位表示一个字,那么加上高位 (TABLE+4)就组成了一个字了,

而[TABLE+4]单元里的内容是:1EH,则高位与低位一同组成字故AX=1E00H。

说明:在以上的解释过程中用"="即等号只是为了表达简洁而以,汇编中没有等号直接写的。

我感觉整个过程解释的蛮详细了,不知道你看明白了吗?呵呵

以上就是关于哪位汇编高手指点下小弟offset的功能,最好能详细点,小弟感激不尽!~全部的内容,包括:哪位汇编高手指点下小弟offset的功能,最好能详细点,小弟感激不尽!~、汇编语言中有效地址和偏移地址的区别、汇编中的offset等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9744657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存