我对此很陌生.我试图以清晰的方式理解上述术语之间的区别,但是,我仍然感到困惑.这是我发现的:
在计算机汇编程序(或汇编)语言中,助记符是操作的缩写.它输入到每个汇编程序指令的操作代码字段中.例如AND AC,37,这意味着AND在AC与寄存器37.所以AND,SUB并且MUL是助记符.它们由汇编程序翻译.
汇编语言中的指令(语句)通常非常简单,与高级编程语言中的说明不同.通常,助记符是单个可执行机器语言指令(操作码)的符号名称,并且为每个机器语言指令定义至少一个操作码助记符.每条指令通常由操作或操作码以及零个或多个操作数组成.
Ani*_*nge 42
OPCODE:它是由您的机器(虚拟或硅)解释的数字,表示要执行的操作
BYTECODE:与机器代码相同,除了它主要由基于软件的解释器(如Java或CLR)使用
MNEMONIC:英文单词MNEMONIC意为"一种设备,如字母,想法或协会的模式,有助于记住某些东西." 因此,汇编语言程序员通常使用它来记住机器可以执行的"操作",例如"ADD","MUL"和"MOV"等.这是汇编程序特定的.
机器代码:数字序列可以打开和关闭计算机中的开关以执行某项工作 - 例如添加数字,分支,乘法等等.这纯粹是机器特定的,并且由处理器的实施者.
汇编:有两个"汇编" - 一个汇编程序是一系列助记符和操作数,它们被馈送到"汇编程序",它将助记符和操作数"汇编"成可执行的机器代码.可选地,"链接器"链接组件并产生可执行文件.
基于"CLR"的语言(.NET语言)中的第二个"汇编"是一系列CLR代码,其中包含元数据信息,可执行代码库,但不能直接执行.
Nic*_*ick 30
Aniket做得很好,但我也会去.
首先,要了解在最低级别,计算机程序和所有数据都只是数字(有时称为单词),在某种记忆中.最常见的是,这些字是8位(1和0)的倍数(例如32和64),但不一定,并且在某些处理器中,每个字都要大得多.无论如何,它只是表示为一系列的1和0的数字,或者如果你愿意的话,可以表示和关闭.这些数字的含义取决于什么/谁曾经读过它们,在处理器的情况下,它一次读取一个字,并根据它看到的数字(指令)采取一些行动.此类操作可能包括从内存中读取值,将值写入内存,修改已读取的值,跳转到内存中的其他位置以读取指令.
在很早的时候,程序员就可以打开和关闭开关来更改内存,打开或关闭指示灯以读取1和0,因为没有键盘,屏幕等等.随着时间的推移,内存变得越来越大,处理器变得越来越复杂,显示设备和输入的键盘被构思出来,并且有了更简单的编程方式.
释义Aniket:
OPCODE是指令字的一部分,处理器将其解释为表示要执行的操作,例如读,写,跳,加.许多指令还将具有影响指令执行方式的OPERANDS,例如说明从内存中读取或写入的位置,或跳转到何处.因此,如果指令的大小为32位,则处理器可以使用8位作为操作码,并且对于两个操作数中的每一个使用12位.
从切换开关开始,可以使用称为"监视器"的程序将代码输入到机器中.程序员将使用简单的命令来说明他们想要修改的内存,并以数字方式输入MACHINE CODE,例如,使用0到9的基数16(十六进制)和数字的A到F.
虽然比切换开关更好,但输入机器代码仍然很慢并且容易出错.从那里开始的是ASSEMBLY CODE,它使用更容易记住的MNEMONICS来代替表示指令的实际数字.ASSEMBLER的工作主要是将程序的助记符形式转换为相应的机器代码.这使得编程更容易,特别是对于跳转指令,其中部分指令是要跳转到的存储器地址或要跳过的多个字.机器代码编程需要精心计算以形成正确的指令,如果添加或删除某些代码,则可能需要重新计算跳转指令.汇编程序为程序员处理这个问题.
这使得BYTECODE基本上与机器代码相同,因为它描述了低级操作,例如读写内存和基本计算.Bytecode通常被认为是在编译更高级语言(例如PHP或Java)时生成的,并且与许多基于硬件的处理器的机器代码不同,可能具有支持更高级语言的特定功能的操作.一个关键的区别是字节码的处理器通常是一个程序,尽管已经创建了处理器来解释一些字节码规范,例如一个名为SOAR(Smalltalk On A RISC)的处理器,用于Smalltalk字节码.虽然您通常不会调用本机机器代码字节码,但对于某些类型的处理器(如CISC和EISC)(例如Linn Rekursiv,来自制作唱机的人),处理器本身包含一个解释机器指令的程序,所以有相似之处.
Fır*_*ÇÜK 11
以下行是反汇编的x86代码.
68 73 9D 00 01       PUSH 0x01009D73
68是操作码.使用以下字节表示x86汇编语言的 PUSH 指令.PUSH指令将4字节(32位)长度数据推送到堆栈.字PUSH只是一个助记符表示操作码68.每个字节的 68, 73, 9D, 00, 01是机器代码.
机器代码用于真实机器(CPU),但字节代码是虚拟机的伪机器代码.
当你编写一个java代码.java编译器编译代码并生成字节代码.(.class文件),您可以在任何平台上执行相同的代码而无需更改.
                     JAVA CODE
                         |
                         |
                     BYTE CODE
         ________________|_______________
         |               |               |
      x86 JVM        SPARC JVM        ARM JVM
         |               |               |
         |               |               |
        x86            SPARC            ARM
   MACHINE CODE     MACHINE CODE    MACHINE CODE