offset汇编(汇编语言的操作符offset具体有什么用求详细解答)

本文目录
- 汇编语言的操作符offset具体有什么用求详细解答
- 汇编语言中的 offset什么意思
- 汇编中的offset
- 汇编offset
- 汇编 offfset有什么含义
- 汇编中OFFSET的用法和所指内容
- 汇编语言,数据段中,标号前面加不加offset有什么区别
汇编语言的操作符offset具体有什么用求详细解答
汇编语言的操作符offset具体用法:
简单说,是指一个地址。
如:
MESS DB ’HELLO!’
显然,MESS是一个地址,它存放着“HELLO”这个字符串。
如何将MESS的地址放入DX寄存器呢,可用两种不同的指令:
1、 LEA DX,MESS
2、 MOV DX,OFFSET MESS
他们的作用是等价的。
汇编语言中的 offset什么意思
1、OFFSET是将数值回送变量或标号的偏移地址值.
2.LEA是将数值回送变量或标号的有效地址值.
3.SEG, 汇编程序将回送变量或标号的段地址值.
4、LEA BX,LIST
5、MOV BX,OFFSET LIST
6、可以看出,LEA和OFFSET这两条指令在功能上是相同的,BX寄存器都可得到符号地址LIST的值,而且此时MOV指令的执行速度会比LEA指令更快。但是,OFFSET只能与简单的符号地址相连,而不能和诸如LIST[SI]或[SI]等复杂操作数相连。因此,LEA指令在取得访问变量的工具方面是很有用的。
汇编中的offset
呵呵,我帮你认真的解释一下:
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
dx中存放的是字符串’C:\test.txt’的首地址
设有str=“C:\test.txt“
则有DX中的值相当于 C语言中的 str,即&str
一般汇编中处理文件的中断都是把弄文件名的字符串的首地址放在DX中
汇编 offfset有什么含义
offset是指相对于某个参照点的偏移量。
offset是汇编语言中的算符,作用于一个代表内存地址的操作数,返回它的段内偏移量。
比如,变量Y在数据段中,段地址是200H,段内偏移地址是2300H,在Y中存放的数据是1234H。
那么:
MOV AX, Y ; 这将1234H传送到AX中
MOV AX, OFFSET Y ; 这将2300H传送到AX中
MOV AX, SEG Y ; 这将200H传送到AX中
汇编中OFFSET的用法和所指内容
offset的用法,以前push的都是地址或者寄存器地址,现在那些字符串地址咱可没有。
于是就用offset关键字来得到这些字符串的偏移地址,从而引用字符串。从而可以push。
当然 invoke中用 addr ,addr多明显就是address地址的意思。
OFFSET(reference,rows,cols,height,width) offset 在汇编中可以获得操作数的偏移地址。用法: 例如:平时invoke MessageBox,NULL,addr sztext,addr szcaption,MB_OK
汇编语言,数据段中,标号前面加不加offset有什么区别
首先,有区别!但是得分开来说。事实上这个问题的关键不在offset ,而在offset后面跟的标号是段还是段内。
;offset 的作用举例
;offset 加与不加有区别吗
;分几种情况,dataseg标号,start:加冒号的标号,变量标号
assume ds:dataseg
dataseg segment
bianliang dw 1234h ;变量标号,包含段地址和偏移地址
dataseg ends ;dataseg标号,包含段地址和本段代码长度信息
codeseg segment
dw 0ffffh
start: ;带冒号的标号,包含段地址和偏移地址
mov ax,dataseg ;得到的是段地址
mov ax,offset dataseg ;得到的是本段代码长度
mov ax,start ;得到的是偏移地址
mov ax,offset start ;得到的是偏移地址
mov ax,bianliang ;得到的是内存地址中的内容
mov ax,offset bianliang ;得到的是偏移地址
mov ax,seg bianliang ;得到的是段地址
mov ax,seg start ;并且是不取自当前段寄存器的值的,正确的段地址
mov ax,seg dataseg ;同样是段地址
mov ax,4c00h
int 21h
codeseg ends
end start

更多文章:
another time(another time和other time的区别)
2026年10月11日 05:00







