鱼C论坛

 找回密码
 立即注册
查看: 3361|回复: 3

[争议讨论] assume关联不关联的区别

[复制链接]
发表于 2018-12-28 09:13:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
看题: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假设的意义是什么   既然不假设都一样

另外群里有人告诉我 这就是区别:
[var] 如果用assume关联到es
就会加段前缀    es:[var]
不关联就是默认ds:[var]

请老师帮忙解答下上面的意思,最好举例!谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-28 10:02:55 | 显示全部楼层
汇编语言中的ASSUME伪指令(directive)
ASSUME伪指令通知汇编程序为代码段、数据段、附加段以及堆栈段选择什么名字。没有ASSUME伪指令时,汇编程序假设不分段,并自动把段超越前缀用于所有寻址存储器数据的伪指令。ASSUME语句只能用于完整的段定义。
Emu8086中编译器忽略 assume . 必须明确的指明段超越前缀,否则默认为DS。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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:[16] 。
如果 assume es :data ,a的效果就变为了 es :[16]了
这是我试出的作用!!!!!!!!!!!视频讲的不对!!!!你assume放在data段后面也一样编译 ,assume后面没有cs:code 也一样编译

作用大概就是:在使用别的段中的标号时 ,可以绑定‘连接的’(例如ds:data ,ds 和data段连接)段寄存器 。用data段里出现的标号 ,就默认可以挂钩ds
当然你也可以指定段

现在来看assume ,只要你熟悉语法的话 ,你不写也可以编译
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-15 21:46:33 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 01:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表