不同编程语言最终生成的机器码是否一样(汇编语言word ptr)

这个问题问的很好。同样的程序段在操作系统汇编语言word ptr、CPU位数、编绎设置等一致的情况下,结果是一样的。否则,最终的机器码是不相同的。

VS系列,PYTHON,一般的C语言,再编绎时,都最终生成ASM汇编语言,进而以机器码的形式,让计算机识别并最终执行(以下在32位系统下编绎)。此处,我们把a,b两个整数相加,送给整数c,在VS运行环境下,我们看一下c=a+b的机器码、汇编、VS编码的结果,如下图:

从上面可以看出,不论a,b赋值如何,a+

b一>c的代码只有三行,而且是一致的,每一个变量占据4个字节。mov eax,dword ptr [edp-4],mov eax,dword ptr [edp-8]等,标准的X86系列宏汇编语言。可以用下表查到相应的机器码。

这就说明,在同样的运行环境下a+b一>c的汇编码、机器码是一致的。

同样是32位的a+b一>c,在8位、16位等单片机机上,结果是不一样的。因为指令系统不一样。也就是说,在硬件不一致时,机器码是截然不同的。如下图为单片机的编码形式,可以看出MOV A,Rn为11 E8,而MOV A,data 则为21 E5,差异非常大。

总结:在写软件的,首先要考虑运行环境,PC机X86系列还是单片机系列,是在16位、32位还是在64位的操作系统下运行,支持动态还是静态库,支持高速运行还是优化运行等等,在编绎时都要选择好。

只有以上的选项一致了,那么同样的代码,其机器码是绝对一致的。

BYTE PTR和WORD PTR分别是什么意思

BYTE PTR 表示[DI]处一个字节,[DI]表示DI值指定的内存地址处BYTE PTR [DI],0 就是把[DI]处的一个字节填为0,如果是WORD PTR则会把那个地方的两个字节填为0。WORD PTR WORD PTR [SI] ;这是强制定义为字大小mov ds:[si],10f ;这是不允许的操作,因为si指向的空间只有8bit(1byte)大小,所以mov WPRD PTR ds:[SI],10f就是为了告诉CPU mov的源地址是2byte大小的,10f是可以存储进去的.10f需要占用9bit,而存储器内最小空间是1字节所以10f在存储器内需要占用2byte大小的内存空间

以上就是三问网网»汇编语言word ptr,不同编程语言最终生成的机器码是否一样的相关内容了,更多精彩请关注三问网号公众号。

发布于 2022-01-29 22:34:45
收藏
分享
海报
0 条评论
101
上一篇:如何用PPT设计一份营销活动时间轴(时间轴word) 下一篇:如何快速的在word生成漂亮的流程图(如何在word里画流程图)
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码