千年之狐 发表于 2022-5-17 14:13:17

assume伪指令到底有什么用?

后面不是把段的地址赋值给段寄存器了吗?那assume存在的意义是什么?而且,我写了几个程序发现加不加assume确实没什么区别。

豆嘉木 发表于 2022-5-17 16:53:30

assume的作用是让编译器知道在代码段中使用的变量来自于哪个段,从而可以利用段寄存器寻址。而将段地址装入段寄存器的任务仍然是由用户手动完成的

发表于 2022-5-17 18:32:29

assume声明如果把默认段寄存器修改为其它寄存器,会在指令前产生指令的前缀字节,比如assume es:segment name 产生指令的前缀26,表示改变下一条指令的段寄存器为ES段寄存器

千年之狐 发表于 2022-5-17 21:03:52

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

就是说有定义变量的时候才有用是吧,没定义变量就没用了?

豆嘉木 发表于 2022-5-17 21:15:32

千年之狐 发表于 2022-5-17 21:03
就是说有定义变量的时候才有用是吧,没定义变量就没用了?

差不多,我对汇编不是特别了解
(给我个最佳答案呗谢了哥)

千年之狐 发表于 2022-5-17 21:49:43

懂了,感谢各位大佬

竹逸 发表于 2022-5-20 01:36:20

楼主可以试试把用assume声明过的cs段,赋值给ds段或ss段,看看有啥变化

cnjal 发表于 2024-1-15 01:07:55

和你同样的疑惑。最后还是得把SS,DS赋值,那刚开始那个assume不知干嘛用?
而比较奇怪的是,CS不用赋值。

cnjal 发表于 2024-1-15 01:14:19

试了一下,只写:
assume cs:code
而ss, ds不用写,程序正常运行。
我觉得应该assume最主要的作用是生命code segment的起始位置,并且将里面的start赋值给cs;
页: [1]
查看完整版本: assume伪指令到底有什么用?