汇编中的offset

TABLE DW 10,20,30,40,50
ENTRY DW 3
……
MOV BX,OFFSET TABLE
ADD BX,ENTRY
MOV AX,[BX]
能不能每句解释下...书上说的太专业了...
AX寄存器中的内容为什么是1E00H?

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

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。
说明:在以上的解释过程中用"="即等号只是为了表达简洁而以,汇编中没有等号直接写的。
我感觉整个过程解释的蛮详细了,不知道你看明白了吗?呵呵

.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-07-07
OFFSET就是取TABLE的偏移地址,但是究竟为什么是这个值没人知道
这是编译器自己安排的

你只要知道OFFSET是取偏移地址的就行了本回答被网友采纳
第2个回答  2015-10-20
mov bx,offset table相当于LEA BX,TABLE。table 是被定义的(10,20,30,40,50)在存储区的符号地址。通过add bx,entry 此时bx储存的有效地址即为(table+3),其内容恰好是AH=30D(1EH),因为AX是16位,所以AL为00H,最终就是1E00H。不知道正确否?
第3个回答  2019-12-23
汇编中的off as a特。
第4个回答  2007-07-07
哈哈...让我想起了大学学汇编课.....不过都忘了
相似回答