zgczgm 发表于 2018-12-28 09:13:50

assume关联不关联的区别

看题:1
assume 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:

请老师帮忙解答下上面的意思,最好举例!谢谢了

zgczgm 发表于 2018-12-28 10:02:55

汇编语言中的ASSUME伪指令(directive)
ASSUME伪指令通知汇编程序为代码段、数据段、附加段以及堆栈段选择什么名字。没有ASSUME伪指令时,汇编程序假设不分段,并自动把段超越前缀用于所有寻址存储器数据的伪指令。ASSUME语句只能用于完整的段定义。
Emu8086中编译器忽略 assume . 必须明确的指明段超越前缀,否则默认为DS。

丨游戏灬需要 发表于 2019-1-31 15:26:41

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 ,只要你熟悉语法的话 ,你不写也可以编译

gang19840815 发表于 2020-2-15 21:46:33

看看
页: [1]
查看完整版本: assume关联不关联的区别