求算术运算式3+4/25*8-6的操作数栈和运算符栈的变化情况,谢谢

 我来答
CodeBlove
2020-04-03 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:242万
展开全部

不存在操作数或运算符要用到栈的情况,原因是因为都是常量,为了提高效率,编译器在编译时已经计算出结果并直接赋值,相当于一般情况的赋值.


如果采用变量运算,也不会涉及栈.唯一用到栈的就是最后赋值的操作:

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的基本功能.

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式