求算术运算式3+4/25*8-6的操作数栈和运算符栈的变化情况,谢谢
展开全部
不存在操作数或运算符要用到栈的情况,原因是因为都是常量,为了提高效率,编译器在编译时已经计算出结果并直接赋值,相当于一般情况的赋值.
如果采用变量运算,也不会涉及栈.唯一用到栈的就是最后赋值的操作:
mov dword ptr [v],0FFFFFFFDh
该汇编指令意思为将-3存入v,数据宽度为双字,即4字节.[v]表示源代码中变量v所代表的地址.ptr表示以指针方式访问地址.其中-3的16进制为FFFF FFFF FFFF FFFD
看汇编码
可以看到v=3+4/25*8-6相当于v=-3,但是如果参数是变量时会用到栈空间,计算都是在寄存器中进行,最终也是存到v.其中几个指令含义如下:
CDQ:扩展64字节,数值不变
IDIV :带符号除法指令
IMUL:带符号乘
ADD:加法
SUB:减法
操作数和运算符的优先级解析由编译器在编译时完成,程序执行时不会进行入栈退栈过程,编译时会进行优化指令,直接给出机器码,程序运行时由CPU顺序执行,因为算术运算是CPU的基本功能.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询