openjdk底层(hotspot)汇编指令调用(一)——汇编指令及指令编码基础

汇编指令

计算机在执行过程时只识别代表0或者1的电信号。因此为了让计算机能够执行则须向计算机输入一系列01构成的指令。
例如在x64平台下,0x53,二进制为01010011,表示将rbx寄存器中的值压栈
但是,对于程序员而言,如果每个操作都用二进制数来表示(早期的程序员确实是这样)则会带来2个问题。

  1. 容易出错
  2. 不方便记忆
    为了避免上述的错误,各厂商定义了一系列由英文关键字用来表示二进制指令,这些关键字构成的指令称为汇编指令,或者汇编语言。
    例如,上述0x53在x64下的汇编指令为
push %rbx

如果将上述汇编指令写入汇编文件(.s),经过编译器(gcc)编译后,形成了可被执行的二进制文件,该文件中的对应位置将push %rbx转换为0x53
此时,如果CPU中执行上述指令时,则会将rbx的值压栈。

总而言之,push %rbx一定会转为唯一的二进制指令让CPU执行。

指令编码

上述的汇编指令由英文构成,其中开始部分的关键字称为助记符(mnemonic),后面的被操作对象称为操作数。编译器将根据助记符和操作数按照一定的规则将其翻译成唯一的二进制数供CPU执行。
每个厂商由于其指令集的区别(CISC:复杂指令集;RISC:精简指令集)而有各自的编码规则。
根据x64的手册,其push %rbx的编码规则如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值