前言:什么是汇编
汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果你想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的。原因很简单,我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。想深入研究英国文化,不会英语行吗?汇编语言是和具体的微处理器相联系的,每一种微处理器的汇编语言都不一样,只能通过一种常用的、结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本的目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。这两个目的达到了,其他目的也就自然而然地达到了。举例来说,你在学习操作系统等课程时,对许多问题就会有很通透的理解。(本篇文章参考王爽老师的汇编语言(第三版))
一、基础知识篇
汇编语言是直接在硬件上工作的编程语言,要想了解汇编,我们首先要了解硬件系统结构,本章对仅仅对硬件的一部分进行讲解,后续用到的我们后面再讲
1.机器语言
机器语言是机器指令的集合,机器指令就是可以被机器执行的命令,计算机的机器指令是就是一列二进制数字,计算机将其转变为高低电平,是计算机进行运算。
但是机器语言有很大的弊端,就是不容易阅读和记忆,比如在显示器上输出”welcome to masm“机器码如下:
如果有哪里的‘1‘不小心被写成’0’,根本无法查找
- 所以为了便于阅读和记忆,汇编语言产生了,汇编语言为汇编指令组成,,汇编指令是机器指令便于记忆的书写格式
2.汇编语言的组成
汇编语言由以下三类指令组成
(1)汇编指令
(2)伪指令
(2)其他符号
3.存储器
CPU是计算机的核心部件,它控制整个计算机的运作并进行运算,要想让CPU工作,就必须向他提供指令和数据,指令和数据存储在存储器中,也就是我们说的内存,离开内存,再好的CPU也无法工作,就像大脑,没有记忆再聪明也无法思考,硬盘于内存不同,硬盘上的数据如果想被CPU使用,就必须先读取到内存中,要想灵活的使用汇编语言,我们要先了解CPU是如何从内存中读取和写入信息的。
4.指令和数据
指令和数据都是应用上的概念,在内存或磁盘上,指令和数据本质上没有任何区别,都是由二进制信息组成,在CPU工作的时候,把一些信息看成指令处理,一些数据看成数据处理。
例如,内存中的二进制信息 1000100111011000,计算机可以把它看作大小为89D8H的数据来处理,也可以将其看作指令mov ax,bx来执行。
100o100111011000一> 89D8H(数据)
1000100111011000-> mov ax,bx(程序)
5.存储单元
存储器被分成若干个存储单元,每个存储单元从0开始编号(从0开始是因为从 0 开始对机器友好,从 1 开始对人友好。不论是几进制都是从0开始的),每个存储单元是一个Byte,即8个bit,一个存储器有128个存储单元,它可以存储128个Byte,对于大容量的存储器我们还可以用以下单来计量。
1kb=1024Byte 1MB=1024kb 1GB=1024MB 1TB=1024GB
6.CPU对存储器的读写
存储器被划分为多个存储单元,存储单元从零开始顺序编号,这里的编号可以看作存储单元在存储器中的地址,就像每个房子都有自己的门牌号。
CPU想要读取数据,首先要指定存储单元的地址,也就是想要读取哪个位置的数据。
但是在一台计算机中,不只有存储器这一种器件,CPU在读写数据时还要指明要对哪一个期间进行操作,是要读取数据还是写入数据
可见,CPU如果想要进行数据的读写,必须和外部器件进行下面三类信息的交互
存储单元的地址(地址信息)
选择读或写(控制信息)
读或写的数据(数据信息)
CPU是怎么讲地址、数据、控制信息传到1存储器中的呢,计算机能处理传输的信息都是电信号,传输电信号当然要用导线,在计算机中有专门连接CPU和其他芯片的导线,又称为总线,就是一根根导线的集合,总线分为三类,地址总线、控制总线、数据总线。
CPU读取数据过程
(1) CPU通过地址总线将地址信息发送给内存
(2)CPU通过控制总线发出读取命令,告诉内存我要读取
(3)存储器将对应地址位置的数据通过数据总线发送给CPU
CPU写入过程与上面类似
(1)CPU通过地址总线将地址信息发送给内存
(2)CPU通过控制总线发出写入命令
(3)CPU通过数据总线将数据传给地址对应的内存
7.地址总线
CPU是通过地址总线来指定存储器单元的,可见地址总线上能传送多少不同的信息,CPU就可以找到多少对应的地址。
假设CPU有十根地址总线,我们知道,在计算机中,每根导线传送的状态只有两种,高电平或者低电平,二进制表示也就是0或者1,十根总线代表能传送是十位二进制数据,十位二进制数据可以组成多少个不同的组合呢?2的10次方个,最小数为0,最大数为1023.所有如果有n根地址总线,可寻找的内存单元就为2的n次方个。
8.数据总线
CPU与内存或其他期间之间的数据传输都是通过过数据总线进行的,数据总线的宽度决定了CPU和外界的数据传送速度,一根数据总线代表每次可以传送一位二进制数据,八根数据总线能传送八位二进制数据,也就是一个字节。
那么如果数总线为8根,一字节就需要传输一次,两字节就需要传输两次。
9.控制总线
CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU对外部器件的控制能力。
小结
(1)汇编指令是机器指令的助记符,同机器指令一—对应。
(2)每一种CPU都有自己的汇编指令集。(1)汇编指令是机器指令的助记符,同机器指令一—对应。
(3) CPU可以直接使用的信息在存储器中存放。
(4)在存储器中指令和数据没有任何区别,都是二进制信息。
(5)存储单元从零开始顺序编号。
(6)一个存储单元可以存储8个bit,即八位二进制数
(7)1Byte=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB.
(8)每一个 CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。CPU 可以引出3种总线的宽度标志了这个CPU的不同方面的性能:
地址总线的宽度决定了CPU的寻址能力;
数据总线的宽度决定了CPU与其他器件进行数据传送时的一次数据传送量:控制总线的宽度决定了CPU对系统中其他器件的控制能力。
在汇编课程中,我们从功能的角度介绍了3类总线,对实际的连接情况不做讨论。
课后习题
王爽老师规定,要想学习下一章那么必须先学会此章的课后习题,否则不许向后学习。
(1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 ___
(2)1KB的存储器有____ 个存储单元。存储单元的编号从 __ 到 __
(3)1KB的存储器可以存储__ 个bit,__ 个Byte.
(4)1GB、1MB、1KB分别是___Byte.
(5) 8080、8088、80286、80386的地址总线宽度分别为16 根、20 根、24根、32根,则它们的寻址能力分别为: __ (KB)、__ (MB)、 __ (MB)、__ (GB).
(6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:__ (B)、 __ (B)、__ (B)、__ (B)、__ (B).
(7)从内存中读取1024字节的数据,8086至少要读__ 次,80386至少要读__ 次。
(8)在存储器中,数据和程序以___形式存放。
课后习题答案
(1) 13
(2) 1024 0 1023
(3) 8192 1024
(4) 1073741824(2^30) 1048576(2^20) 1024(2^10)
(5) 64 1 16 4
(6) 1 1 2 2 4
(7) 512 256
(8) 二进制
讲解:
(1)1KB=1024B 8KB=8192B=2^n n=13
(2)1存储单元为1Byte,1KB=1024B,也就是1024个存储单元,存储单元编号从0开始,数1024个也就是0到1023
(3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。
(4)1GB=1073741824B(即2^30 )1MB=1048576B(即2^20 )1KB=1024B(即2^10)。
(5)CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。
(6)每八根可以传输八个二进制数据,也就是八个bit,8bit=1Byte以此类推
(7)8086数据总线是16根,每次可传输16bit也就是2Byte,1KB=1024Byte 1024/2=512
同理1024/4B=256
(8)在存储器中指令和数据没有区别,都以二进制存放
这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。
(6)每八根可以传输八个二进制数据,也就是八个bit,8bit=1Byte以此类推
(7)8086数据总线是16根,每次可传输16bit也就是2Byte,1KB=1024Byte 1024/2=512
同理1024/4B=256
(8)在存储器中指令和数据没有区别,都以二进制存放
完结
创作不易,还请各位小伙伴多多点赞👍关注✨收藏⭐