鱼C论坛

 找回密码
 立即注册
查看: 2260|回复: 8

[已解决]assume伪指令到底有什么用?

[复制链接]
发表于 2022-5-17 14:13:17 | 显示全部楼层 |阅读模式

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

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

x
后面不是把段的地址赋值给段寄存器了吗?那assume存在的意义是什么?而且,我写了几个程序发现加不加assume确实没什么区别。
最佳答案
2022-5-17 16:53:30
assume的作用是让编译器知道在代码段中使用的变量来自于哪个段,从而可以利用段寄存器寻址。而将段地址装入段寄存器的任务仍然是由用户手动完成的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-17 16:53:30 | 显示全部楼层    本楼为最佳答案   
assume的作用是让编译器知道在代码段中使用的变量来自于哪个段,从而可以利用段寄存器寻址。而将段地址装入段寄存器的任务仍然是由用户手动完成的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-17 18:32:29 | 显示全部楼层
assume声明如果把默认段寄存器修改为其它寄存器,会在指令前产生指令的前缀字节,比如assume es:segment name 产生指令的前缀26,表示改变下一条指令的段寄存器为ES段寄存器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-17 21:03:52 | 显示全部楼层
豆嘉木 发表于 2022-5-17 16:53
assume的作用是让编译器知道在代码段中使用的变量来自于哪个段,从而可以利用段寄存器寻址。而将段地址装入 ...

就是说有定义变量的时候才有用是吧,没定义变量就没用了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-17 21:15:32 | 显示全部楼层
千年之狐 发表于 2022-5-17 21:03
就是说有定义变量的时候才有用是吧,没定义变量就没用了?

差不多,我对汇编不是特别了解
(给我个最佳答案呗谢了哥)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-17 21:49:43 | 显示全部楼层
懂了,感谢各位大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-20 01:36:20 From FishC Mobile | 显示全部楼层
楼主可以试试把用assume声明过的cs段,赋值给ds段或ss段,看看有啥变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-15 01:07:55 | 显示全部楼层
和你同样的疑惑。最后还是得把SS,DS赋值,那刚开始那个assume不知干嘛用?
而比较奇怪的是,CS不用赋值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-15 01:14:19 | 显示全部楼层
试了一下,只写:
assume cs:code
而ss, ds不用写,程序正常运行。
我觉得应该assume最主要的作用是生命code segment的起始位置,并且将里面的start赋值给cs;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-4 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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