伪指令的原理

来源:百度知道 编辑:UC知道 时间:2024/05/25 06:04:25
如果说可执行指令是对应机器运作
那么伪指令到底是怎么运作的呢,比如assume
它凭什么给计算机分区域呢?
一楼这个到是蛮有意思,能说说assume转化成代码是什么样的吗?

不要感到迷惑,伪指令是帮助编译程序编译而设置的指令,作用五花八门。
比如段描述符可以指定段起始边界值,段模块化组合属性。数据和变量定义也是用到的伪指令。
这分两个方面,一是我们的程序不只存在机器码,它必须有一些人为规定的文件格式信息,程序之中用到的数据和变量,这些CPU并不执行的东西,然而又是程序所必须的。
还有一个方面,就是编译器在编译的时候需要知道一些预处理命令。不要认为编译器是万能的,实际上写编译器极其复杂,国内也没有几个公司做外包编译器的。编译器经过几遍词法扫描,句法分析等等,中间还要经过临时用堆栈和表格存储,最终才将编译完成。为什么规定汇编立即数的第一个数不能为字母?因为这样可以让编译器省很多事情。
至于assume,也许只有阅读masm的帮助文档才能真正知道它在编译中起到的作用。一个段假如 assume es:XX
那么在这个段里 mov ax,[bx]实际上就会自动编译成mov ax,es:[bx]
如果你有兴趣,著名的《编码的奥秘》和《编译原理》两本书将使你茅塞顿开。
我以为难得休息够早了,没想到各位居然。。。

伪指令是不参与运行的也不会生成什么代码,只在编译过程中有用。
assume是告诉编译器如何改变CS IP,等等...
如:
assume ds:data,cs:code
在内存中数据是没有区别的都是二进制的代码。程序的执行都是靠CS:IP的。所以CS:IP指定的区域就是要执行的指令了。所以编译器会根据你假设的段来设定CS:IP的内容。也就是把程序的入口地址放入这里面...
PS:个人理解,希望有更好的回答、

伪指令,告诉编译器如何进行编译的指令,它既不控制机器的操作,也不被汇编成机器代码,只能为汇编程序所识别并指导编译器如何翻译源程序。

伪指令与指令的最大区别在于,伪指令只在编译时起作用,而指令只能在程序运行时才发挥作用。换句话说,伪指令对编译器说话,而指令则是对CPU说话。

那是编译器的事情,它告诉编译器当前对环境的假设。assume不会转换成代码的!它只是协助编译器。

单片机编码的伪指令 伪指令和机器指令的区别 伪指令 $ 纸币鉴伪的原理 汇编伪指令和汇编语言指令的区别 微机原理伪操作 不可证伪的问题(对证伪"原理"的批判) 请问伪距测量和载波相位测量的原理 伪距定位原理是什么? 微机原理与汇编语言中的指令JMP、CALL的区别