java虚拟机是什么,字节码是什么,解释器是什么,指令集是什么

1、虚拟机是什么呢。

(1) 什么是指令集?
指令集就是一台计算机或者是具有相同系统架构的组合(软件+硬件)的全部指令集合,或者换一种说法就是一种给定计算机体系结构所包含的所有指令集合
指令集分为2种形式,一种是我们人为编写的,另外一种是我们计算机所能识别的
简单讲下具有代表性的指令集:
1、ARM 随着智能手机的研发2011年以后成为最流行的指令集,ARM架构相对于X86架构更省电,所以我们手机上用的百分之95以上都是ARM架构,

前段时间国外封杀华为,华为说我们不卖给我们芯片,我们自己造芯片(麒麟海思),结果安卓说不对华为进行授权,华为说你不授权,我自己做系统,只能搞鸿蒙了,结果人家ARM不授权给华为了,华为没办法了这个时候只能搞RISC架构了,最终只能在RISC(海思。麒麟就是在这种架构上扩展的)架构上进行深埋了,其实因特尔也想在X86(X86有很多缺点,耗电快,芯片老化。其他毛病等等)上进行改进,但是庞大的生态已经建立了,再改进的话原来很多兼容的设备就不能用了,现在也是进退两难的地步,有兴趣的可以多了解了解AMD和Inter的历史就知道了
2、RISC-V
3、MIPS
4、 X86架构 在PC电脑时代占有统治地位

该指令集是MIPS指令集的一部分,其中执行无符号加法运算的是图中划线的
将2个寄存器中的数进行加法运算结果保存到第三个寄存器中。

毫无疑问的是任何计算机都必须能够执行算术运算的指令
add a b c 表示把变量a 和 变量 c相加 放入到变量 a中
在MIPS指令中,每条算术指令只执行一个操作,并且有且仅有3个变量。
例如要将 b 、 c 、d 、e相加后的结果放入到a 中
要执行的指令如下

add a ,b, c 把b+c 的和放入到a中
add a, a ,d 把a加 d 的和 覆盖原来的 a(其中第2个a,或者第一个a这个时候会用一个单独的寄存器进行保存或者其他方式保存,之力不详细追究)
add a, a ,e
下面将就一条C语言的编译进行展示
例如C语言:
f=(g+h)-(i+j);
那么上面的C编译器将产生什么样的MIPS汇编语言代码?
因为一条MIPS指令仅执行一个操作,所以编译器会把这条C语句编译成多条汇编指令,上面说过一条MIPS指令只能有3个变量,
那么假如从g+h开始
g+h的结果必然需要编译器创建一个临时变量进行储存
变量 t0:
add t0 ,g,h
虽然下面要开始做减法,但是在做减法之前需要先做加法
变量t1:
add t1,i,j
最后做减法指令
sub f,t0,t1

那么在java中为了增强可移植性,java最初被设定为依靠软件解释器执行的语言,什么意思呢:
就是我们操作系统+硬件表示的就是一个美国人
我们java语言所编写的代码(.java文件)经过编译后生成.class文件是个中国人
这个时候中国人和美国人之间语言不通是无法交流的
这个时候我们需要一个翻译进行翻译,翻译从中国人那里知道.class是什么意思后经过他自己认为正确后,经过一定的规则后又把他翻译为英语
美国人拿到这个英语后,他说他读懂了,他照着这个,就去办事了,也就是这个时候我们电脑读懂了,进行相应的操作。
解释器的指令集称作为java字节码,他与MIPS指令集有很大不同,为了使性能与等效功能的C程序接近,java系统现在典型的做法是将字节码编译成类似MIPS这样的机器指令。因为通常java完成编译的时间迟于C,所以java编译器称为即时编译器
下面解释下MIPS汇编语言转化为机器指令的原理
add t 0 , t0, t0,s1,$s2

计算机中的硬件操作数?

与高级语言有所不同的,MIPS算术运算指令的操作数是很严格的,他们必须来自于寄存器,寄存器是由硬件直接构造的数量是有限的,是计算机硬件设计的基本元素,寄存器对程序猿是可见的,在MIPS体系结构中,寄存器的大小为32位,由于32位为组的情况经常出现,所以在MIPS体系结构中将其称之为字(Word)

高级语言的变量与寄存器的一个主要区别是,寄存器的数量有限,MIPS一类的典型计算机有32个寄存器
寄存器的个数为32的理由可以表示为硬件设计的3条基本原则中的第2条:
越小越快
因为大量的寄存器,可能会使时钟周期变长,因为电信号传输更远距离,
当然也不绝对,但是在数量和时间的取舍值得我们探讨和思考,所以设计者必须在权衡在希望获得更多的寄存器和程序运行速度以及程序设计的复杂度中进行取舍权衡,另外一个不使用多余32个寄存器的原则是,受指令格式位数的限制,
1、存储器操作数:
储存在存储器中的,具体自己看书,这里不多写了
2、常数1或立即数操作数
计算机中的指令表示:
指令在计算机内部是以或高或低的电信号所表示的,在形式上和数的表示相同,实际上指令的各个部分都是一个独立的数,将这些独立的数合在一起就形成了指令
因为所有的指令都需要用到寄存器。所以就把寄存器的名字映射为数字
例如 s 0   s0~ s0 s7映射到16-23, t 1 映 射 到 9 , t1映射到9, t19t0表示寄存器8等等。
下面以MIPS汇编语言为例,对于符号为:
add t 0 , t0, t0,s1,$s2 的指令 其10进制指令格式如下
10进制![你好](https://img-blog.csdnimg.cn/20210629015757318.png)2进制:

机器指令分为若干个字段,本例中第一个字段0和最后一个字段32表示告诉MIPS计算机我这条指令是要执行加法运算,第二个字段和第三个字段以及第4个字段分别表示执行加法的第一个操作数,第二个操作数以及存放结果的操作数,这些操作数的10进制表示就是寄存器的编号,通过具体的编号映射到相应的寄存器名称,有的寄存器是通用寄存器,有的寄存器中方的就是立即数(也就是常数例如0、1、2、4、5、6、7、8、9)等,除此之外的数可以通过存储器取到寄存器中进行操作,MISP架构中一个寄存器是32位,但是在别的指令集中可以有64位、128位等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值