汇编语言怎呢变成机器语言的

fanyang689 2013-08-20 10:31:22
计算机是有许多逻辑门电路和一些电子元件组成的,不同硬件组成的计算机有不同的指令集,这一指令集可以用助记符表示的,也就是汇编语言,早期汇编语言可以有专业人士人工翻译成机器语言的,然后把这些机器语言输到计算机的,最后计算机执行输出结果,后来计算机可以自动翻译这些助记符也就是汇编语言,我想知道计算机是怎么自动翻译的,这个过程是怎么回事的,(我知道有编译器的)?哪位大侠们能给小弟一些指点的啊。有哪本书可以给小弟推荐看的
...全文
5529 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2016-03-29
  • 打赏
  • 举报
回复
我用vb写过一个简单的汇编器,就是debug看东西来翻译成二进制,那时候傻到不知道搜个指令手册。
  • 打赏
  • 举报
回复
“第一个汇编器美国人花了十几年才做出来”这是错的,1946年发明了第一台(数字)计算机,1951年第一个高级语言fortran就已经出现了,汇编器比这出现得更早。
yuzek 2016-03-25
  • 打赏
  • 举报
回复 1
第一个汇编器美国人花了十几年才做出来,所以楼主你应该知道要具体解释这个东西如何转变其实并不是那么简单。 以前有个说法是全世界能写汇编器的人不超过一个班级的人。 第一个汇编器肯定是用机器码也就是101010直接通过打孔器打好的纸条输入到计算机的。 而你说的显示部分,其实是另一个软件或者汇编器的非汇编部分来负责显示的,也就是说单纯的汇编器只负责解析并不负责显示,因为至于显示出来的是什么东西,还需要经过ascii的对应,然后转成字符阵列,然后再转成该字符阵列的机器码,然后运行,cpu看到这个机器码是指向显卡的,于是传递到显卡,显卡根据阵列显示出点。 其实在汇编器出现之前,计算机上先有的是操作系统,操作系统负责将输入的指令和结果显示出来,以及程序任务的执行等操作。也就是说即使没有汇编器,计算机也可以显示。 汇编器在运行时也会调用很多操作系统的接口。 很多人说不对啊,我用软盘上打几个汇编指令,然后放到裸机上,不是一样能显示出字符吗?那是因为你所谓的裸机并非全裸,计算机还有个操作系统叫做bios。这是每个计算机必须安装的东西。那么在没有bios之前的呢?计算机上一般也会有个操作系统,否则谁负责接收你传递的指令呢?最早的肯定是没有操作系统的,大家用二进制打孔就像打电报一样,把指令传进计算机,计算机通过灯泡亮暗把二进制结果显示出来。 计算机的发展是循序渐进的,所以要完全的说清楚,需要很久,如果不是搞这个的人一般只需要知道原理即可,具体的细节东西是非常复杂的。
qnapjiujiu 2015-01-19
  • 打赏
  • 举报
回复
明白了个大概
竹影半墙 2015-01-03
  • 打赏
  • 举报
回复
汇编编译器 源码
五星出东方 2014-11-18
  • 打赏
  • 举报
回复
前面已经说了,汇编到机器语言就是查表替换
小哞 2014-11-18
  • 打赏
  • 举报
回复
引用 1 楼 shendaowu 的回复:
编译原理应该就是讲这个的。 但是编译原理讲的一般都是高级语言。我感觉汇编语言的编译应该比高级语言的编译简单很多,明白了高级语言的编译汇编的编译应该就能知道了。
但是编译原理那本书的生成的目标代码是汇编啊,不是机器语言,这不相当于只讲了高级语言到汇编语言的翻译么
用户 昵称 2014-10-16
  • 打赏
  • 举报
回复
我能一点一点的讲,但是
睿李小白 2014-10-13
  • 打赏
  • 举报
回复
编译原理。。。如果你有那个能力,你可以去看看,如果没有,大体了解就行。。。工程讲解适用
五星出东方 2014-10-12
  • 打赏
  • 举报
回复
原理极其简单,假设一个只有加法指令,有4个寄存器(名字就叫寄1,寄2,寄3,寄4吧)的处理器,下一步就是给这些名字进行定义编码: 加 编码成 00,寄1,寄2,寄3,寄4分别编码成00,01,10,11 这就成为一张指令集定义表,也就是所谓的资料了。 好了,现在这个超级简单的处理器就可以进行指令汇编了: 加 寄1,寄2 汇编成-> 00 00 01 加 寄2,寄4 汇编成-> 00 01 11 。。。 实际的汇编要比这个复杂,但原理的确就是么简单的查表替换! 原来人工做这个查表替换,但人是喜欢偷懒的,就写个程序干这个机械的事情吧,于是汇编程序就诞生了,这是聪明而积极的偷懒!
天朗-星空 2014-05-01
  • 打赏
  • 举报
回复
汇编到机器码的转换很简单:每一条汇编语言都对应着相应的机器语言,编译器把相应的汇编指令转换成对应的机器码就行了吧 你都说了:指令集可以用助记符表示,助记符显然应该是和汇编指令一一对应的,只要对应的逻辑转换就可以。当然要是你要写汇编编译器那应该是不简单,需要用到(模式匹配)字符串匹配。
fly 100% 2014-04-27
  • 打赏
  • 举报
回复
编译原理看看 基本就知道了 基本都是汇编变的
chen_hui08 2014-04-27
  • 打赏
  • 举报
回复
竹丝 2014-04-03
  • 打赏
  • 举报
回复
个人理解,一开始的二进制编程的时候,必然是特定的一串数字代表一个功能,例如:01010101代表现在汇编里的mov指令(这里这是假设)。而现在要做的是,将这些mov等指令放在一个表里,机器抓过来一条语句,发现是mov时,cpu就去内存的一个表里查找mov对应的二进制代码,然后执行就行了。当然是个人理解,勿喷。
谁学逆向工程 2014-01-21
  • 打赏
  • 举报
回复
汇编指令(比如mov)就是个助记符,他是和机器码一一对应的关系
qiaoqiaojj 2014-01-09
  • 打赏
  • 举报
回复
楼主问的是如何如何编译过去。就是这个过程是如何执行的。一一对应是如何转变对应的。
lm_whales 2013-12-09
  • 打赏
  • 举报
回复
有些指令,有不止一个形式,其实可以采用不同名字,表示每一种形式。 这样就可以,让指令的二进制代码和汇编中的指令名字一一对应了,不过可读性就不好了。 因为我们通常会忽略指令的细节,直接理解操作的意义。 而这种一种操作,不同指令码,采用不同名字的方式,会令人眼花缭乱的。
lm_whales 2013-12-09
  • 打赏
  • 举报
回复
举个例子: 32Bits push eax ===>50 mov eax, 0 ===>b8 00 00 00 00 pop eax ===>58 汇编语言指令,和二进制指令一一对应。 只有里面的符号,表达式和伪指令,宏指令,需要特殊处理。 这里的符号指的是变量,过程,标号等以名字形式,出现在代码中的符号。 这个汇编的时候会做记录。
liuwei000000 2013-12-09
  • 打赏
  • 举报
回复
其实就是 查表, 建议看看 cpu指令集手册,比如之前intel的手册写的很详细,一条汇编指令如何变成机器码的。 一条一条翻译就是了。
ForestDB 2013-11-19
  • 打赏
  • 举报
回复
汇编码到机器码基本上没有“编译”一说,因为它们之间是简单的一一对应。 所以assembler就是做一一mapping就可以了。 你可以到Intel的网站上,下一份Intel 64 and IA-32 Architectures Software Developer's Manual.pdf 然后随便找个指令,看它对应的机器码即可“翻译”。
加载更多回复(9)

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧