基础知识 01

来源:互联网 发布:宝宝学英语单词软件 编辑:程序博客网 时间:2024/06/05 04:14

让编程改变世界

Change the world by program

转自:http://blog.fishc.com/218.html#codesyntax_1

引言

汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。

在本章中,对硬件系统结构的问题进行一部分的探讨,以使后续的课程可在一个好的基础上进行。

当课程进行到需要补充新的基础知识(关于编程结构或其他的)时候,再对相关的基础知识进行介绍和探讨。

本书的原则是,以后用到的知识,以后再说。

汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。

 

机器语言

机器语言是机器指令的集合。

机器指令展开来讲就是一台机器可以正确执行的命令。

指令:01010000 (PUSH AX)

 

电平脉冲:

电子脉冲示例图

 

早期的程序员们将 0、1 数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。

后来呢,逐渐使用高科技……但打洞洞是始祖~

S = 768 + 12288 – 1280

机器码:

101100000000000000000011

000001010000000000110000

001011010000000000000101

假如将程序错写成以下这样,请找处错误:

101100000000000000000011

000001010000000000110000

000101101000000000000101

 

在显示器上输出“welcome to masm”。

; welcome to masm 机器码:     00011110    101110000000000000000000    01010000    101110001100011000001111    1000111011011000    1011010000000110    1011000000000000    1011011100000111    101110010000000000000000    1011011000011000    1011001001001111    1100110100010000    1011010000000010    1011011100000000    1011011000000000    1011001000000000    1100110100010000    1011010000001001    10001101000101100010101000000000    1100110100100001    1011010000001010    10001101000101100011000100000000    1100110100100001    1011010000000110    1011000000010100    1011011100011001    1011010100001011    1011000100010011    1011011000001101    1011001000111100    1100110100010000    1101010000000010    1101011100000000    1101000000001100    1101001000010100    1100110100010000    1011010000001001    10001101000101100000000000000000    1100110100100001    11001011

看到这样的程序,你会有什么感想?

如果程序里有一个“ 1 ”被误写为“ 0 ”,又如何去查找呢?

 

汇编语言的产生

 

汇编语言的主体是汇编指令

汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。

汇编指令是机器指令的助记符。

机器指令: 1000100111011000

操作:寄存器 BX的内容送到AX中

汇编指令:MOV AX,BX

这样的写法与人类语言接近,便于阅读和记忆。

 

寄存器:简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。

AX是其中一个寄存器的代号,

BX是另一个寄存器的代号。

更详细的内容我们在以后的课程中将会讲到。

计算机能读懂的只有机器指令,那么如何让计算机执行程序员用汇编指令编写的程序呢?

汇编语言的组成

汇编语言由以下3类组成:

1、汇编指令(机器码的助记符)

2、伪指令 (由编译器执行)

3、其它符号(由编译器识别)

汇编语言的核心是汇编指令,它决定了汇编语言的特性。

 

存储器

CPU 是计算机的核心部件.它控制整个计算机的运作并进行运算,要想让一个CPU 工作,就必须向它提供指令和数据。

指令和数据在存储器中存放,也就是平时所说的内存。

在一台PC机中内存的作用仅次于CPU。

离开了内存,性能再好的CPU也无法工作。

磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被CPU 使用。

 

指令和数据

指令和数据是应用上的概念。

在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。

二进制信息:

1000100111011000

─> 89D8H (数据)

1000100111011000

─> MOV AX,BX (程序)

 

存储单元

存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号;

例如:

一个存储器有128个存储单元,

编号从0~127。

存储器

 

对于大容量的存储器一般还用以下单位来计量容量(以下用B来代表Byte):

1KB=1024B

1MB=1024KB

1GB=1024MB

1TB=1024GB

磁盘的容量单位同内存的一样,实际上以上单位是微机中常用的计量单位。

 

CPU对存储器的读写

CPU要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行三类信息的交互:

存储单元的地址(地址信息)

器件的选择,读或写命令(控制信息)

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

那么CPU是通过什么将地址、数据和控制信息传到存储芯片中的呢?

电子计算机能处理、传输的信息都是电信号,电信号当然要用导线传送。

在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。

 

物理上:一根根导线的集合;

逻辑上划分为:

地址总线

数据总线

控制总线

 

总线在逻辑上划分的图示:

总线在逻辑上划分

 

CPU在内存中读或写的数据演示:

读:

 

写:

上节课我们知道CPU是如何进行数据读写的。可是我们如何命令计算机进行数据的读写呢?

对于8086CPU,下面的机器码能够完成从3号单元读数据:

机器码: 101000000000001100000000

含义:从3号单元读取数据送入寄存器AX

CPU接收这条机器码后将完成上面所述的读写工作。

 

地址总线

 

CPU是通过地址总线来指定存储单元的。

地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。

那么,地址总线如何发送地址信息呢?

地址总线

 

一个CPU有N根地址总线,则可以说这个CPU的地址总线的宽度为N。

这样的CPU最多可以寻找2的N次方个内存单元。

CPU与内存或其它器件之间的数据传送是通过数据总线来进行的。

数据总线的宽度决定了CPU和外界的数据传送速度。

我们来分别看一下它们向内存中写入数据89D8H时,是如何通过数据总线传送数据的:

 

8位数据总线上传送的信息

8位数据总线上传送的信息

 

16位数据总线上传送的信息

16位数据总线上传送的信息

 

控制总线

 

CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。

有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。

所以,控制总线的宽度决定了CPU对外部器件的控制能力。

 

控制总线上发送的控制信息

控制总线上发送的控制信息

 

前面所讲的内存读或写命令是由几根控制线综合发出的:

其中有一根名为读信号输出控制线负责由CPU 向外传送读信号,CPU 向该控制线上输出低电平表示将要读取数据;

有一根名为写信号输出控制线负责由CPU向外传送写信号。

小结

(1)汇编指令是机器指令的助记符,同机器指令一一对应。

(2)每一种CPU都有自己的汇编指令集。

(3)CPU可以直接使用的信息在存储器中存放。

(4)在存储器中指令和数据没有任何区别,都是二进制信息。

(5)存储单元从零开始顺序编号。

(6)一个存储单元可以存储 8 个 bit (用作单位写成“b”),即 8 位二进制数。

(7)1B = 8b 1KB = 1024B 1MB = 1024KB 1GB = 1024MB

(8)每一个CPU芯片都有许多管脚,这些管脚和总线相连。也可以说,这些管脚引出总线。

 

一个CPU可以引出三种总线的宽度标志了这个CPU的不同方面的性能:

 

地址总线的宽度决定了CPU的寻址能力;

数据总线的宽度决定了CPU与其它器件进行数据传送时的一次数据传送量;

控制总线宽度决定了CPU对系统中其它器件的控制能力。

在汇编课程中,我们从功能的角度介绍了这三类总线,对实际的连接情况不做讨论。

内存地址空间(概述)

 

什么是内存地址空间呢?

一个CPU的地址线宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。下面深入讨论。

首先需要介绍两部分基本知识,主板和接口卡。

 

主板

在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件。

这些器件通过总线(地址总线、数据总线、控制总线)相连。

 

接口卡

计算机系统中,所有可用程序控制其工作的设备,必须受到CPU的控制。

CPU对外部设备不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡。

 

各类存储器芯片

 

从读写属性上看分为两类:

随机存储器(RAM)和只读存储器(ROM)

 

从功能和连接上分类:

随机存储器RAM

接口卡上的RAM

装有BIOS的ROM

 

BIOS:Basic Input/Output System,基本输入输出系统。

BIOS 是由主板和各类接口卡(如:显卡、网卡等)厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接口卡上插有存储相应 BIOS 的 ROM。

PC机中各类存储器的逻辑连接情况

 

内存地址空间

上述的那些存储器在物理上是独立的器件。

 

但是它们在以下两点上相同:

1、都和CPU的总线相连。

2、CPU对它们进行读或写的时候都通过控制线发出内存读写命令。

 

将各各类存储器看作一个逻辑存储器:

将各各类存储器看作一个逻辑存储器

假设,上图中的内存空间地址段分配如下:

地址0~7FFFH的32KB空间为主随机存储器的地址空间;

地址8000H~9FFFH的8KB空间为显存地址空间;

地址A000H~FFFFH的24KB空间为各个ROM的地址空间。

 

所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器;

每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间;

CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。

不同的计算机系统的内存地址空间分配情况是不同的。

 

8086PC机的内存地址空间分配

8086PC机的内存地址空间分配

 

最终运行程序的是CPU,我们用汇编编程的时候,必须要从CPU角度考虑问题。

(我们学习这门课程的核心思维)

对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。



0 0
原创粉丝点击