下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 汇编语言+—+王爽+(第2版)

汇编语言+—+王爽+(第2版).doc

汇编语言+—+王爽+(第2版)

huanghongxin.1990
2011-03-25 0人阅读 举报 0 0 暂无简介

简介:本文档为《汇编语言+—+王爽+(第2版)doc》,可适用于IT/计算机领域

汇编语言(第版)王爽著清华大学出版社北京第章基础知识汇编语言是直接在硬件之上工作的编程语言我们首先要了解硬件系统的结构才能有效地应用汇编语言对其编程。在本章中我们对硬件系统结构的问题进行一部分的探讨以使后续的课程可在一个好的基础上进行。当课程进行到需要补充新的基础知识(关于编程结构或其他的)的时候再对相关的基础知识进行介绍和探讨。我们的原则是以后用到的知识以后再说。在汇编课程中我们不对硬件系统进行全面和深入的研究这不在课程的范围之内。关于PC机及CPU物理结构和编程结构的全面研究在《微机原理与接口》中进行对于计算机一般的结构、功能、性能的研究在一门称为《组成原理》的理论层次更高的课程中进行。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活地控制系统进行工作。.机器语言说到汇编语言的产生首先要讲一下机器语言。机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平以使计算机的电子器件受到驱动进行运算。上面所说的计算机指的是可以执行机器指令进行运算的机器。这是早期计算机的概念。现在在我们常用的PC机中有一个芯片来完成上面所说的计算机的功能。这个芯片就是我们常说的CPU(C',entt’alProcessingUnit中央处理单元)CPU是一种微处理器。以后我们提到的计算机是指由CPu和其他受CPU直接或问接控制的芯片、器件、设备组成的计算机系统比如我们最常见的PC机。每一种微处理器由于硬件设计和I内部结构的不同就需要用不同的电平脉冲来控制使它工作。所以每一种微处理器都有自己的机器指令集也就是机器语言。早期的程序设计均使用机器语言。程序员们将用、数字编成的程序代码打在纸带或卡片上l打孔不打孔再将程序通过纸带机或卡片机输入计算机进行运算。应用(:PU完成运算s=机器码如下。OlOlloll假如将程序错写成以下这样请你找出错误。OOOwWW.TOpSage.cOm汇编语言(第版)一/P书写和阅读机器码程序不是一件简单的工作要记住所有抽象的二进制码。上面只是一个非常简单的小程序就暴露了机器码的晦涩难懂和不易查错。写如此小的一个程序尚且如此实际上一个有用的程序至少要有几十行机器码那么情况将怎么样呢在显示器上输出“welcometomasm”机器码如下。llllllOlllOOOllOlOllOllllllOOl看到这样的程序你有什么感想如果程序里有一个“”被误写为“”又如何去查找呢www.TopSage.cOm第章基础知识.汇编语言的产生早期的程序员们很快就发现了使用机器语言带来的麻烦它是如此难于辨别和记忆给整个产业的发展带来了障碍。于是汇编语言产生了。汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。例如:机器指令表示把寄存器BX的内容送到Ax中。汇编指令则写成movax’bx。这样的写法与人类语言接近便于阅读和记忆。操作:寄存器BX.的内容送到AX中机器指令:l汇编指令:movax,bx(寄存器简单地讲是CPIJ中可以存储数据的器件一个CPtJ中有多个寄存器。AX是其中一个寄存器的代号BX是另一个寄存器的代号。更详细的内容我们在以后的课程中将会讲到。)此后程序员们就用汇编指令编写源程序。可是计算机能读懂的只有机器指令那么如何让计算机执行程序员用汇编指令编写的程序呢这时就需要有一个能够将汇编指令转换成机器指令的翻译程序这样的程序我们称其为编译器。程序员用汇编语言写出源程序再用汇编编译器将其编译为机器码由计算机最终执行。图.描述了这个工作过程。^筮程序员图.用汇编语言编写程序的工作过程.汇编语言的组成汇编语言发展至今有以下类指令组成。()汇编指令:机器码的助记符有对应的机器码。()伪指令:没有对应的机器码由编译器执行计算机并不执行。()其他符号:如、一、、/等由编译器识别没有对应的机器码。汇编语言的核心是汇编指令它决定了汇编语言的特性。wVc~vV.TopSage.cOm汇编语言(第版)。存储器CPIJ是计算机的核心部件它控制整个计算机的运作并进行运算。要想让一个CPIJ工作就必须向它提供指令和数据。指令和数据在存储器中存放也就是我们平时所说的内存。在一台PC机中内存的作用仅次于CPIj。离开了内存性能再好的CPIJ也无法工作。这就像再聪明的大脑没有了记忆也无法进行思考。磁盘不同于内存磁盘上的数据或程序如果不读到内存中就无法被CPJ使用。要灵活地利用汇编语言编程我们首先要了解CPIJ是如何从内存中读取信息以及向内存中写入信息的。.指令和数据指令和数据是应用上的概念。在内存或磁盘上指令和数据没有任何区别都是二进制信息。cPu在工作的时候把有的信息看作指令有的信息看作数据为同样的信息赋予了不同的意义。就像围棋的棋子在棋盒里的时候没有任何区别在对弈的时候就有了不同的意义。例如内存中的二进制信息计算机可以把它看作大小为)H的数据来处理也可以将其看作指令movax,bx来执行。一>DH(数据)一>m。vaxbx(程序).存储单元存储器被划分成若干个存储单元每个存储单元从开始顺序编号例如一个存储器有个存储单元编号从~如图.所示。那么一个存储单元能存储多少信息呢我们知道电子计算机的最小信息单位是bit(音译为比特也就是一个二进制位。个bit组成一个Byte也就是通常讲的一个字节。微型机存储器的存储单元可以存储一个Byte即个二进制位。一个存储器有个存储单元它可以存储个Byte。微机存储器的容量是以字节为最小单位来计算的。对于拥:有个存储单元的存储器我们可以说它的容量是个字节。对于大容量的存储器一般还用以下单位来计量容量(以下用B来代表Byte):www.TopSage.com图.存储单元的编号第章基础知识KB=BMB=KBGB=MBTB一GB磁盘的容量单位同内存的一样实际上以上单位是微机中常用的计量单位。.CPU对存储器的读写以上讲到存储器被划分成多个存储单元存储单元从零开始顺序编号。这些编号可以看作存储单元在存储器中的地址。就像一条街每个房子都有门牌号码。cPU要从内存中读数据首先要指定存储单元的地址。也就是说它要先确定它要读取哪一个存储单元中的数据。就像在一条街上找人先要确定他住在哪个房子里。另外在一台微机中不只有存储器这一种器件。CPu在读写数据时还要指明它要对哪一个器件进行操作进行哪种操作是从中读出数据还是向里面写入数据。可见CPI.J要想进行数据的读写必须和外部器件(标准的说法是芯片)进行下面类信息的交互。.·存储单元的地址(地址信息)·器件的选择读或写的命令(控制信息)·读或写的数据(数据信息)。那么cPU是通过什么将地址、数据和控制信息传到存储器芯片中的呢电子计算机能处理、传输的信息都是电信号电信号当然要用导线传送。在计算机中专门有连接cPu和其他芯片的导线通常称为总线。总线从物理上来讲就是一根根导线的集合。根据传送信息的不同总线从逻辑上又分为类地址总线、控制总线和数据总线。cPu从号单元中读取数据的过程(见图.)如下。CPU内存图.CPLJ从内存中读取数据的过程()CPu通过地址线将地址信息发出。()CPIJ通过控制线发出内存读命令选中存储器芯片并通知它将要从中读取www.TopSage.cOm汇编语言(第版)数据。()存储器将号单元中的数据通过数据线送入CPIJ。写操作与读操作的步骤相似。如向号单元写入数据。(、CPIJ通过地址线将地址信息发出。()CPIJ通过控制线发出内存写命令选中存储器芯片并通知它要向其中写入数据。()CPIJ通过数据线将数据送入内存的号单元中。从上面我们知道了cPu是如何进行数据读写的。可是如何命令计算机进行数据的读写呢要让一个计算机或微处理器工作应向它输入能够驱动它进行工作的电平信息(机器码)。对于CPl~J下面的机器码能够完成从号单元读数据。机器码:O含义:从号单元读取数据送入寄存器AXCPJ接收这条机器码后将完成我们上面所述的读写工作。机器码难于记忆用汇编指令来表示情况如下。机器码:ll对应的汇编指令:MOVAx】含义:传送号单元的内容入AX。地址总线现在我们知道CPtJ是通过地址总线来指定存储器单元的。可见地址总线上能传送多少个不同的信息CPIJ就可以对多少个存储单元进行寻址。现假设一个CPlJ有根地址总线让我们来看一下它的寻址情况。我们知道在电子计算机中一根导线可以传送的稳定状态只有两种高电平或是低电平。用二进制表示就是或根导线可以传送位二进制数据。而位二进制数可以表示多少个不同的数据呢的次方个。最小数为最大数为。图.展示了一个具有根地址线的CP{J向内存发出地址信息l时根地址线上传送的二进制信息。考虑一下访问地址为、、等的内存单元时地址总线上传送的内容是什么一个CPI.J有N根地址线则可以说这个CPIJ的地址总线的宽度为N。这样的CPIj最多可以寻找的N次方个内存单元。wVOW.TopSage.cOm第章基础知识图.地址总线上发送的地址信息。数据总线CPU与内存或其他器件之问的数据传送是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传送速度。根数据总线一次可传送一个位二进制数据f即一个字节。根数据总线一次可传送两个字节。CPJ的数据总线宽度为(:Pu的数据总线宽度为。我们来分别看一下它们向内存中写入数据DHlfl寸I是如何通过数据总线传送数据的。图.展示了CPlJ数据总线上的数据传送情况图.展示了CPlj数据总线上的数据传送情况。:PU分两次传送D第一次传送D第二次传送。图.位数据总线上传送的信息www.TopSage.cOm汇编语言(第版)C:PU一次传送D图.位数据总线上传送的信息有根数据线可一次传送位数据所以可一次传送数据DH而只有根数据线一次只能传位数据所以向内存写入数据DH时需要进行两次数据传送。.控制总线CPIJ对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称控制总线是一些不同控制线的集合。有多少根控制总线就意味着CPJ提供了对外部器件的多少种控制。所以控制总线的宽度决定了CPJ对外部器件的控制能力。前面所讲的内存读或写命令是由几根控制线综合发出的其中有一根称为“读信号输出”的控制线负责由CPJ向外传送读信号CPu向该控制线上输出低电平表示将要读取数据有一根称为“写信号输出”的控制线则负责传送写信号。.~.小结()汇编指令是机器指令的助记符同机器指令一一刘‘应。f)每一种CPU都有自己的汇编指令集。()cPu可以直接使用的信息在存储器·卜存放。f)在存储器巾指令和数据没有任伺区别都是二进制信息。f)存储单元从零开始顺序编号。()一个存储单元可以存储个bit即位二进制数。()Byte=bilKB。BMB。KBlGB。MB。wVCV~.TopSage.cOm第章基础知识()每一个CPtJ芯片都有许多管脚这些管脚和总线州连。也司‘以说这些管脚引出总线。一个CPJ可以引出种总线的宽度标志了这个CPIj的不同方面的性能:地址总线的宽度决定了cPu的寻址能力:数据总线的宽度决定了cPu与其他器件进行数据传送时的一次数据传送量控制总线的宽度决定了cPU对系统中其他器件的控制能力。在汇编课程巾我们从功能的角度介绍了类总线刈实际的连接情况不做讨论。()个(PIJ的寻址能力为KB那么它的地址总线的宽度为。()lKB的存储器有个存储单元。存储单元的编号从到。()KB的存储器可以存储个biL个:Byte。()GB、MB、KB分别是Byte。f、、、的地址总线宽度分别为根、根、根、根则它们的寻址能力分别为:(KB)、(MB)、(MB)、(GB)。f、、、、的数据总线宽度分别为根、根、根、根、根。则它们一次可以传送的数据为:(B)、(B)、(B)、一(B)、(B)。()从内存中读取字节的数据至少要读次至少要读次。f)在存储器中数据和程序以形式存放。.内存地址空间(概述)什么是内存地址空间呢举例来讲一个CPU的地址总线宽度为那么可以寻址个内存单元这.个可寻到的内存单元就构成这个CPu的内存地址空问。下面进行深入讨论。首先需要介绍两部分基本知识主板和接口卡。.主板在每一台PC机中都有一个主板主板上有核心器件和一些主要器件这些器件通过总线(地址总线、数据总线、控制总线)相连。这些器件有cPu、存储器、外围芯片组、扩展插槽等。扩展插槽上一般插有RAM内存条和各类接口卡。。接口卡计算机系统中所有可用程序控制其工作的设备必须受到CPU的控制。(PIJ对外部设备都不能直接控制如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡。扩展插槽通过总线和CPu相连所以接口卡也通过总线同CPtJ相连。cPu可以直接控制这些接口卡从而实现CPJ对外设的间接控制。简单地讲就是CPLJ通过总线向接口卡发送命令接口卡根据cPu的命令控制外设进行工作。wWW.TOpSage.cOm汇编语言(第版)。易走甄网.各类存储器芯片一台PC机中装有多个存储器芯片这些存储器j枣片从物理连接上看是独立的、不同的器件。从读写属性上看分为两类:随机存储器(RAM)和只读存储器(ROM)。随机存储器可读可写但必须带电存储关机后存储的内容丢失只读存储器只能读取不能写入关机后其中的内容不丢失。这些存储器从功能和连接上又可分为以下几类。·随机存储器用于存放供CPJ使用的绝大部分程序和数据主随机存储器一般由两个位置上的RAM组成装在主板上RAM和插在扩展插槽上的RAM。·装有’BIOS(BasicInptlt/OtltputSystem基本输入/输出系统)的ROMBIOS是由主板和各类接口卡(如显卡、网卡等)厂商提供的软件系统可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接口卡上插有存储相应BIOS的ROM。例如主板上的ROM中存储着主板的BIOS(通常称为系统BIOS)显卡上的ROM中存储着显卡的.BI()S如果网卡上装有ROM那其中就可以存储网卡的BI()S。·接口卡上的RAM某些接口卡需要对大批量输入、输出数据进行暂时存储在其上装有M。最典型的是显示卡上的RAM一般称为显存。显示卡随时将显存中的数据向显示器上输出。换句话说我们将需要显示的内容写入显存就会出现在显示器上。图.展示了PC系统中各类存储器的逻辑连接情况。图PC机中各类存储器的逻辑连接wWV~.TopSage.cOm第l章基础知识。内存地址空间上述的那些存储器在物理上是独立的器件但是在以下两点上相同。·都和CPJ的总线相连。·CPI.J对它们进行读或写的时候都通过控制线发出内存读写命令。这也就是说CPJ在操控它们的时候把它们都当作内存来对待把它们总的看作一个由若干存储单元组成的逻辑存储器这个逻辑存储器就是我们所说的内存地址空间。在汇编这门课中我们所面对的是内存地址空间。图.展示了CPIJ将系统中各类存储器看作一个逻辑存储器的情况。图.将各类存储器看作一个逻辑存储器在图.中所有的物理存储器被看作一个由若干存储单元组成的逻辑存储器每个物理存储器在这个逻辑存储器中占有一个地址段即一段地址空间。CPu在这段地址空间中读写数据实际上就是在相对应的物理存储器中读写数据。wVOW.TopSage.cOm汇编语言(第版)假设图.中的内存地址空间的地址段分配如下。地址~FFFH的KB空间为主随机存储器的地址空间地址H~FFFH的KB空间为显存地址空间地址.AH~FFFFH的KB空问为各个。ROM的地址空间。这样CPIJ向内存地址为{的内存单元中写入数据这个数据就被写入主随机存储器中CPIJ向内存地址为~{的内存单元中写入数据这个数据就被写入显存中然后会被显卡输出到显示器上CPu向内存地址为CH:的内存单元中写入数据的操作是没有结果的CH单元中的内容不会被改变CH单元实际上就是ROM存储器中的一个单元。内存地址空问的大小受CPU地址总线宽度的限制。CPIJ的地址总线宽度为可以传送。。个不同的地址信息(大小从至)。即可以定位。。个内存单元则PC的内存地址空间大小为№。同理CPIJ的地址总线宽度为则内存地址空间最大为.GB。我们在基于一个计算机硬件系统编程的时候必须知道这个系统中的内存地址空间分配情况。因为当我们想在某类存储器中读写数据的时候必须知道它的第一个单元的地址和最后一个单元的地址才能保证读写操作是在预期的存储器中进行。比如我们希望向显示器输出一段信息那么必须将这段信息写到显存中显卡才能将它输出到显示器上。要向显存中写入数据必须知道显存在内存地址空间中的地址。不同的计算机系统的内存地址空间的分配情况是不同的图.展示了PC机内存地址空间分配的基本情况。图.PC机内存地址空间分配图.告诉我们从地址~FFFF的内存单元中读取数据实际上就是在读取主随机wWV~.TopSage.com蓑芸篓誊全篓罢示耋箩掌犁垩雾篓上我们向地址CO廿FF“高莴荐革亮军芙茹拓的操作是无效的因为这等于改写只读存储器中的内容。……“”…叫“姒啪w、^、v.TopSage.corn第章寄存器一个典型的CPIJ(此处讨论的不是某一具体的CPI.J)由运算器、控制器、寄存器(CPU工作原理)等器件构成这些器件靠内部总线相连。前一章所说的总线相对于CPI.J内部来说是外部总线。内部总线实现CPIJ内部各个器件之间的联系外部总线实现CPIJ和主板上其他器件的联系。简单地说在CPl.J中:·运算器进行信息处理·寄存器进行信息存储·控制器控制各种器件进行工作·内部总线连接各种器件在它们之间进行数据的传送。对于一个汇编程序员来说cPu中的主要部件是寄存器。寄存器是CPJ中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPI.J的控制。不同的CPJ寄存器的个数、结构是不相同的。CPlj有个寄存器每个寄存器有一个名称。这些寄存器是:AX、BX、CX、DX、sI、DI、SP、.BP、IP、CS、SS、:DS、ES、PSW。我们不对这些寄存器进行一次性的介绍在课程的进行中需要用到哪些寄存器再介绍哪些寄存器。。通用寄存器CPJ的所有寄存器挪j己位的可以存放两个字节。Ax、BX、CX、DX这个寄存器通常用来存放一股忡的数据被称为通用寄存器。以Ax为例寄存器的逻辑结构如图.所示。图.位寄存器的逻辑结构一个位寄存器可以存储一个位的数据数据在寄存器中的存放情况如图.所示。想一想一个位寄存器所能存储的数据的最大值为多少CPlT的上一代CPI.J中的寄存器都是位的为了保证兼容使原来基于上代CPIJ编写的程序稍加修改就可以运行在之上(PILJ的Ax、BX、CX、DX这个寄存器都可分为两个可独立使用的位寄存器来用:wWVq.TopSage.cOm第章寄存器·AX可分为AH和AL·BX可分为BH和BL·CX可分为CH和CL·DX可分为DH和DL。数据:二进制表示:在寄存器Ax中的存储数据:二进制表示:在寄存器AX中的存储:图.位数据在寄存器中的存放情况以Ax为例CPU的位寄存器分为两个位寄存器的情况如图.所示。lO图.位寄存器分为两个位寄存器AX的低t,(o位~位)构成了AL寄存器高位(,位)构成了AH寄存器。AH和AL寄存器是可以独立使用的位寄存器。图.展示了位寄存器及它所分成的两个位寄存器的数据存储的情况。想一想一个位寄存器所能存储的数据的最大值为多少w、^、v.TopSage.corn汇编语言(第版)AXAL┏━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┓┃寄存器┃寄存器中的数据┃所表示的值┃┣━━━━━╋━━━━━━━━━━╋━━━━━━━━━━┫┃AX┃lll┃(EH)┃┣━━━━━╋━━━━━━━━━━╋━━━━━━━━━━┫┃AH┃llO┃(E{)┃┣━━━━━╋━━━━━━━━━━╋━━━━━━━━━━┫┃AL┃┃(~{)┃┗━━━━━┻━━━━━━━━━━┻━━━━━━━━━━┛图.位寄存器及所分成的两个位寄存器的数据存储情况.字在寄存器中的存储出于对兼容性的考虑CP~J可以一次性处理以下两种尺寸的数据。·字节:记为byte一个字节由个bit组成可以存在位寄存器中。·字:记为word一个字由两个字节组成这两个字节分别称为这个字的高位字节和低位字节如图.所示。字:llOlL、./L一.J高位字节低位字节图.一个字由两个字节组成一个字可以存在一个位寄存器一中这个字的高位字节和低位字节自然就存在这个寄存器的高位寄存器和低位寄存器中。如图.所示一个字型数据存在AX寄存器中在AH中存储了它的高位在AL中存储了它的低位。AH和AL中的数据既可以看成是一个字型数据的高位和低位这个字型数据的大小是又可以看成是两个独立的字节型数据它们的大小分别是和。‘关于数制的讨论任何数据到了计算机}J都是以二进制的形式存放的。为了描述不同的问题又经常将它们用其他的进制来表示。比如图.中寄存器Axl=卜的数据是这就是AX中的一f~,、本身可以用不同的逻辑意义来看待它。可以将它看作一个数值大小是。wWV~.TopSage.com第章寄存器当然二进制数本身巴可表示一个数值的大小但人类刊惯的是十进制用}‘进制表示可以使我们直观地感受到这个数值的大小。十六进制数的一位相当于二进制数的四位如l】可表示成:()、E()、()、()四位十六进制数。由于一个内存单元可存放位数据cPu中的寄存器又可存放n个位的数据。也就是说计算机中的数据大多是由~N个位数据构成的。很多时候需要直观地看出组成数据的各个字节数据的值用十六进制来表示数据可以直观地看¨垃王个数据是由哪螳位数据构成的。比如写成E就可以直观地看出这个数据是由E和两个位数据构成的如果Axtlt存放E则AH里是EAL里是。这种表示方法便于许多I~NJ题的直观分析。在以后的课程中我们多用十六进制来表示一个数据。在以后的课程巾为了区分不同的进制在十六进制表示的数据的后面加H在二进制表示的数据后面加B十进制表示的数据后面什么也不加。如:可用利t不同的进制表示图.中AX里的数据十进制:十六进制:El二进制:B。.几条汇编指令通过汇编指令控制CPU进行工作看一下表.中的几条指令。表.汇编指令举例┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓┃汇编指令┃控制OPIJ完成的操作┃用高级语言的语法描述┃┣━━━━━━━╋━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movaX.┃将送入寄存器AX┃AX=┃┣━━━━━━━╋━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movah.┃将送入寄存器AH┃AH=┃┣━━━━━━━╋━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addax.┃将寄存器Ax巾的数值加上┃AX=AX┃┣━━━━━━━╋━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃mov’aX.bx┃将寄存器BX叶的数据送入寄存器Ax┃AX=BX┃┣━━━━━━━╋━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addax.bx┃将Ax和BX巾的数值州加结果存在Axr┃AX=AXBX┃┗━━━━━━━┻━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛注意为了使具有高级语言基础的读者更好地理解指令的含义有时会用文字描述和高级语言描述这两种方式来描述一条汇编指令的含义。在写一条汇编指令或一个寄存器的名称时不区分大小写。如:H=lovax和MOVAx的含义相同bx和Bx的含义相同。接下来看一下CPu执行表.中所列的程序段中的每条指令后对寄存器中的数据进行的改变。表.程序段中指令的执行情况之一(原AX中的值:原BX中的值:t)┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓┃程序段中的指令┃指令执行后AX中的数据┃指令执行后BX中的数据┃┣━━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movax,Et{┃EH┃F┃┣━━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addaxJH┃{┃~{┃┗━━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛wwYv.TOpSage.cOm汇编语言(第版)续表┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓┃程序段中的指令┃指令执行后A×中的数据┃指令执行后BX中的数据┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movbxH┃H┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addaxbx┃H┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movbx.aX┃H┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addax.bx┃f参见问题.┃H┃┗━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛指令执行后AX中的数据为多少思考后看分析。分析:程序段中的最后一条指令addaxbx在执行前ax和bx中的数据都为H相加后所得的值为:CH但是aX为位寄存器只能存放位十六进制的数据所以最高位的不能在ax中保存ax中的数据为:CH。表.中所列的一段程序的执行情况。表.程序段中指令的执行情况之二┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓┃程序段中的指令┃指令执行后AX中的数据┃指令执行后BX中的数据┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movaxAH┃AH┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movbxH┃AH┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addal。bl┃H┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addah.bI┃H。┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addbh.al┃H┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃movah┃H┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃addalH┃CH┃H┃┣━━━━━━━━━━╋━━━━━━━━━━━━━╋━━━━━━━━━━━━━┫┃adda.H┃f参见问题.┃H┃┗━━━━━━━━━━┻━━━━━━━━━━━━━┻━━━━━━━━━━━━━┛指令执行后AX中的数据为多少思考后看分析。分析:程序段中的最后一条指令addalH在执行前al中的数据为CH相加后所得的值为:H但是al为位寄存器只能存放两位十六进制的数据所以最高位的丢失ax中的数据为:H。(这里的丢失指的是进位值不能在位寄存器中保存但是CPU并不真的丢弃这个进位值关于这个问题我们将在后面的课程中讨论。w、^、v.TopSage.com第章寄存器注意此时al是作为一个独立的位寄存器来使用的和ah没有关系CPU在执行这条指令时认为ah和al是两个不相关的寄存器。不要错误地认为诸如addalH的指令产生的进位会存储在ah中addalH进行的是位运算。如果执行addaxH低位的进位会存储在ah中CPU在执行这条指令时认为只有一个位寄存器ax进行的是位运算。指令addaxH执行后ax中的值为:H。此时使用的寄存器是位寄存器axaddaXH相当于将ax中的位数据cH和另一个位数据H相加结果是位的H。在进行数据传送或运算时要注意指令的两个操作对象的位数应当是一致的例如:等都是正确的指令而:(在位寄存器和位寄存器之间传送数据)(在位寄存器和位寄存器之间传送数据)(位寄存器最大可存放值为的数据)(将一个高于位的数据加到一个位寄存器中)等都是错误的指令错误的原因都是指令的两个操作对象的位数不一致。()写出每条汇编指令执行后相关寄存器中的值。movaxmovahHmovalHaddaxaxmovbxCHmVCXaXmovambxaddaxbxIIIOValbhmovahbladdahahw、^、v.TopSage.comOHHOxxXbcllbxxxlxxabaaaavVvvddddmmmmaaHOlXOObalXhllabaaVvvdoodmmmafl=l==一一====越姒越姒默隧越M越从越汇编语言(第版)adda.adda.alAX=AX=()只能使用目前学过的汇编指令最多使用条指令编程计算的次方。.物理地址我们知道CPu访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空问每一个内存单元在这个空间中都有唯一的地址我们将这个唯一的地址称为物理地址。CP!j通过地址总线送入存储器的必须是一个内存单元的物理地址。在CPJ向地址总线上发出物理地址之前必须要在内部先形成这个物理地址。不同的cPU可以有不同的形成物理地址的方式。我们现在讨论CPJ是如何在内部形成内存单元的物理地址的。。位结构的CPU我们说CPu的上一代CPU(、)等是位机而是位机也可以说是位结构的CPJ。那么什么是位结构的CPU呢概括地讲位结构(位机、字长为位等常见说法与位结构的含义相同)描述了一个CPIJ具有下面几方面的结构特性。·运算器一次最多可以处理位的数据·寄存器的最大宽度为位·寄存器和运算器之问的通路为位。是位结构的CPU这也就是说在内部能够一次性处理、传输、暂时存储的信息的最大长度是位的。内存单元的地址在送上地址总线之前必须在CPIJ中处理、传输、暂时存放对于位CPu能一次性处理、传输、暂时存储位的地址。.CPU给出物理地址的方法(:PU有位地址总线可以传送位地址达到MB寻址能力。CPlJ又是位结构在内部一次性处理、传输、暂时存储的地址为位。从CPJ的内部结构来看如果将地址从内部简单地发出那么它只能送出位的地址表现出的寻址能力只有KB。CPJ采用一种在内部用两个位地址合成的方法来形成一个位的物理地址。(:PU相关部件的逻辑结构如图.所示。wwv~.TopSage.com第章寄存器图.CPtJ相关部件的逻辑结构如图.所示当CPlJ要读写内存时:()CPJ中的相关部件提供两个位的地址一个称为段地址另一个称为偏移地址:()段地址和偏移地址通过内部总线送入一个称为地址加法器的部件()地址加法器将两个位地址合成为一个位的物理地址()地址加法器通过内部总线将位物理地址送入输入输出控制电路()输入输出控制电路将位物理地址送上地址总线()位物理地址被地址总线传送到存储器。地址加法器采用物理地址=段地址×偏移地址的方法用段地址和偏移地址合成物理地址。例如CPJ要访问地址为CII的内存单元此时地址加法器的工作过程如图.所示(图中数据皆为十六进制表示)。地址加法器I地址加法器I地址加法器()相关部件提供段地址和偏移地址l()段地址和偏移地址送入I()段地址×地址加法器地址加法器()段地址×偏移地址得出物理地址I()输出物理地址图.地址加法器的工作过程wWW.TopSage.cOm汇编语言(第版)由段地址×引发的讨论“段地址×”有一个更为常用的说法足左移位。计算机中的所有信息都是以二进制的形式存储的段地址当然也不例外。机器只能处理二进制信息“左移位”中的位指的是二进制位。我们看一个例子一个数据为H二进制形式为B对其进行左移运算:左移位数j二进制BBBBB十六进制HHHlOHH十进制观察上面移位次数和各种形式数据的关系我们可以发现:()一个数据的二进制形式左移l位相当于该数据乘以()一个数据的二进制形式左移N位相当于该数据乘以的N次方()地址加法器如何完成段地址×的运算就是将以二进制形式存放的段地址左移位。进一步思考我们可看出:一个数据的十六进制形式左移位相当于乘以一个数据的十进制形式左移位相当于乘以一个x进制的数据左移位相当于乘以x。“段地址×偏移地址=物理地址”的本质含义注意这里讨论的是CPlJ段地址和偏移地址的本质含义而不是为了解决具体的问题而在本质含义之上引申出来的更高级的逻辑意义。不管以多少种不同的逻辑意义去看待“段地址×偏移地址=物理地址”的寻址模式一定要清楚地知道它的本质含义这样才能更灵活地利用它来分析、解决问题。如果只拘泥于某一种引申出来的逻辑含义而模糊本质含义的话将从意识上限制对这种寻址功能的灵活应用。“段地址×偏移地址=物理地址”的本质含义是:CPIJ在访问内存时用一个基础地址(段地址×)和一个相对于基础地址的偏移地址相加给出内存单元的物理地址。更一般地说CPlj的这种寻址功能是“基础地址偏移地址=物理地址”寻址模式的一种具体实现方案。CPlI中段地址×可看作是基础地址。下面我们用两个与CPJ无关的例子做进一步的比喻说明。第一个比喻说明“基础地址偏移地址=物理地址”的思想。比如说学校、体育馆、图书馆同在一条比直的单行路上(参考图.)学校位于路的起点(从路的起点到学校距离是米)。wvow.TOpSage.cOm第章寄存器学校体育馆图书馆mmm图.学校、体育馆、图书馆的位置关系你要去图书馆问我那里的地址我可以用两种方式告诉你图书馆的地址:()从学校走m到图=一馆。这m可以认为是图书馆的物理地址。()从学校走m到体育馆从体育馆再走m到图书馆。第一个距离m是相对于起点的基础地址第二个距离m是相对于基础地址的偏移地址f以基础地址为起点的地址)。第一种方式是直接给出物理地址m而第二种方式是用基础地址和偏移地址相加来得到物理地址的。第二个比喻进一步说明“段地址×偏移地址=物理地址”的思想。我们为上面的例子加一些限制条件比如只能通过纸条来互相通信你问我图书馆的地址我只能将它写在纸上告诉你。显然我必须有一张可以容纳位数据的纸条才能写下这个数据。可以写下位数据的纸条可不巧的是我没有能容纳位数据的纸条仅有两张可以容纳位数据的纸条。这样我只能以这种方式告诉你这个数据。两张可以写下位数据的纸条在第一张纸上写上(段地址)在第二张纸上写上(偏移地址)。假设我们事前对这种情况又有过相关的约定:你得到这两张纸后做这样的运算:(段地址)×(偏移地址)=(:物理地址)。CPl.J就是这样一个只能提供两张位数据纸条的CPI.J。.段的概念我们注意到“段地址”这个名称中包含着“段”的概念。这种说法可能对一些学习者产生了误导使人误以为内存被划分成了一个一个的段每一个段有一个段地址。如果wvc~vv.TopSage.cOm碉Ⅱ汇编语言(第版)我们在一开始形成了这种认识将影响以后对汇编语言的深入理解和灵活应用。其实内存并没有分段段的划分来自于CPJ由于(:Pu用“基础地址(段地址×)偏移地址=物理地址”的方式给出内存单元的物理地址使得我们可以用分段的方式来管理内存。如图.所示我们可以认为:地址H~F’FH的内存单元组成一个段该段的起始地址(基础地址)为~{段地址为H大小为H我们也可以认为地址H~FH、~{~rFH的内存单元组成两个段它们的起始地址(基础地址)为:t{和H段地址为:H和H大小都为H。It{I{~FHlFH单元组成一个段Hl(F‘FH图.分段以后在编程时可以根据需要将若干地址连续的内存单元看作一个段用段地址×定位段的起始地址(基础地址)用偏移地址定位段中的内存单元。有两点需要注意:段地址×必然是的倍数所以一个段的起始地址也一定是的倍数偏移地址为位位地址的寻址能力为KB所以一个段的长度最大为KB。内存单元地址小结cPu访问内存单元时必须向内存提供内存单元的物理地址。CPJ在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。思考下面的两个问题。()观察下面的地址你有什么发现物理地址Ft{段地址偏移地址FI{IF{FOH{lFt{IlFI{Fwww.TopSage.cOm第章寄存器结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址。比如CP!J要访问IFH单元则它给出的段地址SA和偏移地址EA满足SA×EAlFH即可。()如果给定一个段地址仅通过变化偏移地址来进行寻址最多可定位多少个内存单元结论:偏移地址位变化范围为O~FFFFH仅用偏移地址来寻址最多可寻KB个内存单元比如给定段地址H,~t日偏移地址寻址CPJ的寻址范围为:I{~FFFFH。在PC机中存储单元的地址用两个元素来描述即段地址和偏移地址。“数据在Fl内存单元中。”这句话对于P(:机一般不这样讲取而代之的是两种类似的说法:①数据存在内存:F单元中②数据存在内存的段中的lF单元中。这两种描述都表示“数据在内存lF单元中”。可以根据需要将地址连续、起始地址为的倍数的一组内存单元定义为一个段。捡测点:()给定段地址为H仅通过变化偏移地址寻址CPU的寻址范围为到。()有一数据存放在内存()H单元中现给定段地址为SA若想用偏移地址寻至止匕单元。提示则sA应满足的条件是:最小为反过来思考一下当段地址给定为多少寻到CH单元一最大为。CPJ无论怎么变化偏移地址都无法.段寄存器我们前面讲到CPU在访问内存时要由相关

用户评价(1)

  • 迷途书生 不错,是原书的word版,但错误太多了,转化的软件不好吧,已经很难得了,谢谢分享!到处找......

    2012-01-10 07:12:09

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/304

汇编语言+—+王爽+(第2版)

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利