assume关联不关联的区别
看题:1assume cs:a,ds:b,ss:c
b segment
dw 0123h,0456h
b ends
c segment
dw 0,0
c ends
a segment
start:
......
a ends
end start
看题2
assume cs:a(并没有为下面的段名和CPU的各段寄存器相关联)
b segment
dw 0123h,0456h
b ends
c segment
dw 0,0
c ends
a segment
start:
......
a ends
end start
我想问问各位老师 这里用assume假设和不假设的区别在哪里 因为前面章节都假设了 ,后面章节突然又没了 ,书上也没写为什么,实在没搞懂到底assume假设的意义是什么 既然不假设都一样
另外群里有人告诉我 这就是区别:
如果用assume关联到es
就会加段前缀 es:
不关联就是默认ds:
请老师帮忙解答下上面的意思,最好举例!谢谢了
汇编语言中的ASSUME伪指令(directive)
ASSUME伪指令通知汇编程序为代码段、数据段、附加段以及堆栈段选择什么名字。没有ASSUME伪指令时,汇编程序假设不分段,并自动把段超越前缀用于所有寻址存储器数据的伪指令。ASSUME语句只能用于完整的段定义。
Emu8086中编译器忽略 assume . 必须明确的指明段超越前缀,否则默认为DS。
assume ds:data
在使用data段的标号时 (假设 ‘a’ 是data段的标号 ,并且a的偏移地址是 0010h(不为0,好参考)) ,
并且
mov ax ,data
mov ds ,ax 后
那么在使用 mov ax ,a 时 ,a的效果是 ds: 。
如果 assume es :data ,a的效果就变为了 es :了
这是我试出的作用!!!!!!!!!!!视频讲的不对!!!!你assume放在data段后面也一样编译 ,assume后面没有cs:code 也一样编译
作用大概就是:在使用别的段中的标号时 ,可以绑定‘连接的’(例如ds:data ,ds 和data段连接)段寄存器 。用data段里出现的标号 ,就默认可以挂钩ds
当然你也可以指定段
现在来看assume ,只要你熟悉语法的话 ,你不写也可以编译
看看
页:
[1]