汇编器需要做哪些工作?
发布网友
发布时间:2022-03-29 11:05
我来回答
共1个回答
热心网友
时间:2022-03-29 12:35
,其实java虚拟机就是bin目录下那个java.exe文件(我们执行一个java程序时要使用java命令就是执行这个程序,然后由它解释执行java程序)。
java虚拟机定义了很多指令,就像一个真正的机器的硬件一样,字节码通过这些指令操作java虚拟机,然后java虚拟机再将这些指令翻译为硬件指令。基本原理就是这样。
我想你迷惑的是java虚拟机是怎样执行一个java文件的对吧?
假设我们编写了一个java程序,编译后生成的字节码文件是Test.class,那么我们通常是这么运行我们的java程序的:
java Test
上面的命令的本意是“启动java.exe程序(即java虚拟机),并将"Test"这个字符串参数传递给它”(这一点了解DOS命令执行原理的人很容易理解)。
然后,操作系统会启动java.exe,它首先取得参数"Test",然后再传递给ClassLoader类(这个类在java.lang包中,当需要载入类时就会用到它),ClassLoader类查找classpath环境变量中指定的目录,如果没有定义classpath则默认为当前目录,在其中寻找"Test.class",.class后缀是自动加上去的,因此我们执行java程序时不能写成java Test.class,这样是找不到的(即使有Test.class.class文件也不行,因为此时的.号有另外的含义,它是包分隔符,因此这种情况下ClassLoader实际上找的是Test目录下的class.class文件)。
找到后,就将它载入java虚拟机,其实就是读取其中的二进制字节码,java虚拟机对它载入的类的字节码有很严格的要求,它首先检查这个文件中的字节码是否符合标准格式(这个检查是java虚拟机自己完成的,事实上,对字节码进行检查的规则有严格的定义,详见《java虚拟机规范》),检查没有问题后(如果我们用的是sun自己的编译器,并且我们没有改动过字节码文件,那么这个检查肯定是没有问题的,依照《java虚拟机规范》的解释,检查的目的是为了保持字节码的完整性,其实就是说担心其它人会改动字节码或其它编译器生成的字节码不符合规范)。
我们可以把编译后的字节码看成一条条指令和数据定义(就像汇编语言一样)。当前一步的检查通过后,java虚拟机开始真正载入这个类(检查阶段只是把这个类当成一个二进制格式的文本文件,并不是把它当作一个虚拟机可执行的程序)。在这个阶段,java虚拟机负责为类的数据分配内存,例如将数据装入常数池,将类的方法定义装入内存堆(池和堆是java虚拟机管理内存的逻辑单元,所有数据都在池中,所有可执行代码都在堆中,在需要时再将其取出并压入堆栈——不明白的话这一点可以略过)。
然后就是从这个类的入口函数(即main方法)开始执行:读取一条指令 > 翻译指令 > 执行指令 > 再读取下一条指令 > ......如此循环
(一般情况下是这样,但如果在执行过程中JIT,即java运行时系统将其中经常用到的一些指令编译为机器语言的话,再执行这些指令时就不需要翻译了——再罗嗦几句:尽管现在的java程序执行速度还不尽人意,但理论上,JIT系统可能会获得比C还要高的效率,因为编译后C的代码是死的,而JIT是在运行时编译,在这种情况下,容易知道哪些代码经常被使用,进而知道如何最大可能地优化这些代码,类似C语言的编译器在静态情况下是无法做到的)。
汇编编译器的工作和生成可执行文件的执行过程是怎样的
早期的汇编器,只负责生成目标代码,链接器是一个独立的程序。需要手工分别作汇编,和链接 现在的汇编器,可以合并这两步,直接调用链接器,是直接生成可执行文件。伪指令是汇编命令,是用来操作汇编器的命令。不是指令,不生成对应的代码。CPU只能识别二进制代码,数据通过加载器的加载,或者烧写器的烧写...
汇编器简介
因此,汇编器不仅是代码编写的桥梁,它还是连接程序员的抽象思维与计算机硬件之间的重要环节。理解汇编语言和汇编器的工作原理,对于深入理解计算机底层运行机制至关重要。
为什么arm先启动汇编代码,汇编代码完成了哪些工作
汇编代码主要完成以下几个工作:1、设置栈:汇编代码会设置处理器的堆栈指针(StackPointer,SP),确定栈的初始位置和大小,以便后续函数调用和栈操作的正常执行。2、初始化寄存器:汇编代码会初始化一些重要的寄存器,如程序计数器(ProgramCounter,PC)和堆栈指针寄存器(StackPointer,SP)等,确保处理器能...
汇编语言分几种?分别都是干什么的
1.简单的汇编程序。它的特征是目标机器翻译机器语言的绝对地址,可以直接在内存中执行,也称为“加载和执行”汇编程序。这种工作方式在存储空间的组织中是非常有限的。2. 模块汇编。它提供了设计、编码和调试不同程序模块的能力。每个汇编模块称为一个对象模块。它们的地址是相对的。可以使用链接汇编程序...
汇编工作是由什么自动完成的
汇编器(Assembler)是将汇编语言翻译为机器语言的程序。一般而言,汇编生成的是目标代码,需要经链接器(Linker)生成可执行代码才可以执行。汇编语言是一种以处理器指令系统为基础的低级语言,采用助记符表达指令操作码,采用标识符表示指令操作数。作为一门语言,对应于高级语言的编译器,需要一个“汇编器...
RISC-V中的汇编、链接及加载
例如,汇编器会将C程序的Hello World示例转换成包含伪指令的机器语言目标文件,其中包含汇编指示符来指导代码和数据的布局。汇编器还需处理符号表,确保标签地址与指令内存位置匹配,这对于链接器后续的工作至关重要。链接器是另一个关键环节,它负责将独立编译的模块组合成可执行文件,通过重定位解决未定义...
开发汇编语言源程序的主要步骤有哪些
用汇编语言编写程序时,需要给程序中的变量指定内存单元地址或指定寄存器。5.编写程序 要把题目中需要处理的数据合理地根据2、3、4步的工作,选用适合的指令,并按一定的语法规则编写相应的程序。6.静态检查 静态检查就是用人工的方式检查程序是否有错误,包括算法错误和语法错误等,如果有错误,及时改正...
汇编语言编程有哪些工具?
汇编语言编程的工具主要包括编辑器、汇编编译器、链接器和调试器。首先,编辑器是用于编辑源代码的ASCII文本的工具。在Windows环境下,常用的编辑器有记事本、EditPlus、UlterEdit等;在Linux环境下,则可以使用Vi和Emacs等编辑器。这些编辑器提供了基本的文本编辑功能,使得程序员能够方便地编写和修改汇编语言...
汇编什么意思
在开发过程中,程序员可能会使用高级语言进行大部分的开发工作,但在需要提高程序性能的关键部分,可能会使用汇编语言进行编写。此外,某些特定的硬件操作或功能可能需要使用汇编语言来实现。完成编写后,高级语言代码需要经过编译器编译成机器码,而汇编语言代码则通过汇编器直接转换为机器码。3. 汇编的重要性...
汇编前提是什么意思?
汇编是一种计算机语言,可以让计算机理解我们所写的程序。在编写汇编程序时,需要准备好相应的工具和环境。具体来说,需要计算机硬件、操作系统、汇编器、文本编辑器等。此外,汇编前提还包括对计算机体系结构的理解和掌握。对于不同的计算机架构,我们所编写的汇编程序也需要进行相应的调整和修改。因此,除了...