汇编中的offset
发布网友
发布时间:2022-04-25 22:56
我来回答
共5个回答
热心网友
时间:2022-05-18 00:27
呵呵,我帮你认真的解释一下:
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。
说明:在以上的解释过程中用"="即等号只是为了表达简洁而以,汇编中没有等号直接写的。
我感觉整个过程解释的蛮详细了,不知道你看明白了吗?呵呵
.
热心网友
时间:2022-05-18 01:45
OFFSET就是取TABLE的偏移地址,但是究竟为什么是这个值没人知道
这是编译器自己安排的
你只要知道OFFSET是取偏移地址的就行了
热心网友
时间:2022-05-18 03:19
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。不知道正确否?
热心网友
时间:2022-05-18 05:11
汇编中的off as a特。
热心网友
时间:2022-05-18 07:19
哈哈...让我想起了大学学汇编课.....不过都忘了