程序的机器级表示

来源:互联网 发布:手机专业录音软件 编辑:程序博客网 时间:2024/05/17 00:52


不管是高级语言还是低级语言,都会被编译器或者虚拟机转变成机器能够识别的二进制字符序列才能够执行。

ESP和EBP的概念:

ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。

EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

计算机通过栈这种抽象的数据结构,对数据进行操作,完成四则运算(加减乘除)。

编程语言越来越接近自然语言,但是计算机能够识别的仍然是01序列。从刻在纸带上面执行的语言,到汇编,到c语言再到java,虽然可读性越来越高,对人类阅读习惯越来越友好,但是对机器执行却是相反。高级语言不得不想尽各种办法提高机器执行效率,例如java,首先要用编译器编译成二进制文件(即.class文件),然后通过虚拟机解码到相应平台执行。另外,高级语言还要考虑操作系统特性。个人认为,高级语言是对操作系统编程,低级语言是对硬件的直接编程。

了解计算机体系结构,以及语言的编译执行方式,能够帮助我们更加优雅而且高效的代码。以下例(见if语句):

Node<E> node(int index) {    // assert isElementIndex(index);    if (index < (size >> 1)) {        Node<E> x = first;        for (int i = 0; i < index; i++)            x = x.next;        return x;    } else {        Node<E> x = last;        for (int i = size - 1; i > index; i--)            x = x.prev;        return x;    }}

如果平时不了解计算机乘除法其实就是数据位移的运算,这种代码很自然的就能够写出来。


0 0
原创粉丝点击