00:00
那刚才呢,咱们讲这个算术指令的时候呢,是我在咱们这个idea当中呢,就是手动画了几个简易的图啊,有的同学可能感觉画的不是特别清晰,因为我们要画这个完整图的话,还比较复杂一些是吧,所以这块呢,我找了几个现成的这个例子,那其中呢,有两个例子呢,也是在咱们讲上天的时候呢,带着大家呢一块儿来看过的这个例子,这块呢,咱们也做一个复习啊,整个呢目的呢,就是还是大家熟悉就可以,对吧,很熟悉就可以,至于说呢,我们这个例子呢,是咱先写的还是找的几几个现成的,这个都还好。OK,首先我们看第一个相对来说简单一些,这里边呢,跟咱们刚才写的这个程序呢类似,就是一些加减程度运算对吧?好,那这块我们怎么看待这个问题,这里呢,我们去调这个bar的方法,从这个图上来看的话,我们附了一个I的值是五。负了一个I的值是无,我这呢是一个静态的,所以说呢,我们这个局部变量表,这个绿色的是这个局部变量表啊,局部变量表的话呢,不会有那个索引零的位置是这次了,因为是静态的嘛,所以就不会涉及到这个问题,那索引为零的位置是谁呢?就是我们这里边儿这个I。
01:04
就这I我们调这个bar这个方法的时候,给这个值呢,负了一个值叫五,所以呢,我们进来之后,这个所以为零,这个位置呢,就是一个五这个数,然后在里边呢做运算。下边呢,就是我们这些具体的指令,那I漏的零,就是我们将角标零的这个位置呢,把它放在是不是操作站当中,对吧,这块操作站呢,就横着放了,那首先呢零呃角标零,那就把这个五呢给他拿过来。然后接下来呢,我们又定义了一个常量,这个常量叫一,那把这一呢也放进来,I的它俩呢都出去,都出去之后呢,做一个和是六,六呢再放回来,然后接着呢又I2又定义了一个常量叫做二不是就刚才加一完了以后是不是有个二是吧,二完了以后呢,这两个做一个减法操作,就是这个减的操作,它俩都出去减法以后呢是四,把这个四呢再拿回来。这个就相当于到这儿结果已经算完了,接着再放一个ICON3,把三呢又放进去。放完以后呢,这个有一个乘法,那就相当于它俩呢都除去做一个乘法,就I multiply,乘完之后呢,把结果又放回来12,然后再放一个常量是四。
02:08
ICON4把这个四呢放过来,这个四呢不是索引,是数据的意思,它俩呢做一个除法,12除以四得三,把这个三呢还放到咱们的这个操作站当中,然后最后呢,也没有说附一个新的变量,所以不涉及到往这个U变量表里边再写入了,直接呢就是一个return,这个结果呢,因为是一个int类型,所以这呢叫I return。就是I int类型的一个return行,这呢就我们说的第一个例子,然后咱们再回顾一下这个咱们讲上篇的时候呢,哎,带着大家呢,其实有看过这个例子,包括下边这个例子。那这两例的话呢,大家可以在呃炒冷饭是吧,再看一下。其实呢,也比较简单啊,这呢比我们刚才上面一个问题还要简单。这个呢是一个15,这是个八,我们在执行这个方法的时候呢,是一个非静态的,所以呢,这个局部变量表,它其实呃,局部变量表这个角标零的位置呢,就放在这次这块呢,省略的那个零了,是从这个一开始来写的,哎,这个PUSH15是把15呢,这不就扔进来放到这儿呗,然后再接着呢,这个错了,这个先是BI push是先到我们这个操作数站里边,对吧,这个15,然后下边呢,这个store的时候呢,把这个值呢,就放到我们局变量表里了,这就没有了。
03:21
然再接着呢,BI push个八,八就放在操作站,然后再到二放到这儿没问题对吧?然后下边呢,做一个加载,把这个15加过来,再把这个八加过来,他俩呢做一个加法操作出站23 23呢再压入我们这个操作站,然后呢,存储在我们角标为三的这个位置,角为三位置,这就23,因为这块我们是不是又赋给一个新的变量啊,哎,没问题是吧?好,这个比较简单啊,然后下边这个呢,其实也类似,那我这块呢,就不带着大家呢这样去过了,这个呢是咱们前面讲上篇的时候呢,讲这个占讲这个方法区,那个时候呢,带着大家呢,就是提的问题,当时我们重点关注的是内存结构,那现在的话呢,咱们主要关注的是不是就是这个。
04:04
哎,指令了对吧。这个关注点呢是不一样子的,这块给大家稍微强调一下,什么问题呢?你看这儿就是我们在system.out调printline的一个方法的时候,你看最后我们上面是有一个,呃,有个A有个B,然后A有一个加B的操作,咱们直接蹦到这块来说一下。往下找。嗯,这个I再往下。行,那我们这里边呢,也有一个值是50,嗯,是它吧。这个I6的四对一个值呢是50,一个值是五,然后它俩呢,做一个加法的操作,那就变成55了,加完以后呢,我们接下来就相当于我们这里边儿这个,嗯,这个值和上面这个值,它俩做一个加法,加完以后的这个数据呢,还是得放到咱们的操作数站当中,没问题。这呢确实还在操作站当中,然后呢,我们下边是不是调了一个system.out.print方法,这个print方法你注意这是不是叫invo virtual,咱们下边会讲这个方法调用的时候这个指令,那这时候咱们是不是是不是又调了一个新的叫print方法呀?
05:16
对吧,那print方法大家注意,这是一个新的方法,那既然是一个新的方法,那我们就意味着是不是有一个新的战争呢。还是这个虚拟战对吧,这个虚拟战里边呢,我们就有一个新的战争,就是我们这里边儿这个绿色的部分,那新的战争里边我们放的是什么呢?你这个55是不是就作为那个十参,把这个数据又传递到我们这个方法的那个参数位置了,人家那个位置呢,在具体的这个本地变量表里边有个位置,那个位置呢,那个值是多少呢?你这个呢,是不是把这个55就给人家拿过去了。就这个道理,注意这开辟一个新的战争的这个事儿,大家要注意,那这个操作完之后呢,普方法执行完以后,它是一个没有返回值的这个方法,那其实呢,就最后默默的就有一个return,这个return的话呢,我们这个呃,战争的话是不是就结束了,对吧?他结束完以后呢,又回回到我们这个may方法当中,May方法后边也没有东西了,那这个may方法呢,也return了。
06:11
哎,就是这样的道理,行,那这呢是咱们前面讲过的这个例子,哎,这块呢,大家再稍微的去熟悉一下啊,再熟悉一下。
我来说两句