免费预览已结束,剩余94页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理讲义前言微型计算机是电子计算机技术飞速发展的产物, 具有体积小、重量轻、耗电少、价格低廉、可靠性高、结构灵活等特点。微型计算机最早的是美国IBM公司用INTEL公司的8086CPU芯片制造的IBM-PC机,现在已经由低档的8位机8080、8086、8088,发展到16位的80286,32位的80386、80486、PENTUIM、PENTUIM II、PENTUIM III等高档机型。主机的内存容量也由最初的48K字节增加到640K、2M、128M甚至更大。处理速度也越来越快,工作稳定性显著提高。当前,微型机技术正往两个方向发展,一个是高性能、多功能的方向,另一个是价格低廉、功能转移的方向。在不久的将来,微型机将发展成为融工作、学习、娱乐于一体,集电脑、电视、电话于一身的综合办公设备和新型家用电器,以及信息高速公路上的数字化、多媒体智能终端。未来的微机在我们工作学习和日常生活中将会充当重要角色,它不仅会改变我们的生活方式,而且会改变我们的文化特征,会出现我们今天无法想象的事物,微机必将成为人类文明之侣。通过本课程掌握微机关键技术的原理和实现方法,使用户深入理解、牢固掌握、灵活运用微型机最主要的技术,从而能够在日新月异的计算机领域更快地理解、熟悉、掌握新的发展。在软件方面,本教学软件以介绍8086指令系统为基础,重点讨论 Intel公司的ASM-86汇编语言程序设计;而在硬件方面则着重讨论8086的体系结构、接口技术、 Intel公司的I/O配套支持器件及其应用,为用户开发应用8086系列微型计算机(包括IBM-PC机)打下必要的基础。第一章 绪论本章介绍计算机基础知识,内容包括计算机的发展、特点、分类及应用;计算机中常用的数制以及不同数制间的相互转换;数据的编码;二进制数的算术运算和逻辑运算;数据的存贮组织等。其中涉及到不少名词、术语及其相关概念,必须弄懂和掌握,为我们以后学习作好必要的知识准备。世界上第一台计算机,是1946年2月由美国宾夕法尼亚大学研制成功的。之后计算机获得了突飞猛进的发展。人们依据计算机性能和当时软硬件技术(主要根据所使用的电子器件),将计算机的发展划分成四个阶段。每一个阶段在技术上都是一次新的突破,在性能上都是一次质的飞跃。第二章 8086的体系结构8086是高性能的第三代微处理器,是Intel系列的16位微处理器,它是采用HMOS工艺制造的, 内部包含约29,000个晶体管。8086有16根数据线和20根地址线,因为可用20位地址, 所以可寻址的地址空间达220即1M字节。8086工作时,只要一个 5V 电源和一相时钟, 时钟频率为5MHz。后来,Intel 公司推出的8086-1型微处理器时钟频率高达10MHz, 8086-2型微处理器时钟频率达8MHz。几乎在推出8086微处理器的同时,Intel 公司还推出了一种准16位微处理器8088。 推出8088的主要目的是为了与当时已有的一整套 Intel外围设备接口芯片直接兼容。 8088的内部寄存器、内部运算部件以及内部操作都是按16位设计的,但对外的数据总线只有8条。这两种微处理器除了数据总线宽度不同外,其他方面几乎完全相同。8086/8088的另一个突出特点是其多重处理的能力,它们都能极方便的和数值数据处理器(NPX)8087,I/O处理器(IOP)8089或其他处理器组成多处理器系统,从而极大地提高系统数据吞吐能力和数据处理能力。2.0 计算机的工作过程了解了“程序存储”,再去理解计算机工作过程变得十分容易。如果想叫计算机工作,就得 先把程序编出来,然后通过输入设备送到存储器中保存起来,即程序存储。下面就是执行程序的问题了。根据冯.诺依曼的设计,计算机应能 自动执行程序,而执行程序又归结为逐条执行指令。执行一条指令又可分为以下四个基本操作: 取出指令:从存储器某个地址中取出要执行的指令送到CPU内部的指令寄存器暂存; 分析指令:把保存在指令寄存器中的指令送到指令译码器,译出该指令对应的微操作; 执行指令:根据指令译码,向各个部件发出相应控制信号,完成指令规定的各种操作; 为执行下一条指令作好准备,即形成下一条指令地址;2.18086的编程结构 要掌握一个CPU的工作性能和使用方法,首先应该了解它的编程结构。 所谓编程结构,就是指从程序员和使用者的角度看到的结构,当然,这种结构与CPU内部的物理结构和实际布局是有区别的。在下图中可以看到,从功能上,8086分为两部分, 即总线接口部件BIU (Bus Interface Unit) 和执行部件EU (Execution Unit)。这两个单元在CPU内部担负着不同的任务。下图即为8086的编程结构图。这两个单元并行地工作,能使大部分取指令操作与执行指令操作重叠的进行 (即所谓“流水线”结构)。 由于EU执行的是BIU已从存储器取出的指令, 所以在大多数情况下取指令的时间“消失了”,从而加快了程序的运行速度。2.18086的编程结构 总线接口部件 (BIU) 总线接口部件的功能是负责与存储器、I/O端口传送数据。总线接口部件要从内存取指令送到指令队列;CPU执行指令时, 总线接口部件要配合执行部件从指定的内存单元或者外设端口中取数据,将数据传送给执行部件, 或者把执行部件的操作结果传送到指定的内存单元或外设端口中。 具体讲,BIU根据执行部件EU算出来的16位偏移地址及16位段寄存器提供的16位地址段,通过地址加法器产生20位物理地址,根据EU单元的请求,用20位物理地址对存储器进行读写操作,亦可对I/O接口进行读写操作。在取出指令的同时,从内存中取下一条或几条指令放在指令队列中。这样,在一般情况下CPU执行完一条指令,就可以立即执行下一条指令,而不象8位机那样让CPU轮番地进行取指令和执行指令,从而提高了CPU的效率。总线接口部件由下列各部分组成: 4个段地址寄存器; o CS16位的代码段寄存器;o DS16位的数据段寄存器; o ES16位的扩展段寄存器; o SS16位的堆栈段寄存器; o CS16位的代码段寄存器; o DS16位的数据段寄存器; o ES16位的扩展段寄存器; o SS16位的堆栈段寄存器; 16位的指令指针寄存器IP; 20位的地址加法器; 6字节的指令队列。 执行部件EU 执行部件的功能就是负责指令的执行。 从编程结构图可见,执行部件由下列几个部分组成: 4个通用寄存器,即AX、BX、CX、DX; 4个专用寄存器; o 基数指针寄存器BP; o 堆栈指针寄存器SP; o 源变址寄存器SI; o 目的变址寄存器DI; o 基数指针寄存器BP; o 堆栈指针寄存器SP; o 源变址寄存器SI; o 目的变址寄存器DI; 标志寄存器; 算术逻辑单元ALU。 “流水线”结构 总线接口部件BIU和执行部件EU并不是同步工作的, 两者的动作管理遵循如下原则: 1. 每当8086的指令队列中有2个空字节,BIU就会自动把指令取到指令队列中。 2. 而同时EU从指令队列取出一条指令,并用几个时钟周期去分析、执行指令。 3. 当指令队列已满,而且EU对BIU又无总线访问请求时,BIU便进入空闲状态。 4. 在执行转移、调用和返回指令时,指令队列中的原有内容被自动清除。 在8086/8088中,EU和BIU这种并行的工作方式不仅有力地提高了工作效率,而且这也是它们的一大特点。EU和BIU之间是通过指令队列相互联系的。指令队列可以被看成一个RAM区,EU对其执行读操作,BIU对其执行写操作。 通用寄存器的用法 寄存器的隐含用法寄存器执 行 操 作AX整字乘法,整字除法,整字I/O。AL 字节乘法,字节除法,节字I/O。翻译,十进制算术运算。AH字节乘法,字节除法。BX翻译。CX字符串操作,循环。CL变量的移位和循环移位。DX整字乘法,整字除法,间接I/O。SP堆栈操作。SI字符串操作。DI字符串操作。通用寄存器组包括AX,BX,CX,DX。 主要用来保存算术或逻辑运算的操作数、中间运算结果。 它们既可以作为一个16位的寄存器使用,也可以分别作为两个8位的寄存器使用。 由于这些寄存器具有良好的通用性,使用十分灵活, 因而称为通用寄存器。但在某些指令中规定了某些通用寄存器的专门用法, 这样可以缩短指令代码长度;或使这些寄存器的使用具有隐含的性质, 以简化指令的书写形式(即在指令中不必写出使用的寄存器名称)。 通用寄存器的隐含用法如上表所示。2.28086的工作模式 为了尽可能适应各种各样的使用场合,在设计8086 CPU芯片时, 使它们可以在两种模式下工作,即最小模式和最大模式。 所谓最小模式,就是在系统中只有8086一个CPU, 而所有的总线控制信号都由8086直接产生,因此系统中的总线控制电路被减到最少。而最大模式是相对最小模式而言的, 此时系统中有两个或多个微处理器, 其中有一个是主处理器8086,其它的处理器称为协处理器,它们协助主处理器工作。一、 最小工作模式 由图可知,在8086的最小模式中,硬件连接上有如下几个特点: 1. MN/MX端接+5V,决定了8086工作在最小模式。 2. 有一片8234A,作为时钟发生器。 3. 有三片8282或74LS373,用来作为地址锁存器。 4. 当系统中所连接的存储器和外设比较多时,需要增加系统数据总线的驱动能力, 这时,要用两片8286/8287作为总线收发器。 第一周期CPU输出20位地址、ALE信号,及地址A0-A19第二周期A19/S6-A16/S3,!BHE/S7输出状态S7-S3;同时!RD和!DEN变有效(低电平)。第三周期数据输入。第四周期从AD15-AD0读入数据,并使!RD信号和!DEN信号处于无效状态。最小方式适用于由单微处理器组成的小系统。在这种系统中, 8086/8088CPU直接产生所有的总线控制信号,因而省去了总线控制逻辑。二、 最大工作模式 由下图可知,最大模式配置和最小模式配置有一个主要的差别:最大模式下多了8288总线控制器。这是因为在最大模式系统中一般包含两个或多个处理器,这样就要解决主处理器和协处理器之间的协调工作问题和对总线的共享控制问题。8288总线控制器对CPU发出的控制信号进行变换组合,以得到对存储器和I/O端口的读/写信号和对8282及8286的控制信号。在最大模式系统中,一般还会有中断优先级管理部件,当然,在系统所含的设备较少时,该部件也可省去。而反过来,在最小模式系统中,如果所含的设备较多,也要加上中断优先级管理部件。三、 8086CPU的引脚信号 8086CPU采用双列直插式的封装形式,具有40条引脚,它采用分时复用的地址/数据总线,所以有一部分引脚具有双重功能。 引脚33用于确定配置方式,如该引脚接+5V,则工作于最小模式;如该引脚接地,则工作于最大模式。这两种CPU都有20条地址引脚,其中高4位地址引脚(A19/S6-A116/S3)以分时转换方式传送地址和状态信号。在实际使用中,8086的一些引脚信号还可用来配合读/写操作,指出当前使用的数据总线。四、 8086的系统组成 8086的存储体结构 在组成存储系统时,总是使偶地址单元的数据通过AD0-AD7传送,而奇地址单元的数据通过AD8-AD15传送,显然,并不是所有总线周期都存取总线高字节,只有存取规则字,或奇地址的字节,或不规则字的低八位,进行总线高字节传送。如前所述,8086的一些引脚信号还可用来配合读/写操作,指出当前使用的数据总线,例如 和A0,它们配合可能进行的操作见下表。而同时,为保证能完成规定的操作要求,要将1M的存储体分为两个库。操作A0使用的数据线存取规则字00AD15-AD0传送偶地址的一个字节10AD7-AD0传送奇地址的一个字节01AD15-AD8存取非规则字01AD15-AD8(第一个总线周期)10AD7-AD0(第二个总线周期)8086将1M字节存储体分为两个库,每个库的容量都是512K字节。其中和数据总线D15-D8相连的库全由奇地址单元组成,称高字节库或奇地址库,并用BHE信号作为库选信号;另一个库和数据总线的D7-D0相连,由偶地址单元组成,称低字节库或偶低址库,利用A0作为库选信号,显然,只需A19-A1共19位地址用来作为两个库内的单元寻址(如左图所示)。 同时存储器亦采用了分段结构。8086存储器的分段结构 8086CPU把1M字节的存储器空间划分为任意的一些存储段, 一个存储段是存储器中可独立寻址的一个逻辑单位,也称逻辑段,每个段的长度为64K字节。 8086CPU中有四段寄存器:CS,DS,SS和ES,这四个段寄存器存放了CPU当前可以寻址的四个段的基值,也即可以从这四个段寄存器规定的逻辑段中存取指令代码和数据。一旦这四个段寄存器的内容被设定,就规定了CPU当前可寻址的段,如下图所示。8086存储器的逻辑地址与物理地址 8086CPU中的每个存储元在存储体中的位置都可以使用实际地址和逻辑地址来表示。 实际地址,也称物理地址,规定了1M字节存储体中某个具体单元的地址 (它是00000H至FFFFFH之间的某个地址值),它由CPU访问存储器时使用。而逻辑地址在程序中使用,它由两部分组成:段基址和偏移量。CPU访问存储器时,先要形成20位的物理地址。8086存储器20位物理地址的形成 在存储段划分时,段内地址连续的,段与段之间是相互独立的。每个段的起始地址称段的基址,段基址必须是能被16整除的那些地址,即20位的段基址的低四位应当是0000。由于段起始地址的低四位为0,所以可用20位的高地址的高16位表示段的基址,称段基值。当CPU访问存储器时,根据逻辑地址,在BIU的地址加法器中形成20位的物理地址,其方法是将段基值左移四位再加上偏移量。(如下图所示) 2.38086的总线时序 在微机系统中,CPU是在时钟信号控制下,按节拍有序地执行指令序列。 从取指令开始,经过分析指令、对操作数寻址,然后执行指令、保存操作结果,这个过程称为指令执行周期。在一个指令执行周期中,通过总线进行一次对存储单元或I/O端口读或写的操作过程称为总线周期。8086系统总线周期由四个时钟组成(T1-T4),需要时还要加入数量不定的等待周期(Tw)。若在完成一个总线周期后不发生任何总线操作, 则填入空闲状态时钟周期(Ti);若存储器或I/O端口在数据传送中不能以足够快的速度作出响应, 则在T3与T4间插入一个或若干个Tw。一、 读周期的时序一个基本的读周期一般包含如下几个状态:1. T1状态o 2. M/IO信号有效,指出读内存还是I/O;3. 地址输出:分 高4位和 低16位;4. ALE输出地址锁存信号;5. BHE信号表示高8位数据总线上信息可用。6. T2状态:地址信号消失,AD15-AD0进入高阻状态为读入数据作准备;7. T3状态:若存储器和外设速度足够快,此时CPU接收数据;8. Tw状态:在存储器和外设速度较慢时,还要在T3之后插入一个或几个Tw。9. T4状态:CPU对数据总线采样,获得数据。二、 写周期的时序一个基本的写周期一般包含如下几个状态: 1. T1状态o 2. M/IO信号有效,指出写内存还是I/O; 3. 地址输出:分 高4位和 低16位; 4. ALE输出 地址锁存信号; 5. BHE信号表示高8位数据总线上信息可用。 6. T2状态:CPU往AD15-AD0 发出数据; 7. T3状态:CPU继续提供状态信息和数据; 8. Tw状态:在存储器和外设速度较慢时,还要在T3之后插入一个或几个Tw。9. T4状态:CPU撤除信息。 第三章 汇编语言基础计算机语言分为面向过程、面向对象的高级语言和面向机器的汇编语言。高级语言与数学模型有较好的对应关系,但由于未考虑硬件的能力,因而做出来的程序在对应硬件的执行时间和空间上有较大的缺陷,无法应用于实时性在线控制及语言处理的场合。汇编语言是用户能利用计算所有特性直接控制硬件的唯一语言,它能直接使用CPU的指令系统和寻址方式,从而得到占用空间少,执行速度快的高质量程序,对于一些需要直接控制硬件的场合,汇编语言是必不可少的。本章的目的就是向读者简单介绍汇编语言的寻址方式、指令系统,程序设计以及所用到的汇编调试工具的一些基础知识。3.1 寻址方式对于一条汇编语言指令来说:第一,要指出进行什么操作,这由指令操作符来表明。第二,要指出大多数指令涉及的操作数和操作结果送到哪里去,一般约定将操作结果送到原来放操作数的地方。而操作数的来源问题,也就是操作数的寻址方式问题了。而指令系统中有一类指令叫转移指令,还有一类叫调用指令, 这两类指令涉及转移地址或者调用地址的提供方式,一般也称为指令地址的寻址方式。这样8086/8088 的寻址方式可分为两种:操作数的寻址方式和转移地址寻址方式。一、 操作数寻址方式1. 立即寻址立即操作数可以是8位或16位,并且是指令的一部分。立即数据总是紧跟在指令操作码之后并和操作码一起存放在代码段中,因而立即数据总是和操作码一起被放入BIU中的指令队列里,在指令执行时不需再存取存储器。使用立即寻址的指令主要用来给寄存器赋初值,例如: MOV AX,1234H 执行过程如下图所示:2. 寄存器寻址操作数存放在指令规定的寄存器中,对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DL,SP或BP;而对8位操作数,寄存器可以是AH ,AL,BH,BL,CH,CL,DH或DL。例如: MOV AX, BX 执行过程如下图所示:3 直接寻址操作数的有效地址是指令的一部分,它与操作码一起存放在代码段中,但操作数一般是在数据段中,因而这种寻址方式是以DS的内容为基准。 例如: MOV AL, DS:2000H若DS=4000H,则此指令式将数据段中物理地址为42000H 单元的内容传送AL寄存器。 执行过程如右图所示:4 寄存器间接寻址EA=(DI)(SI)操作数的有效地EA存放在基址寄存器(BX或BP)或变址寄存器(DI或SI)中,即例如: MOV AX, BX它表示操作数在数据段中,存放单元与段基址的偏以量(即有效地址)在寄存器BX中。执行过程如下图所示:5 寄存器相对寻址方式操作数的有效地址EA 是8位或16位的位移量与基址寄存器BX或基址指示器BP或某个变址寄存器(DI或SI)之和,例如:MOV Al, BX+5它是BX的内容加上8位位移量05H作为操作数存放的单元地址。如果使用BP,则隐含地表示操作数示存放在堆栈段中。执行过程如下图所示:6 基址变址寻址方式 有效地址EA是由基址寄存器BX(或基址指示器BP)的内容与变址寄存器(DI或SI)的内容之和。例如: MOV AX, BX+SI 表示将BX 的内容与SI的内容相加作为操作数存放单元距数据段基址的偏移值。 执行过程如右图所示:7 相对基址变址寻址方式操作数的有效地址是一个8位或16位的位移量和一个基址变址之和。例如: MOV AH, BX+DI+1234H表示操作数地址是在数据段中,其在数据段的偏移量是BX的内容加上DI的内容再加上位移量1234H。执行过程如下图所示:二、转移地址的寻址方式1. 段内直接方式段内直接寻直方式也称为相对寻址方式,转移的目标地址是当IP内容和一8位或16位的位移量之和。位移量是8位时,称为短程转移,位移量为16位称为近程转移。这种寻址方式适用于条件转移或无条件转移。但条件转移只能有8位的位移量。如下图所示:2. 段内间接方式这种方式也是在段内,即仅IP 内容。其转移的目标地址是寄存器或存储单元的内容,即以寄存器或存储器单元内容来更新IP的内容。若目标地址为存储单元内容,则可由上述与存储器操作书有关的寻址方式寻址。如下图所示:3. 段间直接方式这种方式用于段间转移,目标地址的段基值(CS)和偏移地址(IP)都是指令码的组成部分,用来更新当前CS和IP。如下图所示:4. 段间间接方式这种方式同样用于段间转移,只不果当前CS和IP由存储器中连续的两个字更新,低位地址的字更新IP,高位地址的字更新CS,存放新IP和CS的存储单元地址由前述存储器操作数的寻址方式决定。如右图所示:8086/8088的指令系统按功能可以分为六类:数据传送,算术运算,逻辑运算与移位、字符串处理、控制转移以及处理器控制。下面仅对数据传送类加以介绍:3.2 指令系统一、 数据传送类这类指令用于实现存储器与寄存器、寄存器与寄存器,AL/AX与 I/O端口、立即数到寄存器或存储器的字节或字的传送,共有14条指令,可分为四组。1. 通用数据传送指令这种指令共5条,如表所示:指令名称操作码(助记符)操作数例子传送字节或字MOV目标,源MOV ARRASI,AL把字压入堆栈PUSH源PUSH AX把字弹出堆栈POP目标POP DX交换字节或字XCHG目标,源XCHG AX, BX字节翻译XLAT译码表XLAT ASCII TAB2. 输入/输出指令这组指令包括输入指令IN(输入字节或字)和输出指令OUT(输出字节或字)。1. IN 累加器,端口 2. OUT 端口,累加器 输入指令将端口内容输入到AL(字节)或AX(字),端口地址在64K I/O空间之(0000H-FFFFH),若端口地址在0000H-00FFH之间,则可使用直接寻址或间接寻址,否则只能用间接寻址,例如:IN AX, 21HMOV DX, 210HIN AL, DX输出址令将AX中的16位数据或AL中的8位数据输出到输出端口,端口地址在0000H-FFFFH范围内,寻址方式的规定同输入指令,例如:MOV DX, 61HOUT DX, AXOUT 22H, AL3. 目标地指传送指令这组指令包括三条指令,如表所示:名称操作码操作数举例装入有效地址LEA目标,源LEA BX , DI指针装入DSLDS目标,源LDS BX,TABLE SI指针装入ESLES目标,源LES DI,ARRAY BX这些指令跟传送指令MOV的区别在于不是传送变量本身,而是传送变量的地址。4. 标志位传送指令标志位传送指令共有四条:LAHF(标志装入AH),SAHF(AH内容存入标志寄存器),PUSH F(标志压入堆栈)和POP F(标志弹出堆栈)。这些指令都是单字节指令,指令的操作数以隐含方式规定,是无操作数指令。二、算术运算类8086/8088的算术运算指令可以处理4个类型的数:1. 无符号二进制数; 2. 带符号的二进制数; 3. 无符号的组合十进制数; 4. 无符号的分离十进制数。 除组合十进制数(也称组合BCD数)只有加/减运算以外,其余三种类型都可以进行加、减、乘、除运算。算术运算类指令共有20条,包括加、减、乘、除指令,除转移指令外,其余指令都影响标志。三、逻辑运算与移位指令为处理字节或字中各位的信息,8086/8088提供了两组位处理指令:逻辑运算指令和移位指令。1 逻辑运算指令如下表,所有的指令都对起操作数按位进行操作,操作数可以是字节或字。目标不能是立即数;当有两个操作数时,则两个操作数不能同时是存储器操作数;无论是目的操作数还是源操作数都不能是段寄存器。NOT指令性不影响任何标志位,其它指令执行后,总是使OF=CF=0,SF,ZF和PF根据运算结果置位或复位,以反映操作结果的特征,而AF状态不定。名称操作码(助记符)操作数举例“非”NOT目标NOT AX“与”AND目标,源AND AL, 0F0H“或”OR目标,源OR BL, AL“异或”XOR目标,源XOR BX, BX“测试”TEST目标,源TEST AX,1000000B2 移位与循环移位指令8086/8088的位处理指令中有8条移位与循环指令。移位指令有算术移位与逻辑移位,算术与逻辑左移的操作完全相同,但逻辑右移的目标操作数的左端移入0,而算术右移则保持目标操作数的符号位(即最高有效位)不变。循环指令有不通过进位位与通过进位位的循环指令,通过进位位的循环指令把CF标志作为目标操作数的扩展,参与循环操作。和移位指令不同之处是:循环移位时移出的目标操作数位并不丢失,而是循环送回目标操作数的另一端。四、字符串处理8086/8088指令系统为文本处理提供了一组强有力的指令(字符处理指令)。文件处理是对一系列含有字母数字代码的字节(也称字符串)进行处理,例如传送、比较、查找、插入、删除等,字符串指令为这些处理提供了很大方便。五、控制转移指令8086/8088指令系统中有一组指令用于控制程序的转移,这些指令有的只修改IP的内容,有的则同时修改IP和CS的内容。这组控制程序转移的指令可再分为四组:1. 转移指令; 2. 循环指令; 3. 过程调用与返回指令; 4. 中断指令。 3.3 指令系统的详细介绍一、数据传送类1.MOV指令用于把一个字节或字从源地址送到目标地址。源操作数可以是通用寄存器、段寄存器、存储器或立即操作数;目标操作数可以是通用寄存器、段寄存器(CS除外)或存储器,立即数据不能作为目标操作数,当源操作数是立即操作数时,目标操作数不能是段寄存器。下图表示指令 MOV AL, ARRAYSI 的执行过程,ARRAY为变量名字,在指令中它表示该变量在数据段中的偏移地址,例中假定为0100H,而(SI)=0020H。2. PUSH指令将16位的源操作数压入堆栈,而目标地址为当前栈顶,即由SP指定的单元,源操作数可以是寄存器、段寄存器或存储器。执行PUSH指令时先使堆栈指示器SP的内容减2 ,然后将源操作数传送到由SP内容作为有效地址的当前栈顶,右图表示指令 PUSH AX 的执行情况。 3. POP指令执行相反过程的操作,从栈顶弹出16位的操作数到目标地址,目标地址可以是寄存器、段寄存器或存储器。执行POP指令时,从当前栈顶弹出一个字,并传送到目标地址,然后SP自动加2,指向新的栈顶。右图表示指令 POP DX 的执行过程。4. LEA 指令把变量在当前段内的有效地址装入指令规定的目标寄存器中,源操作数必须是存储器操作数,而目标操作数必须是16位的通用寄存器。这条指令常用来建立串操作指令所需要的寄存器指针。 例如: LEA BX, DI是将由DI的内容作为有效地址的变量在当前数据段内的偏移地址传送给BX, 如右图:5. LDS 指令把32位地址指针从源操作数指定的连续4个字节的存储单元内容传给16位的寄存器,地位地址的两个子街内容传给指令的目标操作数规定的一个16位通用寄存器,高位地址的两个字节传给段寄存器DS. 如: LDS BX,TABLESI表示将一个32位地址指针表中的第N组32位地址传送给BX和DS,BX中存放的是地址指针的偏移量,而DS中存放的是地址指针的段基址.如下图: 二、算术运算类1. ADD用于无符号的字节或字的加法运算,结果放在原来存放目的操作数的地方。原操作数可以是寄存器、存储器或立即数,而目标操作数只能是寄存器或存储器,而且两个操作数不能同时为存储器。本指令对标志位C,O,P,S,Z和A有影响。ADC 用于带符号的字节或字的加法运算,但是多用于实现多字节运算中。它与ADD 最大的区别是在两个操作数相加时,要把进为标志C的现行值加上去。2. INC增量指令,它只有1个操作数,对指定的操作数加1,然后返回此操作数。本指令主要用于在循环程序中修改地址指针和循环次数等。指令的执行结果 影响标志位A,O,P,S和Z,但不影响进位标志。INC 指令只有一个目标操作数,且不能是立即数。3. SUB是不考虑借位的减法指令。可以完成2个字节或2个字的相减,它可以从累加器中减去立即数,或在寄存器和内存操作数中减去立即数,或在寄存器中减去寄存器或内存操作数,或从寄存器或内存操作数中减去寄存器操作数等。本指令会影响标志A,C,O,P,S,Z。SBB 则需要考虑借位。SBB 指令在形式上和功能上都和SUB 指令相似,只是SBB 指令还要减去CF的值。在减法运算中,CF的值就是两数相减时,向高位产生的借位。它主要用于多字节操作数相减。4. CMP是比较指令。可以认为它是另一类的SUB 指令,只是指令执行后,结果并不返回目标操作数,即目标操作数和源操作数都保持不变,只有标志位随着结果变化。5. DEC是减量指令。执行时,将操作数的值减1,在将结果送回操作数。操作数不能是立即数,在相减时把操作数作为一个无符号二进制数来对待。指令执行后,影响标志A,O,P,S,Z,但不影响标志C。6. MUL乘法指令,完成在AL(字节)或AX(字)中的操作数和另一个操作数间,两个无符号数的乘法。双倍长度的乘积,送回到AL和AH(在两个8位数相乘时),或送回到AX和它的扩展部分DX(在两个字相乘时)。若结果的高半部分(在字节相乘时为DX)不为零,则标志 CF=1,OF=1;否则C=0,O=0。标志C=1,O=1表示在AH或DX中包括有结果的有效数。指令影响标志C和O,对A,P,S,Z则未定义。7. IMUL是带符号数的乘法指令,它与MUL类似,只是要求两个乘数必须均为有符号数。8. DIV无符号除法指令,规定除数必须为被除数的一半字长,即被除数为16位(放于AX中)时除数为8位,而得到8位的商放在AL中,8位的余数放在AH中被除数为32位(放于DX和AX中)时除数为16位,而得到16位的商放在AX中,16位的余数放在DX中。IDIV 是除了完成带符号数相除相除以外,与DIV完全类似。必须注意:除法运算后,各标志位不定,即为0或1都无意义。3.4 程序设计一、汇编语言指令 汇编语言是面向机器的语言,实际上,汇编语言就是机器语言程序的符号表示。 由汇编语言所编写的源程序与经过汇编语言所产生的目标代码程序之间有明显的一一对应关系。 就8086的汇编语言来说, 除了用符号(助记符)表示的机器语言指令以外, 还有宏指令、 伪指令、 以及汇编指令。 机器指令经汇编后产生相应的目标代码,它是汇编语言的主体, 在汇编语言源程序中,机器指令的操作码字段用指令助记符表示。 宏指令是汇编指令能够识别的预先作了定义的程序段,该程序段一旦定义之后,就形成宏指令。 伪指令和操作符为汇编程序在汇编过程中提供指示或指示信息,并不直接产生机器代码。 伪指令用来指示汇编程序对数据、数据段、程序结构等作解释,汇编语言源程序中, 伪指令以指导性语句的形式独立地呈现在源程序中,操作符(即汇编指令)是对汇编程序的提示, 它对机器代码的形成产生一定的影响,但和伪指令一样,没有直接相对应的机器代码, 操作符不能以独立语句形式呈现在源程序中,它只能作为指令性语句的一个组成部分。 8086汇编语言中,有多种伪指令,包括: 数据定义伪指令; 结构定义伪指令; 记录定义伪指令; 段定义伪指令; 程序终结伪指令; 过程定义伪指令; 访问外部标识符伪指令; 宏操作伪指令。 二、汇编语言基本语法 1. ASM-86的字符集源程序中的字符集包括: 字母和数字:ABCXYZ、abcxyz、012789; 特殊字符:+ - * / = ( ) ; , 。 :? $ &; 非打印字符:空格、回车、换行。 2. 关键字所谓关键字是指对汇编程序具有预定意义的标识符,一般地说,关键字只可以在其特定的上下文中应用,ASM-86的关键字包括: 指令系统所规定的指令助记符及前缀助记符,如ADD,MOV,LOCK,REP,WAIT; 处理器中各种寄存器名,如AH,DS,BP,SI; 伪指令,如ASSUME,DB,DD,EQU,END等; 操作符,如OFFSET,PTR,TYPE; 其它保留字(包括数值运算符、关系运算符),它们是:AT,BYTE,COMMON,DUP, EQ,FAR,NOTHING,STACK,LE,MEMORY,GE,MOD,PACE,NE,PAPA,LT,NEAR,GT。 3. 语句语句是汇编语言的基本组成单位,可以认为源程序是一个语句序列,每个语句规定了一种基本功能,而语句序列完成了某种操作任务,语句可以分为两类:指令性语句和指示性语句。指令性语句是由指令系统中的指令组成的,而指示性语句是由伪指令组成的。操作符不能以一个独立的语句形式出现在源程序中,它只能作为指令性语句的一个组成部分。 4. 表达式ASM-86的表达式是由运算符号和运算对象组成的,运算对象可以具有两种类型:数字值和存储器地址值,数字值可以是数字表达的常量,也可以是表示常量的标识符,而存储器地址值通常是标识符,如AGAIN,ARY,可以是标号或变量名,而运算符是指算术运算符、关系运算符和操作符。此外,在组成表达式时还需要使用某些符号,如圆括号,方括号。 5. 指令性语句中的操作数某些8086/8088指令系统要求有两个操作数,而另一些指令只有一个操作数,对于双操作数指令,目标操作数可以是寄存器或存储器操作数,而源操作数可以是寄存器、存储器或立即操作数,但两个操作数不能同时是存储器操作数,对于单操作数指令,只能以寄存器或存储器为操作数。 三、汇编语言程序结构 汇编语言源程序是由语句序列组成的,语句序列应包括: 数据(程序要处理的对象); 处理数据的实体; 承上启下的记录。 8086/8088 微处理器系统的存储结构是分段式访问结构, 这种结构是程序运行的基础,因此,8086/8088 汇编语言程序必须具备: 数据段(定义加工处理对象); 代码段(处理数据的对象); 堆栈段。 数据段用来在内存建立一个适当的工作区,以存放常数、 变量以及作算术运算区和用来作为I/O接口传送数据的工作区。堆栈段用来在内存中建立一个堆栈区, 以便在中断和过程调用时使用,堆栈还起承上启下的作用,用于模块间参数的传送。自然,某些十分简单的程序可能并不需要数据段或堆栈段,但是, 对于一些复杂的程序,堆栈段、数据段和代码段都可以不止一个。当由这几个段构成一个完整的程序时, 通常把数据放在代码段的前面,这有两个好处:一是可以事先定义程序中所使用的变量;另一方面, 汇编程序在汇编过程遇到变量时,必须知道变量的属性,才能产生正确的代码,将数据段放在代码段前面, 就可以保证这一点。 四、标准汇编语言程序框架通常,一个源程序都有大体相同的结构或框架, 下面给出一个源程序的框架结构,该程序是在PC-DOS环境下运行的。 ;定义堆栈段STACK_SEGSEGMENT PARA STACK STACK ;定义堆栈深度与堆栈段变量STACK_SEGENDS;定义数据段DATA_SEGSEGMENT PARA PUBLIC DATA ;定义变量DATA_SEGENDS;定义代码段CODE_SEGSEGMENT PARA PUBLIC CODEMAINPROC FARASSUME CS:CODE_SEG, DS:DATA_SEGASSUME SS:STACK_SEGSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATA_SEGMOV DS,AX ;主过程内容RETMAINENDPPROC_APROC NEAR ;子过程A内容,A为主过程调用PROC_AENDP ;其它过程内容CODE_SEGENDSEND START 当微机开机后,操作系统DOS就获得了控制权,当有程序运行时,操作系统首先为该程序建立一个程序前缀区PSP,主要用于存放程序的有关信息,同时也提供了程序和操作系统的接口。在PSP中起始处为INT 20H软中断指令,该中断服务程序的作用是返回DOS管理状态,于是在编程时就必须安排程序在执行完后能够转去执行PSP起始处的INT 20H指令。 如上右图所示,DOS在程序装入后分配好内存,并设置段寄存器DS和ES的值,以使它们指向指令INT 20H的地址。 为保证用户程序执行完后能返回到DOS,应采取两条措施: 第一,将程序中主程序部分定义为FAR过程,其最后一条指令为RET; 第二,主程序开始时把DS压栈保存,同时将一个全0的字压栈,即: PUSHDSMOVAX,0PUSHAX 这样当程序执行到最后一条指令RET时,由于该过程定义为FAR, 于是从堆栈中弹出两个字到CS和IP,系统便执行INT 20H指令, 使控制回到DOS。 此外,由于开始执行用户程序时,DS并不设置在用户的数据段起始处, 因而主程序开始处,在上述三条指令之后,应该重新装填DS,即: ASSUMEDS:DATA_SEGMOVAX,DATA_SEGMOVDS,AX 五、汇编语言程序示例一:两个多位十进制数相加 本程序将两个多位十进制数相加, 其中加数与被加数均以ASCII码形式存放在以DATA1和DATA2为首的5个内存单元中(低位在前), 相加结果送回DATA1处。程序中先要把加数与被加数由十进制ASCII码转化为十六进制的数字串, 然后将它们进行带进位相加并作AAA调整,最后将结果保存。程序流程图如下所示。示例二:排序 本程序将数据区中的10个数由小到大排序,而且排序后的数, 仍存放在该区域中。 程序采用冒泡法,设置了内、外两层循环, 其中在第 i 次外循环中通过(10 - i)次内循环找出剩下数中的最小数, 然后与当前数进行交换,从而完成排序。 程序流程图如下所示。3.5编程工具与汇编语言程序设计相关的常用工具主要有DEBUG和MASM一、DEBUG 简介DEBUG 是进行DOS下语言调试常用的工具。许多人用来对程序进行追踪,查错。也可以用于简单的汇编程序编程。下面对常用命令进行简单的介绍:(方括号内为可缺省)A address 进入address所指出的地址,直接进行汇编语言指令操作。 若缺省address,则进入上次A操作后所指地址。 C range address 把由range指出的地址范围里的内容,一一与以address起始的相同长度范围的内容进行比较,显示出不同的地址及内容。 D range 显示range所指出的内容(以HEX和ASCII)。 E address list 进入address所指出的地址,用list内的HEX代码取代原来的值。 若缺省li
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏科技大学船舶与海洋工程学院招聘2名笔试考试参考题库及答案解析
- 2025浙江温州市平阳县临港控股有限公司招聘财务人员2人考试笔试参考题库附答案解析
- 2026北京交通大学非教师岗位招聘47人笔试考试参考题库及答案解析
- 2025福建福多邦元福科技有限公司招聘2人笔试历年参考题库附带答案详解
- 2025湖南海猎企业管理咨询有限公司招聘1人笔试历年参考题库附带答案详解
- 建筑五金制品制作工安全宣贯强化考核试卷含答案
- 2025云南昆明市延安医院招聘见习人员13人(第二批)考试笔试备考题库及答案解析
- 模锻工安全实践评优考核试卷含答案
- 2025年8月浙江嘉兴市海宁市水务集团下属企业招聘拟聘用人员笔试历年参考题库附带答案详解
- 2025安徽科技大市场建设运营有限责任公司人才招聘(第二批)人员及笔试历年参考题库附带答案详解
- 2025年生态农业企业有机农业生产模式实施方案
- 国企企划专员考试题库及答案
- 2025国职五级考试题库及答案
- 隧道照明施工组织方案
- 2025年《黄帝内经》知识大赛典型题目及参考答案
- 2025福建省乡总海洋科技有限公司招聘4人考试笔试备考题库及答案解析
- YY/T 0648-2025测量、控制和实验室用电气设备的安全要求第2-101部分:体外诊断(IVD)医用设备的专用要求
- 专题78 人教版高中英语选择性必修二词汇表背默版-2026年高考英语一轮复习知识清单
- 项目实施团队组建与人员配置方案
- 雨课堂在线学堂《信息素养-学术研究的必修课》作业单元考核答案
- 挡土墙施工私人协议书
评论
0/150
提交评论