汇编语言第3版IT168文库Word文档下载推荐.docx

上传人:b****4 文档编号:7191810 上传时间:2023-05-08 格式:DOCX 页数:57 大小:2.71MB
下载 相关 举报
汇编语言第3版IT168文库Word文档下载推荐.docx_第1页
第1页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第2页
第2页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第3页
第3页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第4页
第4页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第5页
第5页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第6页
第6页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第7页
第7页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第8页
第8页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第9页
第9页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第10页
第10页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第11页
第11页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第12页
第12页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第13页
第13页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第14页
第14页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第15页
第15页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第16页
第16页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第17页
第17页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第18页
第18页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第19页
第19页 / 共57页
汇编语言第3版IT168文库Word文档下载推荐.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

汇编语言第3版IT168文库Word文档下载推荐.docx

《汇编语言第3版IT168文库Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《汇编语言第3版IT168文库Word文档下载推荐.docx(57页珍藏版)》请在冰点文库上搜索。

汇编语言第3版IT168文库Word文档下载推荐.docx

写如此小的一个程序尚且如此,实际上一个有用的程序至少要有几十行机器码,那么,情况将怎么样呢?

在显示器上输出“welcometomasm”,机器码如下。

00011110

101110000000000000000000

01010000

101110001100011000001111

1000111011011000

1011010000000110

1011000000000000

1011011100000111

101110010000000000000000

1011011000011000

1011001001001111

1100110100010000

1011010000000010

1011011100000000

1011011000000000

1011001000000000

1011010000001001

10001101000101100010101000000000

1100110100100001

1011010000001010

10001101000101100011000100000000

1011000000010100

1011011100011001

1011010100001011

1011000100010011

1011011000001101

1011001000111100

1011000000001100

1011001000010100

10001101000101100000000000000000

11001011

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

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

1.2汇编语言的产生

早期的程序员们很快就发现了使用机器语言带来的麻烦,它是如此难于辨别和记忆,给整个产业的发展带来了障碍。

于是汇编语言产生了。

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

汇编指令和机器指令的差别在于指令的表示方法上。

汇编指令是机器指令便于记忆的书写格式。

例如:

机器指令1000100111011000表示把寄存器BX的内容送到AX中。

汇编指令则写成movax,bx。

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

操作:

寄存器BX的内容送到AX中

机器指令:

1000100111011000

汇编指令:

movax,bx

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

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

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

此后,程序员们就用汇编指令编写源程序。

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

这时,就需要有一个能够将汇编指令转换成机器指令的翻译程序,这样的程序我们称其为编译器。

程序员用汇编语言写出源程序,再用汇编编译器将其编译为机器码,由计算机最终执行。

图1.1描述了这个工作过程。

图1.1用汇编语言编写程序的工作过程

1.3汇编语言的组成

汇编语言发展至今,有以下3类指令组成。

(1)汇编指令:

机器码的助记符,有对应的机器码。

(2)伪指令:

没有对应的机器码,由编译器执行,计算机并不执行。

(3)其他符号:

如+、-、*、/等,由编译器识别,没有对应的机器码。

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

1.4存储器

CPU是计算机的核心部件,它控制整个计算机的运作并进行运算。

要想让一个CPU工作,就必须向它提供指令和数据。

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

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

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

这就像再聪明的大脑,没有了记忆也无法进行思考。

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

要灵活地利用汇编语言编程,我们首先要了解CPU是如何从内存中读取信息,以及向内存中写入信息的。

1.5指令和数据

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

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

CPU在工作的时候把有的信息看作指令,有的信息看作数据,为同样的信息赋予了不同的意义。

就像围棋的棋子,在棋盒里的时候没有任何区别,在对弈的时候就有了不同的意义。

例如,内存中的二进制信息1000100111011000,计算机可以把它看作大小为89D8H的数据来处理,也可以将其看作指令movax,bx来执行。

1000100111011000->

89D8H(数据)

movax,bx(程序)

1.6存储单元

图1.2存储单元的编号

存储器被划分成若干个存储单元,每个存储单元从0开始顺序编号,例如一个存储器有128个存储单元,编号从0~127,如图1.2所示。

那么一个存储单元能存储多少信息呢?

我们知道电子计算机的最小信息单位是bit(音译为比特),也就是一个二进制位。

8个bit组成一个Byte,也就是通常讲的一个字节。

微型机存储器的存储单元可以存储一个Byte,即8个二进制位。

一个存储器有128个存储单元,它可以存储128个Byte。

微机存储器的容量是以字节为最小单位来计算的。

对于拥有128个存储单元的存储器,我们可以说,它的容量是128个字节。

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

1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB

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

1.7CPU对存储器的读写

以上讲到,存储器被划分成多个存储单元,存储单元从零开始顺序编号。

这些编号可以看作存储单元在存储器中的地址。

就像一条街,每个房子都有门牌号码。

CPU要从内存中读数据,首先要指定存储单元的地址。

也就是说它要先确定它要读取哪一个存储单元中的数据。

就像在一条街上找人,先要确定他住在哪个房子里。

另外,在一台微机中,不只有存储器这一种器件。

CPU在读写数据时还要指明,它要对哪一个器件进行操作,进行哪种操作,是从中读出数据,还是向里面写入数据。

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

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

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

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

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

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

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

总线从物理上来讲,就是一根根导线的集合。

根据传送信息的不同,总线从逻辑上又分为3类,地址总线、控制总线和数据总线。

CPU从3号单元中读取数据的过程(见图1.3)如下。

图1.3CPU从内存中读取数据的过程

(1)CPU通过地址线将地址信息3发出。

(2)CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据。

(3)存储器将3号单元中的数据8通过数据线送入CPU。

写操作与读操作的步骤相似。

如向3号单元写入数据26。

(2)CPU通过控制线发出内存写命令,选中存储器芯片,并通知它,要向其中写入数据。

(3)CPU通过数据线将数据26送入内存的3号单元中。

从上面我们知道了CPU是如何进行数据读写的。

可是,如何命令计算机进行数据的读写呢?

要让一个计算机或微处理器工作,应向它输入能够驱动它进行工作的电平信息(机器码)。

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

机器码:

101000010000001100000000

含义:

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

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

机器码难于记忆,用汇编指令来表示,情况如下。

101000010000001100000000

对应的汇编指令:

MOVAX,[3]

传送3号单元的内容入AX

1.8地址总线

现在我们知道,CPU是通过地址总线来指定存储器单元的。

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

现假设,一个CPU有10根地址总线,让我们来看一下它的寻址情况。

我们知道,在电子计算机中,一根导线可以传送的稳定状态只有两种,高电平或是低电平。

用二进制表示就是1或0,10根导线可以传送10位二进制数据。

而10位二进制数可以表示多少个不同的数据呢?

2的10次方个。

最小数为0,最大数为1023。

图1.4展示了一个具有10根地址线的CPU向内存发出地址信息11时10根地址线上传送的二进制信息。

考虑一下,访问地址为12、13、14等的内存单元时,地址总线上传送的内容是什么?

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

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

图1.4地址总线上发送的地址信息

1.9数据总线

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

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

8根数据总线一次可传送一个8位二进制数据(即一个字节)。

16根数据总线一次可传送两个字节。

8088CPU的数据总线宽度为8,8086CPU的数据总线宽度为16。

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

图1.5展示了8088CPU数据总线上的数据传送情况;

图1.6展示了8086CPU数据总线上的数据传送情况。

图1.58位数据总线上传送的信息

图1.616位数据总线上传送的信息

8086有16根数据线,可一次传送16位数据,所以可一次传送数据89D8H;

而8088只有8根数据线,一次只能传8位数据,所以向内存写入数据89D8H时需要进行两次数据传送。

1.10控制总线

CPU对外部器件的控制是通过控制总线来进行的。

在这里控制总线是个总称,控制总线是一些不同控制线的集合。

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

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

前面所讲的内存读或写命令是由几根控制线综合发出的,其中有一根称为“读信号输出”的控制线负责由CPU向外传送读信号,CPU向该控制线上输出低电平表示将要读取数据;

有一根称为“写信号输出”的控制线则负责传送写信号。

1.1~1.10小结

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

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

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

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

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

(6)一个存储单元可以存储8个bit,即8位二进制数。

(7)1Byte=8bit1KB=1024B1MB=1024KB1GB=1024MB。

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

也可以说,这些管脚引出总线。

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

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

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

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

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

检测点1.1

(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.11内存地址空间(概述)

什么是内存地址空间呢?

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

下面进行深入讨论。

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

1.12主板

在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件,这些器件通过总线(地址总线、数据总线、控制总线)相连。

这些器件有CPU、存储器、外围芯片组、扩展插槽等。

扩展插槽上一般插有RAM内存条和各类接口卡。

1.13接口卡

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

CPU对外部设备都不能直接控制,如显示器、音箱、打印机等。

直接控制这些设备进行工作的是插在扩展插槽上的接口卡。

扩展插槽通过总线和CPU相连,所以接口卡也通过总线同CPU相连。

CPU可以直接控制这些接口卡,从而实现CPU对外设的间接控制。

简单地讲,就是CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。

1.14各类存储器芯片

一台PC机中,装有多个存储器芯片,这些存储器芯片从物理连接上看是独立的、不同的器件。

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

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

随机存储器可读可写,但必须带电存储,关机后存储的内容丢失;

只读存储器只能读取不能写入,关机后其中的内容不丢失。

这些存储器从功能和连接上又可分为以下几类。

●随机存储器

用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由两个位置上的RAM组成,装在主板上RAM和插在扩展插槽上的RAM。

●装有BIOS(BasicInput/OutputSystem,基本输入/输出系统)的ROM

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

在主板和某些接口卡上插有存储相应BIOS的ROM。

例如,主板上的ROM中存储着主板的BIOS(通常称为系统BIOS);

显卡上的ROM中存储着显卡的BIOS;

如果网卡上装有ROM,那其中就可以存储网卡的BIOS。

●接口卡上的RAM

某些接口卡需要对大批量输入、输出数据进行暂时存储,在其上装有RAM。

最典型的是显示卡上的RAM,一般称为显存。

显示卡随时将显存中的数据向显示器上输出。

换句话说,我们将需要显示的内容写入显存,就会出现在显示器上。

图1.7展示了PC系统中各类存储器的逻辑连接情况。

图1.7PC机中各类存储器的逻辑连接

1.15内存地址空间

上述的那些存储器,在物理上是独立的器件,但是在以下两点上相同。

●都和CPU的总线相连。

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

这也就是说,CPU在操控它们的时候,把它们都当作内存来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。

在汇编这门课中,我们所面对的是内存地址空间。

图1.8展示了CPU将系统中各类存储器看作一个逻辑存储器的情况。

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

在图1.8中,所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器,每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。

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

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

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

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

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

这样,CPU向内存地址为1000H的内存单元中写入数据,这个数据就被写入主随机存储器中;

CPU向内存地址为8000H的内存单元中写入数据,这个数据就被写入显存中,然后会被显卡输出到显示器上;

CPU向内存地址为C000H的内存单元中写入数据的操作是没有结果的,C000H单元中的内容不会被改变,C000H单元实际上就是ROM存储器中的一个单元。

内存地址空间的大小受CPU地址总线宽度的限制。

8086CPU的地址总线宽度为20,可以传送220个不同的地址信息(大小从0至220–1)。

即可以定位220个内存单元,则8086PC的内存地址空间大小为1MB。

同理,80386CPU的地址总线宽度为32,则内存地址空间最大为4GB。

我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。

因为当我们想在某类存储器中读写数据的时候,必须知道它的第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。

比如,我们希望向显示器输出一段信息,那么必须将这段信息写到显存中,显卡才能将它输出到显示器上。

要向显存中写入数据,必须知道显存在内存地址空间中的地址。

不同的计算机系统的内存地址空间的分配情况是不同的,图1.9展示了8086PC机内存地址空间分配的基本情况。

图1.98086PC机内存地址空间分配

图1.9告诉我们,从地址0~9FFFF的内存单元中读取数据,实际上就是在读取主随机存储器中的数据;

向地址A0000~BFFFF的内存单元中写数据,就是向显存中写入数据,这些数据会被显示卡输出到显示器上;

我们向地址C0000~FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。

内存地址空间

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

对CPU来讲,系统中的所有存储器中的存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。

这个逻辑存储器即是我们所说的内存地址空间。

对于初学者,这个概念比较抽象,我们在后续的课程中将通过一些编程实践,来增加感性认识。

第2章寄存器

一个典型的CPU(此处讨论的不是某一具体的CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。

前一章所说的总线,相对于CPU内部来说是外部总线。

内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。

简单地说,在CPU中:

●运算器进行信息处理;

●寄存器进行信息存储;

●控制器控制各种器件进行工作;

●内部总线连接各种器件,在它们之间进行数据的传送。

对于一个汇编程序员来说,CPU中的主要部件是寄存器。

寄存器是CPU中程序员可以用指令读写的部件。

程序员通过改变各种寄存器中的内容来实现对CPU的控制。

不同的CPU,寄存器的个数、结构是不相同的。

8086CPU有14个寄存器,每个寄存器有一个名称。

这些寄存器是:

AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

我们不对这些寄存器进行一次性的介绍,在课程的进行中,需要用到哪些寄存器,再介绍哪些寄存器。

2.1通用寄存器

8086CPU的所有寄存器都是16位的,可以存放两个字节。

AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

以AX为例,寄存器的逻辑结构如图2.1所示。

图2.116位寄存器的逻辑结构

一个16位寄存器可以存储一个16位的数据,数据在寄存器中的存放情况如图2.2所示。

想一想,一个16位寄存器所能存储的数据的最大值为多少?

8086CPU的上一代CPU中的寄存器都是8位的,为了保证兼容,使原来基于上代CPU编写的程序稍加修改就可以运行在8086之上,8086CPU的AX、BX、CX、DX这4个寄存器都可分为两个可独立使用的8位寄存器来用:

●AX可分为AH和AL;

●BX可分为BH和BL;

●CX可分为CH和CL;

●DX可分为DH和DL。

图2.216位数据在寄存器中的存放情况

以AX为例,8086CPU的16位寄存器分为两个8位寄存器的情况如图2.3所示。

图2.316位寄存器分为两个8位寄存器

AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。

AH和AL寄存器是可以独立使用的8位寄存器。

图2.4展示了16位寄存器及它所分成的两个8位寄存器的数据存储的情况。

想一想,一个8位寄存器所能存储的数据的最大

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2