❶ 机器语言(二进制或十六进制)是如何转成汇编语言(英语)的 能不能转成中文 为什么
1.
你需要明白,微处理器的所有执行功能都是固定的,并且它们是有固定顺序的,比方说在51指令集里功能的顺序是:
00——Nop(空操作)
01——AJmp(绝对跳)
02——LJmp(长跳)
03——RR(逻辑右移)
04——Inc(递加)
……
也就是说,51单片机里共N种功能,第X种功能是***。
而在80x86汇编里,更加复杂的汇编指令其实也都是按顺序组织好的“数字”,比如ADD指令,按照其操作码的不同(比方说目标操作符是Ax还是Bx),从B8开始有数个标号都属于Add指令。
汇编时,我们写的代码都是助记符也就是诸如Add,Mov这样的指令,而编译时,就会把这些指令换成对应的数字了。这种转换是固定的,也就是说Mov永远只会转换成那几种形式(之所以会有好几种是因为操作数的类型不同)。
2.
机器语言其实就是上面提到的“数字标号”,也就是指功能序号。比方说一条机器语言是00,按照上面的表找出来,就是Nop空操作指令,当单片机从ROM中执行到00这条代码的时候就会自动调用“第00号功能”,而这个功能就是空操作。所有同型号的51单片机都是这么处理的。
3.
上面从字面上解决了你这个问题。但是我看了你的追问,似乎你想知道的不是这个,而是数字怎么变成字?好吧……
首先你要知道ASCII码,也就是数字和英文字母及标点符号之间的关系。举个例子,65这个数字,在ASCII码中可以表示大写字母A,依次的,66可以表示B;32表示空格,13表示回车,等等。ASCII码占一个字节。
汉字,比较特殊的一类字符,关键就在于它的复杂。英文字母加上标点符号和一堆稀奇古怪的符号,撑死了用127个ASCII码表示就完事了,但是常用汉字远不止它的十倍。所以汉字在数字逻辑中的处理,是按另一种编码存在的。一般的ANSI格式文件是将汉字表示为GB-2312编码,这种编码跟ASCII码不冲突,占两个字节。关于GB-2312编码的具体情况可以网络查询,规则比较复杂,没办法简单讲清楚的。注意这里讲的是字符的表示规范。
至于指令能不能用汉字来表示,就是相当于 加 A,#30 这样的指令能否存在,我想说的是,完全可以实现;但是这种汇编指令跟 ADD A,#30 有什么区别?我们只需要把现有的汇编编译器稍做修改,让它可以识别这样的指令,然后将“加”换成ADD,再把它转换成数字,在实现上和用Add根本没有区别。
现在的“易语言”,差不多也是用的这种原理,只是写出了可以识别汉字指令的编译器,然后还是使用的形如Delphi和VB一样的编程风格。说白了就是将国外的产品进行一个“山寨”。如果你还不懂,说明我上面讲的你没懂。。。那我也没办法。
4.
其实在微处理器,或者CPU运行期间,内存中只有数字,也就是二进制码,上面所有提到的,包括指令和字符,都是数字形式存在。而我们通常操作时看到的字符,都是用另外的方式(如显卡)转换成图形放到显示器上的,并不是处理器自带的功能;单片机要显示图形字符,需要另外编程。
而对于输入,其实也是将输入的字符转换成数字才能存储到内存之中。
❷ 用于单片机烧写的文件-----.hex文件,如何将.hex文件转换为容易解读的语言---C语言。详细步骤!
用51反汇编工具 V1.0 智能版(这个可以反汇编的)
Hex-Rays插件 v1.0.071108。。。(这个可以反C语言的,貌似是最好的了)
但是反出来的效果不太好。。
因为官方的要付费,所以没用过,不能给你提供详细步骤了,不好意思
自己去搜索下,研究下吧 呵呵