Java,c中数组是常见的结构,数组是指同样长度的数据在内存中进行连续排列的数据构造。用一个数组名来表示全体数据,通过索引来区分数组的各个数据(元素)。
例如,一个10个元素的数组a,其中的各个数据就用a[0]~a[9]来表示。[]内的数字0~9就是索引。
Java
int[] arr =new int[10]
如果想要像数组那样分割特定的内存区域以达到连续查看的目的,使用两个寄存器会更方便些。例如查看10000000地址~1000FFFF地址时,可以将10000000存入基址寄存器,并使变址寄存器的值在00000000~0000FFFF变化。
CPU则会把基址寄存器+变址寄存器的值解释为实际查看的内存地址。
变址寄存器的值就相当于高级编程语言程序中数组的索引功能。
高级编程语言的源代码中,即使指令和数据在编写时是分散的,编译后也会在段定义中集合汇总起来。
直接打开本地代码来,只能看到数值罗列。如果直接使用数值来编写程序的话,不太容易理解。如果在各本地代码中,附带上表示其功能的英语单词缩写。例如在加法运算的本地代码中加上add、在比较运算的本地代码中加上cmp(compare的缩写)等缩写称为助记符。
使用助记符的编程语言称为汇编语言。通过查看汇编语言编写的源代码,就可以了解程序的本质了。
用汇编语言编写的源代码,和本地代码是对应的。因而,本地代码也可以反过来转换成汇编语言的源代码。
实际上Java源程序 a.java文件经过javac a.java 命令生成 a.class文件,这个a.class文件其实就是jvm虚拟机可以识别汇编语言。用javap命令反编译class文件经常可以看到这些助记符。
aload_0
invokespecial
// Method java/lang/Object."<init>":()