微机原理课件.doc_第1页
微机原理课件.doc_第2页
微机原理课件.doc_第3页
微机原理课件.doc_第4页
微机原理课件.doc_第5页
免费预览已结束,剩余50页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 计算机基础知识第一节 计算机中的运算基础一、数制及其转换 1)任意进制数的共同特点(n进制)n=2、8、10、16 、n进制数最多是由n个数码组成十进制数的组成数码为:09二进制数的组成数码为:0、1八进制数的组成数码为:07十六进制数的组成数码为:09、AF十六进制数和十进制数的对应关系是:09相同,A-10,B-11,C-12,D-13,C-14,F-15、n进制数的基数或底数为n,作算术运算时,有如下特点:低位向相邻高位的进位是逢n进1(加法);低位向相邻高位的借位是以1当本位n(减法)。、各位数码在n进制数中所处位置的不同,所对应的权也不同。以小数点为分界点:向左(整数部分):各位数码所对应的权依次是n0、n1、n2,向右(小数部分):各位数码所对应的权依次是n-1、n-2、n-3,权:数制每一位所具有的值。2)数制的转换 、非十进制数十进制数转换方法:按位权展开求和例:101.11B = 1*22+1*20+1*2-1+1*2-2= 4+1+0.5+0.25= 5.75F94H = 15*162+9*161+4*160= 3988注意点:只有十进制数的下标可以省略,其他进制数不可以省略。、十进制数非十进制数(K进制数)转换方法:分成小数和整数分别转换。整数部分:除K取余,直至商为0,先得的余数为低位;小数部分:乘K取整,先得的整数为高位。例:把3988转换成16进制数例:0001,1010,1110,1101,1011.0100B 1 A E D B 4 H若十六进制数转换为二进制数,则将每一位拆成4位。3)模的概念 模:恒量一个存储单元的最大容量也是一个机器所能处理的最大数据。若a和b除以M,余数相等,则称a和b对于M 是同余的,则可以写成:a = b(mod M)容器的最大容量称为模。可写成:KM + X = X (mod M)4)有符号数在计算机中的表示方法在计算机中,一个有符号数可以用原码、补码和反码表示。A) 共同规律:、用0表示正号,用1表示负号,且摆放在数据的最高位,有符号数和无符号数表示的根本区别在于无符号数的最高位是数值位,有符号数的最高位是符号位;、同一正数的原、补、反码都相同。、定义区间均对模2n而言,其中n表示有符号数的二进制代码 位数。B)其它规律:、任一负数的原码和对应的正数(绝对值相等)的原码仅是符号位不同;、任一负数的反码是表示其符号位为1,数值位取反;、任一负数的补码是其反码的最低位加1;、从定义区间上看原码和反码的定义区间相同,是 2n-1X2n-1;补码的定义区间是 2n-1X2n-1;、0的原码、反码有+ 0和- 0之分;0的补码只有一种表达方式。例1:设X = +97 求X原、X反、X补 (mod 28)解:97=110 0001BX原=0110 0001B;X反=X补=0110 0001B。例2:设X = -97, 求X原、X反、X补 (mod 28)解:97=110 0001BX原=1110 0001B;X反=1001 1110B;X补=1001 1111B。例3:设X = -137 求X原、X反、X补 (mod 29)解:137=1000 1001BX原=11000 1001B;X反=10111 0110B;X补=10111 0111B。5)带符号数运算时的溢出问题A)、溢出和进位的区别:进位是指最高位向更高位的进位溢出是指运算结果超出数所能表示的围。带符号数所能表示的范围:(若用n位二进制数码表示)原码:-(2n-1-1)X2n-1-1补码:-2n-1X2n-1-1反码:-(2n-1-1)X2n-1-1B)、溢出的判断方法:设CD_A是符号位向更高位的进位,CD_B是数值位向符号位的进位,则溢出可用V=CD_ACD_B判断,V=1表示有溢出,V=0表示无溢出。对于加减法,也可以这样判断,只有下述4中情况有可能产生溢出:正数+正数,结果应为正,若为正,则无溢出;若为负,则有溢出。负数+负数,结果应为负,若为负,则无溢出;若为正,则有溢出。正数-负数,结果应为正,若为正,则无溢出;若为负,则有溢出。负数-正数,结果应为负,若为负,则无溢出;若为正,则有溢出。对于乘(除)法,乘积(商)超过了能存放的范围有溢出,否则无溢出。其它情况肯定无溢出。C)、注意点:无符号数和带符号数表示方法的区别:无符号数:无符号位,所有位都是数值位,即最高位也是数值位;带符号数:有符号数,且在最高位,其余各位才是数值位。二进制数的减法运算例如:Y11(10)8(10)=? (mod 25)Y11(10)8(10)11(10)(8(10)11(10)补(8(10)补11(10)原01011B8(10)原11000B8(10)反10111B8(10)补11000B01011B11000B00011B6)、基本名词位 :BIT,缩写为b; 字节 :BYTE,由8位二进制数代码表示,缩写为B; 字 : WORD,取决于计算机CPU的字长,内部寄存器的位数,其中8086CPU为16位,386、486CPU为32位; 千字节:1KB = 1024B = 210B , 兆字节:1MB = 220B, 吉字节:1GB = 230B=1024MB 太字节:1TB = 240B=1024GB 第二节:计算机中数据的编码一、十进制数在计算机中的表示方法BCD(Binary Coded Decimal)是用4位二进制代码表示一位十进制数,由于4位二进制代码表示16种状态,而十进制数只取其中10种状态。选择不同的对应规律,可以得到不同形式的BCD码。最常用的是8421BCD码。由于在机内采用BCD码进行运算绕过了二进制、十进制间的复杂转化环节,从而节省了机器时间。例:59 = (0101,1001)BCD 465 = (0100,0110,0101)BCD (011010000010)BCD = (0110,1000,0010)BCD = 682注意点:BCD码与二进制数之间不能直接转换,需将BCD码先转换成十进制数,再由十进制数转换为二进制数。与十六进制数的区别在于:组内逢2进1,组间逢十进1。二、字符在计算机中的表示方法由于大、小写英文字母、09数字字符、标点符号、计算机特殊控制符一共不超过128个,所以只要用七位二进制数码来表示,称为ASCII码。国际标准为ISO-646,我国国家标准为GB1988。在计算机中,一个字符通常用一个字节(八位)表示,最高位通常为0或用于奇偶校验位。例: A= 41H = 01000001B 0= 30H = 00110000B a= 61H = 01100001B ; = 3BH = 00111011BISO2022标准在兼容ISO646的基础上扩展成8位码,可表示256个字符,扩充了希腊字母、数学符号、非拉丁字符、商用图符,游戏符号等。三、机器数和真值机器数:是摆在计算机寄存器或存储器或I/O端口中的数;真 值:描述机器数对应于某一确定的码制就有唯一确定的值。例:机器数34H,用原码表示为+52;用反码表示为+52;用补码表示为+52;用BCD码表示为34;用ASCII码表示为4。即+52原=+52反=+52补=34H34BCD = 34H4ASCII = 34H机器数97H,用原码表示为-23;用反码表示为-104;用补码表示为-105;用BCD码表示为97;用ASCII码表示为ETB。第三节:数的定点和浮点表示一、数的定点和浮点表示定点表示:又称整数表示,小数点在数中的位置是固定不变的;浮点表示:又称实数表示,小数点在数中的位置是浮动的。一个任意实数,在计算机内部可以用指数(为整数)和尾数(为纯小数)来表示,用指数和尾数表示实数的方法称为浮点表示法。对于任意一个二进制数N,可用N=S*2P表示,其中S为尾数(二进制数),表示N的全部有效数字P为阶码(二进制数)指明小数点的位置2为阶码的底,当阶码P为固定值时,数的这种表示法称为定点表示,这样的数称为定点数;当阶码为可变时,数的这种表示法称为浮点表示,这样的数称为浮点数。一个实数可表示成一个纯小数与一个乘幂之积。如 1011.101=0.10111012100 -0.0010011=-0.10011210-110001101=-0.11000110121001表示浮点数时指数选用什么编码?尾数的格式和小数点位置如何确定?起初不同的计算机有不同的规定,产生了相互间数据格式的不兼容。为此,IEEE制定了有关标准,并被普遍采用。浮点数的长度可以是32位、64位甚至更长,分阶码和尾数两部分。阶码位数越多,可表示的数的范围越大;尾数越多,所表示的数的精度越高。第二章 8086/8088微处理器及其系统结构第一节 8086/8088CPU一、总线接口部件BIU与执行部件EU1、总线接口部件BIU:由4个16位段寄存器,一个16位指针寄存器。20位物理地址加法器,6字节指令队列(8088为4字节)及总线控制电路组成。负责与存储器及I/o端口 的数据传送,既BIU。根据执行部件EU计算出的16位偏移地址及16位段积存器提供的16位段地址,通过地址加法器产生20位物理地址。根据EU单元的请求,用20位物理地址对存储器进行读/写操作,也可对I/O口进行读/写操作。无论8086还是8088都会在执行指令的同时,从内存中取下面一条或几条指令放在指令队列中。2、执行部件EU:执行部件由ALU、寄存器阵列、标志寄存器FR、控制器等几个部分组成。其任务就是从指令队列中流取出指令,然后分析和执行指令,还负责计算操作数的16位偏移地址。3、BIU和EU的管理BIU和EU非同步工作,其管理原则为:(1)指令队列有2个字节节空(8086)时, BIU会自动把下一条指令取到指令队列中。(2)EU在执行指令过程中,如果必须访问存储器或I/O设备,则EU会自动请求BIU进入总线周期去完成访问存储器或I/O操作,此时若BIU空闲,就会立即完成EU请求。否则BIU将首先完成自己,将指令取至指令队列中的任务,再响应EU的请求。(3)当指令队列已满,而EU又无请求时,BIU进入空闲状态。(4)当EU执行转移类,调用及返回指令时,EU将不再用指令队列中顺序装入的指令。此时指令队列中原有的内容被自动清除,而BIU会接着将另一程序段的指令装入指令队列EU和BIU这种并行的工作方式极大地提高了CPU的工作效率。二、系统总线总线是部件之间进行数据(电信号)交换的通道。80x86计算机的系统总线分为3类:数据总线地址总线控制总线1、数据总线数据总线是用来传递数据的,定义了CPU在每个内存周期所能存取数据的位数。80x86系列CPU的数据总线为8位、16位、32位或64位。这就是“为什么通常的数据存取是以8位、16位、32位或64位进行的”。数据总线越宽,处理能力越强。具有N位数据总线并不意味着CPU只能处理N位数据。2. 地址总线地址总线用来指出数据的地址(内存或I/O)。地址总线的位数决定了最大可编址的内存与I/O空间。对于N位地址总线,CPU可以提供2N个不同地址:02N -1。地址总线由内存与I/O子系统共享使用(I/O只用低16位)。3. 控制总线控制总线用来控制CPU与内存和I/O设备之间的数据传送方(如传送方向)。三、80x86 CPU的寄存器组1. 通用寄存器8位通用寄存器8个:AL、AH、BL、BH、CL、CH、DL、DH。16位通用寄存器8个:AX、BX、CX、DX、SI、DI、BP、SP。32位通用寄存器8个:EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。AL与AH、BL与BH、CL与CH、DL与DH分别对应于AX、BX、CX和DX的低8位与高8位。AX、BX、CX、DX、SI、DI、BP和SP分别对应于EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP的低16位。AX:累加器,用累加器进行的操作可能需要更少时间,累加器可用于乘、除、输入/出操作,它的使用频率很高。BX:基地址寄存器,可作为存储器指针来使用。CX:计数寄存器,在循环和字符串操作时,要用它来控制循环次数,在位操作中,当移多位时,要用CL来指明移位的位数。DX:数据寄存器,在进行乘、除时,可作默认的操作数参与运算,也可用于存放I/O的端口地址。寄存器:由触发器组成成一个触发器就是一个一位寄存器,由多个触发器可以组成一个多们寄存器。缓冲寄存器-用以暂存数据。移位寄存器-能够提供所有存注数据一位一位地向左或 向右移。计数器-一个计数脉冲到达时,会按二进制数的规律累 计脉冲数。累加器-用以暂存每次ACU中计算的中间结果。存储器:是计算机的主要组成部分,它即可用来存储数据,也可用以存放计算机的运算程序。存储器由寄存器组成,可以看作是一个程序寄存器堆。每个存储单元数据实际上相当于一个缓冲寄存器,可分为只读存储器(ROM),随机存储器(RAM)。数据寄存器:主要用来存储保存操作数和运算结果等信息,从而节省读取操作数所须占用总线和访问存储器的时间。SI、DI称为变址寄存器,它们主要用于存放存储单元在内的偏移量,用它们可实现多种存储器操作数的寻址方式。为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器,作为通用寄存器,也可存放逻辑运算的操作数和运算结果。BP、SP称为指针寄存器,主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式。乃以不同的地址形式访问存储单元提供方便。同上,不可分,也可存数据。它们主要用于访问堆栈内的存储单元,并且规定:BP为基指针寄存器,用它可直接存取堆栈中的数据。SP为堆栈指针寄存器,用它只可访问栈顶。SI和DI分别用来存放字符串处理时,源操作数段内偏移地址和目的操作数段内偏移地址,故分别称作源变址寄存器和目的变址寄存器。2. 专用寄存器指令指针:EIP(32位)、IP(16位)。IP是EIP的低16位。标志寄存器:EFLAGS(32位)、FLAGS(16位)。FLAGS是EFLAGS的低16位。表2-1 寄存器的隐含用法标志寄存器标志寄存器(Flag Register)共有16位,其中7位未用。标志寄存器内容如图所示:(1)状态(条件)标志 (2)控制标志OFDFIFTFSFZFAFPFCF3. 段寄存器6个16位的段寄存器:CS、DS、ES、SS、FS和GS。FS、GS以及所有32位寄存器是从80386 CPU开始引入的。第二节 堆栈的概念一、堆栈的概念堆栈是在存储器中划出的一块连续存储区,这个连续存储区的底端是固定的。另一端是活动的,可以上下进行浮动。所有出入这个存储区的信息都要从活动的一端出入,即堆栈中的数据遵循先进后出,后进先出的原则。在任何时刻,栈顶总是指向最后一个存入堆栈的数据的存储单元。由图可知当TOP小于等于BOTTOM时堆栈为空,不存放任何数据;当堆栈存有数据时候,TOP大于BOTTOM。二、8086/8088堆栈的组织在8086/8088系统中堆栈是由堆栈寄存器SS指定一段内存储区。堆栈的底P是堆栈段的最大地址单元。堆栈顶P(栈顶)由堆栈指针SP指向,SP中始终包含有段地址(起始地址)与栈顶之间的距离(字节数)。当堆栈初始化,SP的值为堆栈的长度(这时它指向栈底+1的单元)。如上图所示,由于SP是16位寄存器,因此堆栈的深度(长度,即能存放的字节数)最大是64KB.(88)。8086/8088堆栈是按字进行组织,每次在堆栈中存取的数据都是两个字节。第三节 8086的系统组一、8086存储器的分段结构8086 CPU中有四个段寄存器:CS,DS,SS和ES,这四个段寄存器存放了CPU当前可以寻址的四个段的基值,也即可以从这四个段寄存器规定的逻辑段中存取指令代码和数据。一旦这四个段寄存器的内容被设定,就规定了CPU当前可寻址的段,如图2-7所示。图2-7 当前可寻址的存储器段(堆栈段和附加段重叠)二8086存储器的逻辑地址与物理物理地址:内存单元的实际地址,也就是出现在地址总线上的地址。逻辑地址:或称分段地址,记作段地址: 段内偏移地址 段地址表示段在内存中的起始位置,通常被保存在某个段寄存器中。段内偏移地址表示内存单元相对于段起始位置的位移,简称偏移地址,也叫有效地址EA。段地址与偏移地址都是16位。系统采用下列方法将逻辑地址自动转换为20位的物理地址:物理地址 = 段地址 16 + 偏移地址每个内存单元具有唯一的物理地址,但可由不同的逻辑地址描述。8086存储器的逻辑地址与物理地址8086 CPU中的每个存储元在存储体中的位置都可以使用实际地址和逻辑地址来表示。逻辑地址可表示为段首地址:偏移地址CPU访问存储器时,要形成20位的物理地址,即先找到某段,再找到该段内的偏移量。换句话说,CPU是以物理地址访问存储器的, 三8086存储器20位物理地址的形成在80868088存储空间中,把16字节的存储空间称作一节(Paragraph)。为了简化操作,要求各个逻辑段从节的整数边界开始,也就是说段首地址低4位应该是“0”,因此就把段首地址的高16位称为“段基址”,存放在段寄存器DS或CS或SS或ES中,段内的偏移地址存放在IP或SP中。 例如,代码段寄存器CS2000H,指令指针寄存器存放的是偏移地址IP2200H,存储器的物理地址为20000H+2200H22200H 第三章 8086的寻址方式第一节 概述一、 概念1、指 令:让计算机完成某种操作的命令。指令的集合称作指令系统。指令的符号用规定的英文字母组成称为助记符。2、语 言:计算机中真正可以处理的只是由 “0” “1”组成的二进制代码。这种指令代码易出错且不易修改,由于依赖于机器,使 用极不方便,使人们发明了“指令的助记符”,用几个字母(往往就是其含义的英文单词或缩写)代替某条指令。如加法用ADD表示,这种符号系统的扩大就是汇编语言,使用汇编语言编程。优点是运行效率高,可直接对硬件内部进行控制。缺点是对硬件有更深入的了解,而且编程效率不高,并且与机器的体系结构仍有一定的依赖关系。3、汇编程序:由于机器并不能直接识别和运行用汇编程序编制出的程序,必须先转换成对应的机器代码指令,这项工作不用手工完成,仅须交给称为“汇编程序”的软件处理一下,即可得到可以直接运行的程序。人们将用汇编程序编出的程序称为“源程序”称用汇编程序处理后的程序为“目的程序”。二、指令的组成指令的组成指令由操作码和操作数两部分组成操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分用一个唯一的助记符表示(指令功能的英文缩写),对应着机器指令的一个二进制编码操作数是指令执行的参与者,即各种操作的对象,可以是一个具体的数值,可以是存放数据的寄存器,或指明数据在主存位置的存储器地址例:START:MOV AL,80H;将16进制数80H送入AL标号是给指令所在地址取的名字注释本身只用来对指令功能加以说明,给阅读程序带来方便,汇编程序对它不做任何处理。有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有3个甚至4个操作数三、寻址方式指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址操作数采取哪一种寻址方式,会影响机器运行的速度和效率如何寻址一个操作数对程序设计很重要第二节 8086的机器代码格式一、8086的机器代码格式1/2字节0/1字节0/1/2字节0/1/2字节mov ax,BP+0 ;机器代码是 8B 46 00前一个字节8B是操作码(含w1表示字操作)中间一个字节46(01 000 110)是 “mod reg r/m”字节reg000表示目的操作数为AXmod01和r/m110表示源操作数为BP+D8最后一个字节就是8位位移量D800二、 其他机器代码形式 mov al,05 ;机器代码是B0 05前一个字节B0是操作码(含一个操作数AL),后一个字节05是立即数mov ax,0102H ;机器代码是B8 02 01前一个字节B8是操作码(含一个操作数AX),后两个字节02 01是16位立即数(低字节02在低地址)三、指令的助记符格式操作码 操作数1,操作数2;注释操作数2,称为源操作数 src,它表示参与指令操作的一个对象操作数1,称为目的操作数 dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果分号后的内容是对指令的解释传送指令MOV的格式 MOV dest,src;destsrc MOV指令的功能是将源操作数src传送至目的操作数dest,例如: MOV AL,05H;AL05H MOV BX,AX ;BXAX MOV AX,SI;AXDS:SI MOV AX,BP+06H;AXSS:BP+06H MOV AX,BX+SI ;AXDS:BX+SI传送指令MOV的功能第三节 立即数寻址方式一、 定义指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm,它可以是8位数值i8(00HFFH)也可以是16位数值i16(0000HFFFFH),立即数寻址方式常用来给寄存器赋值二、 立即数寻址指令MOV AL,05H;AL05HMOV AX,0102H;AX0102H第四节 寄存器寻址方式一、 定义操作数存放在CPU的内部寄存器reg中,可以是:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ES二、 寄存器寻址指令MOV AX,1234H;AX1234HMOV BX,AX;BXAX第五节 存储器寻址方式一、 定义及分类指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中8086设计了多种存储器寻址方式 1、直接寻址方式 2、寄存器间接寻址方式 3、寄存器相对寻址方式 4、基址变址寻址方式 5、相对基址变址寻址方式二、直接寻址方式有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越前缀改变MOV AX,2000H;AXDS:2000H;指令代码:A10020MOV AX,ES:2000H;AXES:2000H;指令代码:26A10020三、寄存器间接寻址方式有效地址存放在基址寄存器BX或变址寄存器SI、DI中默认的段地址在DS段寄存器,可使用段超越前缀改变 MOV AX,SI;AXDS:SI四、寄存器相对寻址方式有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址BX/BP/SI/DI8/16位位移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变寄存器相对寻址指令 MOV AX,DI+06H ;AXDS:DI+06H MOV AX,BP+06H ;AXSS:BP+06五、基址变址寻址方式有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成: 有效地址BX/BPSI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变基址变址寻址指令 MOV AX,BX+SI ;AXDS:BX+SI MOV AX,BP+DI ;AXSS:BP+DI MOV AX,DS:BP+DI ;AXDS:BP+DI六、相对基址变址寻址方式有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和: 有效地址BX/BPSI/DI8/16位位移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变相对基址变址寻址指令 MOV AX,BX+SI+06H ;AXDS:BX+SI+06H 位移量可用符号表示 同一寻址方式有多种表达形式七、几点注意事项1、用符号表示位移量在寄存器相对寻址或相对基址变址寻址方式中,位移量可用符号表示: MOV AX,SI+COUNT ;COUNT是事先定义的变量或常量(就是数值) MOV AX,BX+SI+WNUM ;WNUM也是变量或常量2、多种表达形式同一寻址方式可以写成不同的形式: MOV AX,BXSI ;等同于 MOV AX,BX+SI MOV AX,COUNTSI ;等同于 MOV AX,SI+COUNT MOV AX,WNUMBXSI ;等同于 MOV AX,WNUMBX+SI ;等同于 MOV AX,BX+SI+WNUM3、汇编语言指令格式由4部分组成:标号:指令助记符 目的操作数,源操作数;注释标号表示该指令在主存中的逻辑每个指令助记符就代表一种指令目的和源操作数表示参与操作的对象注释是对该指令或程序段功能的说明4、为了描述方便,采用下列符号约定: dest 目的操作数 src 源操作数 oprdn 第n个操作数,如oprd1, oprd2, oprd3 = 赋值 / 或者 reg8 8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL reg16 16位通用寄存器AX/BX/CX/DX/SI/DI/BP/SP reg32 32位通用寄存器EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP reg reg8/reg16/reg32 seg 段寄存器CS/DS/SS/ES/FS/GS mem8 8位内存操作数 mem16 16位内存操作数 mem32 32位内存操作数mem mem8/mem16/mem32 mem64 64位内存操作数imm8 8位立即数imm16 16位立即数imm32 32位立即数imm imm8/imm16/imm32第四章 8086的指令系统第一节 数据传送类指令一、 定义数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令,传送指令把数据从一个位置传送到另一个位置,除标志寄存器传送指令外,均不影响标志位重点掌握MOV XCHG XLAT PUSH POP LEA二、通用数据传送指令提供方便灵活的通用传送操作,有3条指令MOV、XCHG、XLAT1、传送指令MOV(move)A)把一个字节或字的操作数从源地址传送至目的地址MOV reg/mem,imm ;立即数送寄存器或主存例4.1立即数传送 mov al,4;al4,字节传送 mov cx,0ffh;cx00ffh,字传送 mov si,200h;si0200h,字传送 mov byte ptr si,0ah ;byte ptr 说明是字节操作 mov word ptr si+2,0bh ;word ptr 说明是字操作MOV reg/mem,imm ;立即数送寄存器或主存 mov ax,bx;axbx,字传送 mov ah,al;ahal, 字节传送 mov ds,ax;dsax,字传送mov si,al;sial,字节传送MOV reg/seg,mem ;主存送(段)寄存器 mov al,bx mov dx,bp;dxss:bp mov es,si;esds:si 不存在存储器向存储器的传送指令MOV reg/seg,mem ;主存送(段)寄存器 mov si,ds mov ax,es;axes mov ds,ax;dsaxes 对段寄存器的操作有一些限制B)MOV指令传送功能C)非法传送种类(1)两个操作数的类型要一致绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非法指令例如源操作数是字节,而目的操作数是字;或相反MOV AL,050AH ;非法指令:050Ah为字,而AL为字节寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型对于存储器单元与立即数同时作为操作数的情况,必须显式指明;byte ptr指示字节类型,word ptr指示字类型(2)两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现 mov ax,buffer1 ;axbuffer1(将buffer1内容送ax) mov buffer2,ax ;buffer2ax;这里buffer1和buffer2是两个字变量,实际表示直接寻址方式(3)要小心段寄存器的操作 不允许立即数传送给段寄存器MOV DS,100H ;非法指令:立即数不能传送段寄存器 不允许直接改变CS值MOV CS,SI;不允许使用的指令 不允许段寄存器之间的直接数据传送MOV DS,ES ;非法指令:不允许段寄存器间传送2、交换指令XCHG(exchange)把两个地方的数据进行互换 XCHG reg,reg/mem ;reg reg/mem(1) 存器与寄存器之间对换数据例4.6:寄存器间交换 mov ax,1234h;ax=1234h mov bx,5678h;bx=5678h xchg ax,bx ;ax=5678h,bx=1234h xchg ah,al;ax=7856h(2)器与存储器之间对换数据例4.7:寄存器与存储器交换 xchg ax,2000h;字交换 ;等同于 xchg 2000h,ax xchg al,2000h ;字节交换 ;等同于 xchg 2000h,al(3) 在存储器与存储器之间对换数据3、换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLAT;alds:bx+al换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码,表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码例4.8:代码转换 mov bx,100h mov al,03h xlat 换码指令没有显式的操作数,但使用了BX和AL;因为换码指令使用了隐含寻址方式采用默认操作数三、堆栈操作指令1、概念(1) 堆栈是一个“后进先出LIFO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定栈顶是地址较小的一端(低端),栈底不变(2)堆栈和队列 堆栈:按照后进先出(LIFO)的原则组织的存储器空间(栈) 队列:按照先进先出(FIFO)的原则组织的存储器空间(3)堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POPPUSH;进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部POP;出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2进栈指令PUSH PUSH r16/m16/seg ;SPSP2 ;SS:SPr16/m16/segpush axpush 2000h出栈指令POPPOP r16/m16/seg ;r16/m16/segSS:SP ;SPSP2pop axpop 2000h2、堆栈的特点 堆栈操作的单位是字,进栈和出栈只对字量 字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节 堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据 堆栈常用来临时存放数据、传递参数、保存和恢复寄存器例4.11:现场保护恢复 push ax;进入子程序后 push bx push ds . pop ds;返回主程序前 pop bx pop ax四、标志寄存器传送指令标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作 有2对4条指令: 低8位传送:LAHF和SAHF 16位传送:PUSHF和POPF1、标志低字节进出AH指令LAHF ;AHFLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF ;FLAGS的低字节AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/ PF/CF标志2、标志寄存器进出堆栈指令PUSHF ;SPSP2 ;SS:SPFLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2POPF ;FLAGSSS:SP ;SPSP2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2例4.12:置位单步标志pushf;保存全部标志到堆栈pop ax;从堆栈中取出全部标志or ax,0100h;设置D8=TF=1, ;ax其他位不变push ax;将ax压入堆栈popf;FLAGSAX ;将堆栈内容取到标志寄存器五、地址传送指令地址传送指令将存储器单元的逻辑地址送至指定的寄存器 有效地址传送指令 LEA 指针传送指令 LDS和LES注意不是获取存储器单元的内容1、有效地址传送指令LEA(load EA)将存储器操作数的有效地址传送至指定的16位寄存器中LEA r16,mem ;r16mem的有效地址EA例4.13:获取有效地址 mov bx,0400h mov si,3ch lea bx,bx+si+0f62h ;BX0400h003ch0f62h139EH 获得主存单元的有效地址;不是物理地址,也不是该单元的内容。可以实现计算功能2、指针传送指令 LDS r16,mem ;r16mem, ;DSmem+2 LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器LES r16,mem ;r16mem, ;ESmem+2 LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器例4.14:地址指针传送 mov word ptr 3060h,0100h mov word ptr 3062h,1450h les di,3060h;es=1450h,di=0100h lds si,3060h;ds=1450h,si=0100h mem指定主存的连续4个字节作为逻辑地址(32位的地址指针),送入DS:r16或ES:r16六、输入输出指令8086通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(Port)即I/O地址8086用于寻址外设端口的地址线为16条,端口最多为21665536(64K)个,端口号为0000HFFFFH每个端口用于传送一个字节的外设数据1、 输入输出寻址方式8086的端口有64K个,无需分段,设计有两种寻址方式(1)直接寻址:只用于寻址00HFFH前256个端口,操作数i8表示端口号(2)间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号对大于FFH的端口只能采用间接寻址方式2、输入指令IN将外设数据传送给CPU内的AL/AXIN AL,i8 ;字节输入:ALI/O端口(i8直接寻址)IN AL,DX ;字节输入:ALI/O端口(DX间接寻址)IN AX,i8 ;字输入:AXI/O端口(i8直接寻址)IN AX,DX ;字输入:AXI/O端口(DX间接寻址)例4.15:输入字量 ;直接寻址,字节量输入 in al,21h mov ah,al in al,20h ;直接寻址,字量输入 in ax,20h ;间接寻址,字量输入 mov dx,20h in ax,dx 两段功能相同,字量数据传送实际上实现了连续的两个端口地址的字节量传送3、输出指令OUT 将CPU内的AL/AX数据传送给外设OUT i8,AL ;字节输出:I/O端口AL(i8直接寻址)OUT DX,AL ;字节输出:I/O端口AL(DX间接寻址)OUT i8,AX ;字输出:I/O端口AX(i8直接寻址)OUT DX,AX ;字输出:I/O端口AX(DX间接寻址)例4.16:输出字节量 ;间接寻址,字节量输出 mov dx,3fch mov al,80h out dx,al第二节 算术运算类指令算术运算类指令四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算请注意算术运算类指令对标志的影响 掌握:ADD/ADC/INC、SUB/SBB/DEC/ NEG/CMP 熟悉:MUL/IMUL、DIV/IDIV 理解:CBW/CWD、DAA/DAS、 AAA/ AAS/AAM/AAD一、加法指令1、加法指令ADD指令将源与目的操作数相加,结果送到目的操作数,ADD指令按状态标志的定义相应设置ADD reg,imm/reg/mem ;regregimm/reg/memADD mem,imm/reg ;memmemimm/reg例4.17a:加法运算 mov al,0fbh;al=0fbh add al,07h;al=02h mov word ptr 200h,4652h ;200h=4652h mov bx,1feh;bx=1feh add al,bl;al=00h add word ptr bx+2,0f0f0h ;200h=3742h2、带进位加法指令ADCADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按状态标志的定义相应设置ADC指令主要与ADD配合,实现多精度加法运算ADC reg,imm/reg/mem ;regregimm/reg/memCFADC mem,imm/reg ;memmemimm/regCF例4.18a:双字加法 mov ax,4652h;ax=4652h add ax,0f0f0h;ax=3742h,CF=1 mov dx,0234h;dx=0234h adc dx,0f0f0h;dx=f325h,CF=0 ;DX.AX0234 4652H F0F0 F0F0H F325 3742H3、增量指令INC(increment)INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其他状态标志INC reg/mem ;reg/memreg/mem1inc bxinc byte ptr bx二、 减法指令1、减法指令SUB(subtract)SUB指

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论