汇编语言,数据段中,标号前面加不加offset有什么区别?

data segment
string db 40h dup(0)
string_1 db 'Input characters:',0dh,'$'
data ends

那么,
mov bx,string

mov bx offset string
有什么区别呢?

首先,有区别!但是得分开来说。事实上这个问题的关键不在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
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-06
加了offset附给bx的是string的地址,不加是附的string的值本回答被提问者采纳
相似回答