汇编语言:基本概念
1 机器语言和汇编语言
1.1 机器语言
机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。早期的程序设计均使用机器语言。程序员们将用0、1 数字编成的程序代码打在纸带或卡片上,1打孔,0 不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。
机器语言难于辨别和记忆, 给整个产业的发展带来了障碍。于是汇编语言产生了。
1.2 汇编语言
汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇 编指令是机器指令便于记忆的书写格式
例如:机器指令1000100111011000表示把寄存器BX的内容送到AX 中。汇编指令则写成mov ax,bx
。这样的写法与人类语言接近,便于阅读和记忆。
「编译器」 是能够将汇编指令转换成机器指令的翻译程序,程序员用汇编语言写出源程序,再用汇编编译器将其编译为机器码,由计算机最终执行。
2 CPU对存储器的读写
2.1 概述
CPU要从内存中读数据,首先要指定 「存储单元的地址」 。另外还要指明它要对 「哪一个器件」 进行操作,进行 「哪种操作」 ,是从中读出数据,还是向里面写入数据。
即CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面3类信息的交互。
- 存储单元的地址(地址信息);
- 器件的选择,读或写的命令(控制信息);
- 读或写的数据(数据信息)。
在计算机中专门有为CPU和其他部件之间提供信息(地址信息、控制信息、数据信息)的传输通道,通常称为总线。总线从物理上来讲,就是一根根导线的集合。根据传送信息的不同,总线从逻辑上又分为3类,地址总线、控制总线和数据总线。8086CPU有20条地址总线、16条控制总线和16条数据总线。
要让一个计算机或微处理器工作,应向它输入能够驱动它进行工作的电平信息(机器码)。例如:传送3 号单元的内容入AX
- 机器码:10100001 00000011 00000000
- 对应的汇编指令:MOV AX,[3]
2.2 地址总线
「地址总线(AB)」 用来传递地址信息。因地址总是从CPU送出去的,所以地址总线通常是单向的。假设,一个CPU有10根地址总线,如图所示,它发出地址信息11时10根地址线上传送的高低电平信号的二进制信息就为11对应的二进制数00 0000 1011。
一 个 CPU有 N 根地址线,则可以说这个CPU的地址总线的宽度为N这样的CPU最多可以寻找次方个内存单元。8086CPU的20根地址线(A19A16,A15A0)可以全部用来给外部存储器提供地址,所以8086可寻址的外部存储器地址空间达字节即1MB。
2.3 数据总线
「数据总线(DB)」 用来传输数据。数据总线是双向的,即数据既可以从CPU送到其他部件,也可以从其他部件送到CPU。
数据总线的宽度 决定了CPU和外界的数据传送速度。8根数据总线一次可传送一个8位二进制数据(即一个字节),16根数据总线一次可传送两个字节。
例如,8086有16根数据线,可一次传送16位数据,所以可一次传送数据89D8H;而 8088只有 8 根数据线,一次只能传8 位数据,所以向内存写入数据89D8H时需要进行两次数据传送。
2.4 控制总线
「控制总线(CB)」 用来传输控制信号。其中包括CPU送往存储器和输入/输出接口的控制信号,还包括其他部件送到CPU的信号。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力。
3 各类存储器芯片
3.1 随机存储器和只读存储器。
一台PC机中,装有多个存储器芯片,这些存储器芯片从物理连接上看是独立的、不同的器件。从读写属性上看分为两类:随机存储器(RAM)和只读存储器(ROM)。
「随机存储器」 可读可写,但必须带电存储,关机后存储的内容丢失; 「只读存储器」 只能读取不能写入, 关机后其中的内容不丢失。下展示了 PC系统中各类存储器的逻辑连接情况。
3.2 内存地址空间
CPU在操控存储器的时候,把它们都当作内存来对待,把它们总的看作一个由若干存储单元组成的一个逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。下图展示了CPU将系统中各类存储器看作一个逻辑存储器的情况
内存地址空间的大小受CPU地址总线宽度的限制。8086CPU的地址总线宽度为20, 可以传送 个不同的地址信息,即可以定位个内存单元,则8086PC的内存地址空间大小为1MB。下图展示了 8086PC机内存地址空间分配的基本情况。
从地址0〜9FFFF的内存单元中读取数据,实际上就是在读取主随机存储器中的数据;向地址AOOOO-BFFFF的内存单元中写数据,就是向显存中写入数据, 这些数据会被显示卡输出到显示器上;我们向地址C0000〜 FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。
-
存储器
+关注
关注
38文章
7423浏览量
163489 -
cpu
+关注
关注
68文章
10798浏览量
210708 -
计算机
+关注
关注
19文章
7337浏览量
87616 -
汇编语言
+关注
关注
14文章
407浏览量
35676 -
编译器
+关注
关注
1文章
1615浏览量
49007
发布评论请先 登录
相关推荐
评论