00:00
下边咱们就按照这个具体的这个类型呢,分别来看一下,首先第一类呢,叫做局部变量呢压站指令,那局变量压站指令呢,这里边主要涉及到是两类啊,或者准确的说呢,也是就只有一类是吧,只不过呢,就是我们这呢区分成具体有带角标的这种情况了,这个X呢,就是我们刚才提到了IFDA,大家把这几个呢记一下。啊,就是理解的记忆也行,或者你这个念的熟一点,能说出来都可以啊,那刚才也提到了,它的主要的操作呢,就是将局部变量表当中第N个索引位置上这个数据呢,把它压入到这个操作式站当中,那数据的话呢,有具体的类型,那你就看这个类型呢,用前面这个X呢来表示就可以了,对吧?那就这个意思,那如果这个N呢,超过了这个角标三了,我们就使用一个呃叫操作码,再配上一个操作数这样的方式啊这个都比较清楚,那下边的话,咱们就主要呢来看一些这个代码。然后关于我们这个指令这块讲解的话呢,提前我这块都已经呃写好了一些这个代码了,那就是精心设计的,就是为了能够更好的演示咱们当前这些指令,而且尽量的在讲前一个指令的时候呢,咱们尽量的规避掉后续这些指令,所以呢,这时候在设计的时候呢,不是特别好弄啊,因为很多这个指令我们讲前边的时候呢,它得用到后边的,你要是先讲后边呢,它用到前边呢,相互交错在一起,所以尽量的把这个事儿呢避开,实在避不开呢,咱们也提前给大家说一下就行。
01:25
好,那么关于加载与存储指令呢,这里边我写了几个操作,咱们先关注于第一个叫局部变量的压站指令,这呢我写了一个漏的方法,哎,有几个参数啊,你看这时候我为什么要设计这样的几个类型,那像这个int型,Object类型,Long类型啊,这呢,就算是我们这个重点呢,常见的这几种类型,对吧,后边呢,就涉及到呢,比较特别的一个类型,那我们就来看一下,这里边儿我们首先做一个re compel做一个编译。生成磁解码文件以后呢,我们此时呢,来看一下这个整体的结构,然后在我们方法这块找到我们这个叫漏,然后把这个code呢这块,呃整体就是它呗,是把它呢我们CTRLC一下啊这这块进行分析的话呢,我提前呢写了一个这个Excel啊,这个Excel里边的话呢,主要我们关心的就是局部变量表和这个操作数站到底是做什么事的,那这呢,咱们把这个。
02:17
刚才编译以后生成的这个。哎,自己码指令,我们通过的这个接lab呢,又进行了一个反解析或者叫反编译,咱把这个呢放到这儿啊,稍微的变大一点。嗯,再小一点吧,行,那这样的话呢,我们来进行一个分析啊,大家来看一下。这个get static啊,因为呢,我们这里边呢,是就上来呢,这不你要执行这个方法体嘛,一上来咱们因为要进行一个printline输出,对吧,那输出的话呢,我们这个方法呢,是在咱们的这个system.out这个属性为代表的是打印流这里边,所以首先呢,是获取一下我们这个静态的这个alt这个结构这块呢,咱们就给它过滤掉了,咱们后边呢,专门说掉这个静态的结构的问题啊,那上来呢,你看这有一个叫ILO的下划线一,那就表示呢,从我们这个局部变量表角标为一的位置,把这个数据呢,是不是放到我们这个操作数站里边吧。
03:16
对吧,那那这时候呢,我们去微量表呢,肯定是提前都已经有一些数据了,那这个数据到底都是什么呢?哎,这个咱们可以自己来,哎,这个分析一下。我呢,把这个方法这块也粘一下。放在这儿好,那对于咱们当前这个类来讲,此时这个方法呢,是一个非静态的,那我们局部变量表角标零的位置呢,咱们放的呢,就是一个Z。这个放的就是个this啊,这个我们。嗯,行就就按左边这块吧。类型这块我们写一个。哎,通常的习惯上用这个类型的。哎,用这个类型啊。嗯,好,那第一个位置呢,就是个Z,然后接下来的话呢,依次其实就是我们这些类型了,你第二个呢,是不是放的就是这个number。
04:07
它第三个呢,就是我们这个obj啊,下边这个啊count,诶这块呢,大家稍微留意一下了,我们这个count的话呢,你看它是一个long类型,它是不是要占两个槽位啊,所以这块呢,其实就合在一起了啊,就是这样一个合并了,然后第五个位置呢是flag。嗯,然后第六个位置,这又是一个引用类型,它占的是四个字节,是AR对吧,那是这样的一个场景,好,那我们把它呢,就没有这个方法题里边,因为也没有定义额外的变量,所以呢,整体就长这样子,那咱们也可以呢,对照一下,看看咱们刚才说的这个对不对,在扣子里边呢,又有一个局部变量表。把这个呢,我们截个图。那这时候大家对照一下,你看看这个index,看看零是不是就这次,然后1NUMBER2呢,OBJ3是COUNT3完了以后就五了,因为它这个long类型,所以它就占两个槽位,后边的五是flag利用的是AR,对吧?OK,没有问题,行,这是咱们做一个校验啊,然后的话呢,有了这样一个场景之后呢,咱们下边看一下,此时呢,咱们把这个I漏的。
05:16
这个下划线一相当于呢,是一个int类型的,从局部变量表角标为一这个位置上,把这个number呢给它取出来,那这个操作站呢,是一个站结构,嗯,这个入站呢,或者叫压站是从这儿,然后出站呢也是在这儿,嗯,所以呢,这是一端进出是吧?然后我们要放的话呢,是不是得放到这个最下边这块了,那这块你放的是谁,是不是就我们这个number对吧。嗯,这个我们把它类型也改一下。行,那我把这个number呢,就相当于是放在这儿了,然后接下来下边呢,就是我们对应的去print line去打印,打印的话呢,就把我们这个number对应的这个值啊,这个值呢就给它打印出来,咱们调这个方法的时候,会传这个十参对吧?行,这就过了,然后再下边呢,就是。A漏的下线二对,我们取角标二,这个角标二的话呢,是一个营类型的,所以用A来表示嘛,那这是一个obj,那其实就把这个OB是不是就放这了。
06:09
货币接就放这了是吧?啊其实这时候呢,我们相当于啥意思呢?就是咱们这块呢,就做了一个操作,这个操作完之后呢,其实这个呃,Number的话呢,就也出去了,就啊就也出去了,我这块呢,就叠着往上写了啊然后呢,再往后的话呢,这是l load3。嗯,角标三那就落到这儿了,是一个l long类型,那这块呢,就是一个count呗。嗯,这是不是有个count呀,没问题对吧,那这是一个count,然后再往下的话呢,是ILO5I65就它嘛,这个你看注意咱们这个flag的话呢,我定义的是不是一个布尔类型啊。那为什么我这块写ball类型,就是想让大家体现一下,对于BAT char short ball类型,这个咱们在处理的时候呢,你看这块同样的显示的是不是都是这个I对吧?哎,显示都是这个I,这是一个,另外呢,它还有一个特别之处啊,就是我们刚才提到的,大家会发现的这个你看下划线123,然后再往后的话就没有了。
07:10
再往上就没有了,然后呢,这个要是杠四的话呢,也得也没有杠四的,就直接写五,咱们从这也能看。嗯,返回到我们这个code,大家看这这是ILO的下划线对吧,点开之后呢,我们看一下这个文档说明,你看这块呢,就提到了0123,后边就没有了,你要再写的话呢,就得是写一个具体的这个Y6才行,这是以I为例啊,其他的这个LFDA啊,都同样的道理。行,那回过来,所以这时候呢,你超过这个三了之后呢,这个时候只能是配一个操作数,那这个是一个flag flag呢往这放这个呢,因为你还得占一个这个L呢,是不是浪类型这就占俩了是吧,这个我就忽略这个事儿了,咱就直接往这块就挪了啊,这不就是一个flag吗。能行是吧,然后再往后的话呢,这不是A漏的六,六呢就是它这个是一个数组,数组呢也属于引用类型,所以呢,这也是个A,那A漏的六,那就是这个AR呗,这样啊,那其实呢,咱们在操作完这个结构之后呢,它也就出去了,然后再放呢,就又进来一个放到最底,我这呢就连着这样给他写了这个大家稍微注意一下。
08:17
那就连到一起了啊嗯,行,那这呢主要呢,咱们学习的就是这个漏的操作,记住它漏的操作呢,就是从局部变量表中将指定索引,这一定要小心啊,这是索引的意思,后边呢,咱们也会见到一些下划线带一个数,这个数呢它不是索引了,可能就是一个常量。啊,是有区别的。OK,那咱们把这个呢,哎,局部变量压站指令呢,就说清楚了。
我来说两句