汇编语言基础

一、机器语言

汇编语言是直接在硬件上工作的编程语言,而汇编语言的产生则要提及机器语言,在现代编程中,机器语言已经不再为开发者使用,汇编语言是开发者接触到的最底层的编程语言了。

机器语言,它是机器指令的集合,每一个机器指令其实就是机器可以正确执行的指令,它本质上是一列二进制数据,计算机硬件将其转换为一列高低电平,以使计算机的电子器件受到驱动,进行运算。

每一种微处理器,也就是CPU、芯片,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以,每一种微处理器都有自己的机器指令集,也就是机器语言,也可以叫做指令集架构-ISA。

程序的机器级表示

计算机执行机器代码,用字节序列编码低级的操作,包括处理数据、管理内存、读写存储设备上的数据,以及利用网络通信。编译器基于编程语言的规则、目标机器的指令集和操作系统遵循的管理,经过一系列的阶段生成机器代码。GCC C语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC调用汇编器和链接器,根据汇编代码生成可执行的机器代码。

高级语言与汇编语言、机器代码

当用高级语言编程时,机器屏蔽了程序的细节,即机器级的实现。而用汇编代码编程时,程序员必须指定程序用来执行计算的低级指令。高级语言的抽象级别高,这种抽象级别上工作效率高也更可靠。而且,最大的优点时,高级语言编写的程序可以在很多不同的机器上编译和执行,而汇编代码则是与特定机器代码密切相关的。

二、汇编语言的产生

机器语言是非常麻烦的,在只有机器语言时,我们需要将程序用0,1编成代码并打在纸带上,然后输入计算机进行运算,这样会带来极高的开发和调试成本,于是汇编语言产生了。

汇编语言的主体是汇编指令,汇编指令和机器指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式,如mov ax, bx,将寄存器bx的数据送入到ax中。

计算机其实只能读懂机器指令,那从汇编指令到机器指令就需要有一个翻译程序,也就是编译器,所以开发过程变成了先用汇编语言开发源程序,然后通过编译器编译后才能机器码,再交给计算机执行。

汇编语言的组成

汇编语言主要有三类指令组成

  • 汇编指令:机器码的助记符,有对应的机器码

  • 伪指令:没有对应的机器码,由编译器执行,计算机并不执行

  • 其它符号:如+,-,*等,由编译器识别,没有对应的机器码

存储

CPU是计算机的核心部件,它控制整个计算机运作,但是想要一个CPU工作,就必须提供指令和数据。指令和数据在存储器中存放,也就是内存,我们需要了解CPU如何从内存读取信息以及向内存写入信息的。

指令和数据

指令和数据时应用也就是功能上的概念区分,对于内存或磁盘而言,指令和数据没有任何区别,都是二进制信息而已。CPU在工作的时候把有的信息看做指令,有的看做数据(主要还是取决于传输数据的总线,不同的总线传输不同用途的数据)

存储单元

存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号,例如一个存储器有138个存储单元,编号0-127,计算机的最小信息单位是bit,也就是一个二进制位,8个bit组成一个Byte,即一个字节。存储器的容量以字节为最小单位来计算的,比如一个拥有128存储单元的存储器,它的容量是138个字节。

三、CPU对存储器的读写

CPU要从内存中读数据,首先要指定存储单元的地址,另外CPU在读写数据时,它需要知道要对哪一个器件进行操作,进行哪种操作,是写入还是读出,以及读写的数据,所以CPU要想读写数据必须和外部器件有以下交互

  • 存储单元的地址

  • 器件的操作类型,控制命令

  • 数据信息(读或写的信息)

在电子计算机中能处理、传输的信息都是电信号,电信号当然用导线传送,在计算机中专门有连接CPU和其它芯片的导线被称为总线。总线根据传送信息的不同,分为地址总线、控制总线、数据总线。

地址总线

CPU是通过地址总线来指定存储器单元的,所以地址总线能传送多少个不同的信息,CPU就可以对多少个内存单元进行寻址。一个CPU有N跟地址线,CPU的地址总线的宽度就是N,这样的CPU最多可以寻找2的N次方个内存单元。

数据总线

CPU与内存或其他器件之间的数据传送是通过数据总线来进行的,数据总线的宽度决定了CPU和外界的数据传送速度,8根数据总线一次可传送8位二进制数据,16根数据总线一次可传送两个字节。

控制总线

CPU对外部器件的控制是通过控制总线来进行的,有多少根控制总线就意外着CPU提供了对外部器件的多少种控制。

内存地址空间

一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元,这1024个内存单元就构成这个CPU的内存地址空间。

内存地址空间的大小受CPU地址总线宽度的限制,而在基于计算机硬件系统进行编程时,必须知道这个系统中的内存地址空间分配情况,因为当我们想在某类存储器中读写数据的时候,必须知道它第一个单元的地址和最后一个单元的地址,比如,我们希望向显示器输出一段信息,那么必须将这段信息写到显存中,显卡才能将它输出到显示器上,要向显存中写入数据,必须知道显存在内存地址空间中的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值