汇编语言 怎样 在计算机中 解释成 机器语言? 以及它在计算机中如何一步一步运行?

实话实说吧。 这个问题困扰我很久很久了。 在学校呆了三年,没有老师提到,在网上搜索,没有我满意的答案, 在资料中查找,泛泛之谈。 所以,只能求于大家了。 你们看到我提到的问题不要笑啊? 因为这个过程被抽象了,所以我们感觉不存在。 我知道 完成 此过程 是由 汇编器 或者 解释器 完成的。 但是 它都是软件, 若他们不是在硬件上运行,就根本没有 汇编器 和解释器。 我猜测 ,最根本的可能是 利用 可编程逻辑阵列完成的。 即将 汇编指令 和 唯一对应的 机器码 通过 可编程逻辑阵列 完成映射关系, 以后,计算机的发展像滚雪球一般,基于前者来不断完善的。 我想确认一下,因为这是我的猜想。 还有我真的想知道 程序在计算机中是怎样 一步一步 运行的。 比方 给内存每个 bit 连接一个LED指示灯, 这样,从某种程度上就可以感性知道程序运行的过程了, 然而很遗憾, 好像没有。 有谁知道吗? 有谁愿意向我透露吗?
呵呵,难得你帮我回答了这么多的问题。 其实我在大二上过微机原理课程设计,你给我的方法我之前用过。 我们还编写了 微指令集(24bit*30条),机器码。 每条机器码对应好几条 微指令呢。 反正挺好玩的,但是过程很烦,一不小心就错了。 呵呵, 我现在最最想知道的就是, 每一条汇编指令 通过什么硬件 转换成 01 代码。 说实话, 如果真的叫我去实现,我会借用ATM(异步传递方式)来实现。 它主要有三种实现方式。

不好意思啊,几分不够,不能追问了。

献丑了,学长,我是大一软件工程的新生,自学过几天汇编语言,我的看法是(不要笑我,看了你们的对话,感觉很深奥,有感而发):所有的指令(即“软件)”都在运行时被操作系统装入内存,指令也是“数据”,对cpu来说,传给他的只是一系列的1010这样的二进制数据,这一系列的二进制指令直接体现为高低电平。这一系列高低电平以一定的顺序输入cup的数据总线(输入端),然后控制cup内部的庞大电路进行改变,cpu也会根据相应的变化做出输入输出的“动作”。其实这些软件已经是二进制指令序列了,只要cpu去读他cpu就自己认得,知道该干什么,可见cpu有多复杂,难怪中国造不出好的来。编译这个过程是由编译器执行的,把汇编语言翻译成机器语言(二进制的指令序列)。至于世界上第一个编译器,我猜真是用机器语言写出来的。 要说这个翻译的过程的话···这个我还不懂,但我知道,这东西真不是三言两语就能说清楚的。 推荐你复习一下数字逻辑以获得对cup执行程序的底层感性理解。 然后再深入理解一下汇编语言和编译原理。也许那是你就理解的更深了···o(︶︿︶)o 虽然我也不太了解,或许那些你在就知道,我只是想说出我知道的一点点,希望能“帮到”你这个比我高出n级的学长。 其实翻译的过程是纯软件的叫编译器的家伙做的,cpu执行编译器,编译器(编译器本身就是一堆零和一的机器码)把那堆汇编代码当作一堆数据,以一定的算法把这批数据转换成由零和一组成的另一批数据,而这批由零和一组成的数据就是目标程序(转换成cpu可以认得的格式)。当CS和IP指向他(cpu开始读取并执行这些机器码),执行他的时候,这对看似混乱的数据就成了“软件”。把这堆被称为程序的零一序列写到硬盘里存起来后就成了我们熟知的可执行程序。不知道学长看完后有何感想,虽然好多想法尚且幼稚,不过没关系,纯粹为了交流思想。追问

呵呵,你所说的是合理的。但是,能不能再更近一步,再详细一点呢? 其实你已经很不错了,真的。要继续加油啊。 我,脑筋比较死。 因为世界上所有的软件都要运行在硬件之上(也许有点夸张)。但是,我不知道他们是怎样通过一系列的方法和手段实现的。我真的很想知道。 很多人都和我说了,但是呢,没有说到点子上, 而我只关注那一点,因为我直觉上认为其他的 不必知道。 呵呵,谢谢你的回复! 祝你成功, 以后知道的话回答我

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-05
计算机机原理书中计算机中的方框图你可看到了吧,那上的每一个框就是一堆硬件,类同你说的逻辑阵列但现除EEPROM和flash EPROM外它不用可编程,因就直接做成了由你数子电路原理中知道的那些从简单开始的与,或,非......基本电路到加法器、一直到很复杂运算器......。在那原理图上的那个PC计数器(也可叫地址译码器)就是一个位数很多的一个可预置加法器,它在由控制器统一的时钟到来时就加一,这就是我们说的机器周期。然后把你预存在存贮器中的指令取出来,这指令就是你先存进PROM(程序存贮器)中的二进制码,也就是我们说的机器码,因机器只认的到它。这认的过程就类同数子电路中的74138三八译码器的基本原理一样,也就是说给不同的数时它的那八个输出(在计算机中可是数百个)端口上就只有一个有信号,这个信号就去控制(你也可认为是去开关)了一个固定的功能。所以这个译码器在特定时也叫指令译码器,这样,计算机就去执行了一个(指令)指定任务。哈!也可叫多选一吧。今先说到这。有兴趣再追问。因这打字可比用嘴上课累的啊。追问

谢谢啊。 指令译码器的译码对象是 机器指令, 整个译码过程就相当于 计算机理解它,并在理解的过程中执行它,理解完了,整个执行过程就出来了。是不是这样?还有,我们在键盘上敲代码,其实我们敲进电脑中的不是字符,而是一串2进制代码。 而在显示器上显示的内容是 计算机 经过 译码得来的。 其实整个过程被抽象了,时间一长,我们就想当然的认为我们敲进去的是字符,显示的也是敲进去的字符。 本质上 中间有转换过程。

追答

汇编中的叫助记符!他在编辑时就全变成了二进制码了。如你熟了也可在DEBUG下直接打这二进制码的,可它太抽象不好记,所以才用了这助记符来帮忙记忆!

追问

这个我当然知道啊,但是是怎么实现的? 在哪里? 那个硬件参与?

追答

汇编中的叫助记符!他在编辑时就全变成了二进制码了。如你熟了也可在DEBUG下直接打这二进制码的,可它太抽象不好记,所以才用了这助记符来帮忙记忆!你这说的字符可更转换的多了,那可还要和字符的点阵再进行转换了,就是上屏显示还要换算屏上地址那点放那这才能出的了你看到的字符。要不怎么不同的显卡要有自己的驱动才可高效的显示。要不只能兼用VGA显示了。、、
       你想实现什么!?

追问

哎,你没有看懂我的问题。 汇编中的叫助记符,他在编辑时就全变成了二进制码了。 请问这个是怎么实现的? 难道是魔术吗? 应该有来龙去脉吧?知道的话就请告诉我一下。
你说的我也知道, 但是我不知道 每敲一行助记符,怎么就对应那串2进制的机器码? 这个我不知道是通过什么技术实现的。

追答

你可在DEBUG中直打入这二进制码,再就是用厂家的汇编软件会把你的助访符变成那的。

追问

厂家的汇编软件 是商家机密码? 能不能搞到手啊? 研究研究一下? 还有, 我的问题你还是没有理解。 如果你自己亲手制作一台电脑,你应该怎么入手。 能够告诉我你的想法吗(包括所有的 硬件 和 软件资源 )?

追答

哈!你这大错,那是厂家为了卖他这芯片的必备工具,和他那资料一样,没有这些谁会用他的芯片啊,那资料上明明白白写着每一句助记符的机器代码是多少的。
自己设计电脑那可要从简单开始,先学相关理论。你真有这心的话就从单片机开始吧,只要花上几十元钱购一开发板就可自己动起手来的,再配合着看资料,这就是最佳途径。

追问

是这样啊。 但是很多时候,你有没有发现,你说:“那资料上明明白白写着每一句助记符的机器代码是多少的”。 其实我们只会用, 但是我们不知道它是怎样实现的。 我们只会用,不会自己动手做一个,而我现在想要知道的是它是怎样实现的。 为什么我按照厂家的参考资料编码,就能够得到对应的机器码? 是什么东西完成的(具体到 硬件 和 软件)。 我有一个开发板的51单片机。 不过最近有点忙,等到有时间会玩玩的。

追答

哈!你就把那代码按你想要做的事的要求顺序打成一个HEX格式(这个格式很重要,错了机器认不到)的文本文件,嘿,烧到你单片机中就可玩起来了。真玩时有不懂的再来问我吧!Q名 休闲正分桌 ,不过还是直接用厂家的汇编软件会更省事一点的了。就这汇编软件就可帮你写好这16进制的HEX文件的。这网上多的是,厂家还专要提供给你用的了。他才好多卖他的芯片嘛。

本回答被网友采纳
第2个回答  2012-05-05
翻译成机器码后,机器码是二进制数,机器就认识,机器有程序计数器,一般复位后,每个机器都有固定的值赋给程序计数器,这就是程序开始执行的地方,按程序计数器取过来的指令会放在机器内部的指令译码器,对这条指令进行分析,通过微命令来执行这条指令,这是机器内部控制器来做。追问

我知道翻译成机器码后的指令执行过程。 我想知道的是 翻译的 过程。 不是翻译前, 翻译后,是翻译的过程,过程。

追答

翻译是纯软件完成,汇编就是由汇编程序完成,高级语言就是由编译程序,计算机专业有专门开设编译原理就是讲怎么翻译的,就像如果一条mov指令如果它是的机器码是70,汇编就是完成这个翻译过程,翻译以后是个相对地址形式的文件,所以要连接,确定地址,再运行,运行就是存放该程序的地址送给相应的程序计数器,程序就一条一条执行了。

追问

但是编译器也是软件啊?难道它是用机器码写的? 我感觉核心模块是的。

第3个回答  2012-05-05
高级语言需要经过编译器生成机器语言,然后计算机才能够识别,运行。当然了,机器语言是可以直接运行的。汇编语言是很接近机器语言,但是还是不能直接运行,它使用了很多助记符来帮助开发者完成开发。因为对于人来说,0和1组成的代码难度太大。它也需要编译后才能运行。追问

我需要知道的是编译过程中硬件的过程细节。 我学过编译原理, 但是, 它不是我的目标。

相似回答