当前位置:首页 » 编程软件 » 编译器程序二进制机器查表

编译器程序二进制机器查表

发布时间: 2022-10-04 07:07:27

㈠ 我用c语言编写了一段代码,有什么软件或方式可以查看生成的机器二进制代码吗(就是0和1)

//这个是用以前C++写的,楼主邮箱...

//左边显示的每个字节的16进制表示,右侧是文件中每个字节对应的ASCII码如果是可显示字符输出,不可打印的字符就全部用点替代了。这个就算是使用说明了。

㈡ 汇编语言编译器是怎么编写的

没实现过,如果考虑不是很复杂的话,可以这样:
通过查一张表的方式实现:每个汇编指令对应的二进制机器码
每次读取汇编源码的一行指令,然后查表,看对应哪个二进制机器码,然后根据指令的不同,把操作数等编入机器码...最后把结果输出到exe中。最后可能还需要处理一下exe的描述section...

java中什么是能够在计算机CPU上执行的二进制代码

java中的JVM是能够在计算机CPU上执行的二进制代码。

  • java的执行过程

Java代码需要经过编译和解释两个步骤,才在能在平台上运行。首先java语言的编译器,帮java代码编译成class的字节码,之后通过java虚拟机(JVM)来解释执行。

  • java代码的编译

java代码是如何编译的?

首先编译的解释:把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言书写的目标程序的翻译程序。编译的具体过程,可以看看《编译原理》相关的书籍。

其实java的编译过程,和通常c/c++还是不同的。

java编译后的字节码文件格式主要分为两部分:常量池和方法字节码。常量池记录的是代码出现过的所有token(类名,成员变量名等等)以及符号引用(方法引用,成员变量引用等等);方法字节码放的是类中各个方法的字节码。

Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址,这样就有效地保证了java的可移植性和安全性。

c/c++的编译,当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的。因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。

  • java虚拟机(JVM)

简单的可以这样理解它的功能:就是将java编译之后的字节码,解释成cpu能够执行的二进制代码。

JVM是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM的主要工作是解释自己的指令集(即字节码)并映射到本地的CPU的指令集或OS的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(class file)。类文件的组成包括JVM指令集,符号表以及一些补助信息。

java虚拟机工作的原理,可以自己找一下网上的资料。大家还需要思考的问题,jvm的内存、jvm的垃圾回收(GC)、Android的朋友还要区分(Dalvik 和标准 Java 虚拟机JVM)的区别。

  • 总结:

java代码编译之后,可以直接运行在Windows或者其它装有JVM虚拟机的系统下。而C或C++直接编译成与机器和操作系统相关的代码。所以C语言编译的程序没有跨平台性,就算没有使用到操作系统相关的API,在不同的系统下也必须重新编译才能运行。

㈣ C/C++语言编译生产可执行的二进制文件的过程求大神详尽解释,

  1. 预编译。编译器将你的.c、.cpp源代码,通过解释其中的预编译指令,将源代码转换成相应的没有任何预编译指令的代码。

  2. 编译、优化。将上一步的代码编译成汇编指令,并作一定优化,形成对应的.s汇编代码

  3. 汇编。将.s文件汇编成机器码,形成对应的.o目标文件,此时是不可执行的二进制文件。生成对应的清单文件。为了连接需要,还会生成未定向符号表、导出符号表、地址重定向表等等。

  4. 连接。先根据对应的清单文件、连接文件及之间的调用关系,决定所有的目标文件及引用的库文件在最后可执行文件中的位置;然后做一些其他事情,比如根据符号表等将目标文件中的符号地址补全等等;最终得到可执行文件。

这只是我个人的简单理解,更详尽的解答都可以写成好几本书了=_=望采纳~

㈤ 汇编指令如何转换为二进制或者十六进制

一种是手工查表进行转换,找到针对CPU的汇编码的书,根据汇编语句查对应的机器码。
另一种一种是用编译软件,对应于X86的,有ASM程序可以编译汇编程序,对应S51,也有专门的汇编编译程序
X86系统如果是少量的
用DEBUG软件,可以实现
用其中的A命令,输入汇编语句
然后用D命令就可以看到16进制的机器码

㈥ 关于汇编语言和高级语言的问题

这个东西不是简单明了能够说明白的,原谅!

我们的计算机能够执行的是一条一条用二进制数字写成的指令,在CPU读取这些指令时会用其内部的译码部件把这些数字翻译成一定的操作,从而指导计算机完成该做什么,怎么做的问题.
在同一架构的CPU中,机器指令是相同的,或是向下兼容的.硬件工程师们在设计CPU时,综合考虑各方面的情况,最终形成了若干条指令(就像我们所写的程序都可以用三种基本结构写成一样),然后再把这若干条指令镌刻在CPU中,用硬件部分予以实现(电子电路中能够讲到).
由于每种CPU的设计者和设计理念不同,因此,形成了各种各样的CPU或单片机品牌,像我们常用的pentium和amd都是属于80x86架构的,此外还有mcs51单片,arm芯片,motorola的680X00系列等.

再说下汇编语言:
由于机器指令是一串可执行的数字代码,因而我们一般人是不会记也很难记住的,为了解决这个问题,所以才发明了汇编语言,用助记符来代替相应的机器语言.所以汇编语言与机器语言是一一对应的,CPU内部有多少条机器指令,就会相应有多少条汇编指令.

高级语言:
由于汇编语言只是机器语言的符号化,虽说相对简单了,但是还是得要求人们学习相应的内部结构,对于复杂的内部结构,有很大一部分人还是无从着手的.所以就出现了高级语言,当程序员用高级语言指令写完源程序后,只需用编译器编译就可运行了.此时编译器所做的工作就是把高级语言指令翻译成汇编语言(机器语言).由于每种机器对应的指令不同,所以在不同架构的机器下,就会有着不同的编译器.

从上我们可以知道,机器语言 汇编语言是基于机器的,在80x86下能够运行的程序,放到arm下肯定没法运行,为什么?因为其机器结构不同,内部的硬件实现不同.所以说其移植性差.
那为什么说高级语言移植性就好呢?是因为他不是用汇编语言写的.在80x86下用c写了一个程序,我们可以用mcs51下用mcs51的c编译器进行编译,将关键字翻译成mcs51的汇编指令就可以了.

打的太多了,希望你能明白.

㈦ 关于编译原理

1.当然是机器语言了,如果是汇编指令,那还得编译一次!能运行的程序都是机器语言,只有机器语言才能控制CPU,NET或Java这些中间语言,程序在运行时会被CLR或JVM快速编译成机器语言,因此这些程序速度上有损失。

高级语言源代码(文本)-通过编译器(compiler)-程序(二进制机器语言)
汇编代码(文本)-通过汇编器(assembler)-程序(二进制语言)

看到这里,你可能会想那汇编语言到底有什么用呢,编译器完全能代替汇编啊?
(1).编译器是通过高级语言(c,c++)转到机器语言的。转换过的机器语言受限与高级语言,效率和功能上都有限制。比如c不等过分操作内存。但通过汇编器转化过来的机器语言,效率高,且用汇编语言,直接和CPU对话!
(2).汇编可以反汇编(逆向编译),而这里高级语言没有发言权,就是:
程序(二进制机器语言)-通过反汇编器(compiler)-可转化为汇编代码(文本)
但永远不能转化为高级语言的源代码,。
以上两点汇编存在的重要性。

2。当然是说移植源代码。windows用x86机器语言,苹果用powerPC机器语言,windows程序当然不能运行在苹果机上,因为程序其实就是一串机器语言!但windows上有c的编译器(vc++),苹果机上也有c编译器(gcc),因此同一个c的源代码,当然就可以通过不同平台的同一种编译器实现平台移植。

3.当然是NASM,我看的所有书都首先说NASM,他是开源的,就像Linux一样,很受欢迎,还有MASN是微软的,borland的也有汇编器,不过都不常见了。

4.这跟CPU有关,一般32位x86兼容的cpu有许多寄存器,多数是32位的,也有16位的。比如CS,ES,DS这些segment寄存器一直是16位的。

5.优势太多了,这和32位和16位存在的优势一样,16位电脑最大内存1MB,寄存器都是16位的。32位,最大内存可以有4GB,整整是16位的4096倍啊!16位多渺小啊,同理64位基本上也可以蔑视32位,64内存最大内存用TB来衡量,寄存器多数是64位!地址总线也是64位。64对32位没有什么优势劣势可言,64位完全就是32位的下一代。

㈧ c语言是如何编译成二进制

计算机专业有门课程叫做《编译原理》,详细讲述了怎么把高级语言翻译成汇编语言活着机器能看懂的二进制代码。

简单的说,C语言是通过编译器翻译成二进制代码的(就像英译汉的软件把英文翻译成汉语一样。把高级语言翻译成机器语言过程很复杂,学了编译原理就懂了)。还有编译器可以用各种语言编写,C语言可以被用C语言写的编译器来编译。

㈨ 用C语音编写单片机程序时,查表法怎样用

数组。将数组定义为只读属性,像这样code
unsigned
char
TAB[
*
]={xx,
xx,.........};意思是
只读的
无符号字节型数组TAB。编译器会帮你把这个数组放到ROM里面去,而不会占用RAM。使用的时候和一般的数组一样使用就可以了。如我要调出数组里面的第十个数,只需要a=TAB[9];就可以了。并且你可以指针去查找里面的数据,很方便操作。

㈩ c语言是怎样变成计算机可以识别的二进制机器指令的急求 …详细点

一般C语言都在特定的环境中编写,比如visual c++,turbo C之类的。这些环境中带有C语言编译器,当你点编译的时候,编译器就会将C代码转换为汇编语言。汇编语言和二进制指令有直接对应关系,机器可以识别。就是这样

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:944
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:741
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372