assume伪指令到底有什么用?
后面不是把段的地址赋值给段寄存器了吗?那assume存在的意义是什么?而且,我写了几个程序发现加不加assume确实没什么区别。 assume的作用是让编译器知道在代码段中使用的变量来自于哪个段,从而可以利用段寄存器寻址。而将段地址装入段寄存器的任务仍然是由用户手动完成的assume声明如果把默认段寄存器修改为其它寄存器,会在指令前产生指令的前缀字节,比如assume es:segment name 产生指令的前缀26,表示改变下一条指令的段寄存器为ES段寄存器 豆嘉木 发表于 2022-5-17 16:53
assume的作用是让编译器知道在代码段中使用的变量来自于哪个段,从而可以利用段寄存器寻址。而将段地址装入 ...
就是说有定义变量的时候才有用是吧,没定义变量就没用了? 千年之狐 发表于 2022-5-17 21:03
就是说有定义变量的时候才有用是吧,没定义变量就没用了?
差不多,我对汇编不是特别了解
(给我个最佳答案呗谢了哥) 懂了,感谢各位大佬
楼主可以试试把用assume声明过的cs段,赋值给ds段或ss段,看看有啥变化 和你同样的疑惑。最后还是得把SS,DS赋值,那刚开始那个assume不知干嘛用?
而比较奇怪的是,CS不用赋值。 试了一下,只写:
assume cs:code
而ss, ds不用写,程序正常运行。
我觉得应该assume最主要的作用是生命code segment的起始位置,并且将里面的start赋值给cs;
页:
[1]