版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微型计算机原理及应用微型计算机原理及应用第三章第三章80868086指令系统指令系统主要内容主要内容 指令系统的一般概念指令系统的一般概念 对操作数的寻址方式对操作数的寻址方式 六大类指令的操作原理六大类指令的操作原理操作码的含义操作码的含义指令对操作数的要求指令对操作数的要求指令执行的结果指令执行的结果u18086具有灵活的指令格式u28086指令格式中的一对多形式u38086有较强的运算指令u48086指令有极强的寻址能力u58086指令有处理多种数据能力80868086指令特点指令特点3.1 3.1 概述概述了解:了解:指令及指令系统指令及指令系统指令的格式指令的格式指令中的操作数类型指
2、令中的操作数类型指令:指令:控制计算机完成指定操作的命令控制计算机完成指定操作的命令指令系统:指令系统:处理器所能识别的所有指令的集合,还定义了使处理器所能识别的所有指令的集合,还定义了使 用这些指令的规则。用这些指令的规则。指令的兼容性:指令的兼容性:同一系列机的指令都是兼容的同一系列机的指令都是兼容的数据传送:数据传送:一般数据传送、输入输出指令、地址传送指令、一般数据传送、输入输出指令、地址传送指令、标志传送指令标志传送指令算术运算:算术运算:加法、乘法、减法、除法、十进制调整加法、乘法、减法、除法、十进制调整逻辑运算指令逻辑运算指令串操作串操作控制转移指令控制转移指令处理器控制处理器控
3、制指令的类型指令的类型3.1 3.1 概述概述3.1.1 3.1.1 指令的基本构成指令的基本构成运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作指令的长度指令的长度1 17 7个字节之间,指令中应包含的信息:个字节之间,指令中应包含的信息: 指令格式:指令格式:操作码操作码 操作数操作数 , 操作数操作数 执行何种操作执行何种操作目标操作数目标操作数源操作数源操作数参加操作的数据参加操作的数据或数据存放的地址或数据存放的地址 零操作数指令:零操作数指令: 操作码操作码 单操作数指令:单操作数指令: 操作码操作码 操作数操作数双操作数指令:双操作数指令: 操作码操作
4、码 操作数,操作数操作数,操作数多操作数指令:多操作数指令: 三操作数及以上三操作数及以上表征参加操作的数据本身表征参加操作的数据本身 立即数立即数表征数据存放的地址表征数据存放的地址寄存器寄存器存储器存储器3.1.1 3.1.1 指令的基本构成指令的基本构成1.1.立即数操作数:立即数操作数:(所谓立即数是指具有固定数制的操作数,即常数)(所谓立即数是指具有固定数制的操作数,即常数)表示参加操作的数据本身,可以是表示参加操作的数据本身,可以是8 8位或位或1616位位 例:例: MOV AXMOV AX,1234H1234H MOV BL MOV BL,22H22H立即数无法作为目标操作数立
5、即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在可取值范围内立即数可以是无符号或带符号数,其数值应在可取值范围内3.1.1 3.1.1 指令的基本构成指令的基本构成2.2.寄存器操作数:寄存器操作数:寄存器操作数存放在通用寄存器或段寄存器中,既可作为原寄存器操作数存放在通用寄存器或段寄存器中,既可作为原操作码,也可作为目的操作码。操作码,也可作为目的操作码。AXAX、BXBX、CXCX、DXDX存放字节操作数,存放字节操作数,SISI、DIDI、BPBP、SPSP只能存放只能存放字操作数。字操作数。表示参加运算的数存放在指令给出的寄存器中,可以是表示参加运算的数存放在指令给出的寄
6、存器中,可以是1616位位或或8 8位。位。例:例:MOV AXMOV AX,BXBX MOV DL MOV DL,CHCH段寄存器用来存放当前操作数的段基地址。在与通用寄存器段寄存器用来存放当前操作数的段基地址。在与通用寄存器或存储器传送数据时,段寄存器既可作为原操作数或目的操或存储器传送数据时,段寄存器既可作为原操作数或目的操作数。作数。不允许用一条指令将立即数传送到段寄存器,要用某个通用不允许用一条指令将立即数传送到段寄存器,要用某个通用寄存器作桥梁。寄存器作桥梁。3.1.1 3.1.1 指令的基本构成指令的基本构成3.3.存储器操作数:存储器操作数:可以是字节、字、双字。可以是字节、字
7、、双字。既可作为源操作数,也可作为目的操作数。既可作为源操作数,也可作为目的操作数。对大多数指令,不允许源操作数和目的操作数同时为存储器操对大多数指令,不允许源操作数和目的操作数同时为存储器操作数。作数。 需要这样做时,用某一通用寄存器作桥梁。需要这样做时,用某一通用寄存器作桥梁。表示当前参加运算的数存放在存储器的某一个或某两个单元中表示当前参加运算的数存放在存储器的某一个或某两个单元中例:例:MOV AX,1200H MOV AL,1200H22H11H1200H偏移地址偏移地址AHAL3.1.1 3.1.1 指令的基本构成指令的基本构成表表3.3 段寄存器使用的一些基本约定段寄存器使用的一
8、些基本约定 存储器操作类型存储器操作类型默认的段默认的段寄存器寄存器允许超越的允许超越的段寄存器段寄存器段内偏移地址来源段内偏移地址来源取指令CS无IP堆栈操作SS无SP通用数据读写DSCS,ES,SS按寻址方式取得串操作源串地址DSCS,ES,SSSI串操作目标串地址ES无DIBP作为基址寄存器SSCS,DS,ES按寻址方式取得3.1.1 3.1.1 指令的基本构成指令的基本构成指令字长与机器字长指令字长与机器字长指令字长由操作码的长度、操作数地址长度、操作数个数决定指令字长由操作码的长度、操作数地址长度、操作数个数决定8088/80868088/8086CPUCPU采用变字长指令格式采用变
9、字长指令格式机器字长:计算机能够直接处理的二进制数的位数机器字长:计算机能够直接处理的二进制数的位数3.1.1 3.1.1 指令的基本构成指令的基本构成指令的执行速度指令的执行速度一条指令的执行时间包括:取指令、取操作数、执行指令及一条指令的执行时间包括:取指令、取操作数、执行指令及传送结果传送结果指令的字长影响指令的执行速度指令的字长影响指令的执行速度 (常用指令的执行时间见(常用指令的执行时间见表表3-3-4 4)对不同的操作数,指令执行的时间不同:对不同的操作数,指令执行的时间不同: 存储器存储器 立即数立即数 寄存器寄存器快!快!3.1.1 3.1.1 指令的基本构成指令的基本构成指令
10、指令是让计算机完成某种操作的命令,指令的集合称作是让计算机完成某种操作的命令,指令的集合称作指令指令系统系统,不同,不同CPUCPU的计算机有不同的指令系统。指令是根据计的计算机有不同的指令系统。指令是根据计算机算机CPUCPU硬件特点研制出来的,硬件特点研制出来的,指令的符号用规定的英文字指令的符号用规定的英文字母组成,称为母组成,称为助记符助记符。操作码操作数,操作数操作码操作数,操作数 目标操作数,目标操作数,用以存放结果用以存放结果源操作数源操作数助记符,用以助记符,用以说明说明CPU执行执行的操作的操作立即操作数立即操作数具有固定数值的操作数,即常数。它不会由于指具有固定数值的操作数
11、,即常数。它不会由于指令的执行而发生变化,存在于指令之中。立即数操作数只能用令的执行而发生变化,存在于指令之中。立即数操作数只能用作源操作数,而不能用作目标操作数。作源操作数,而不能用作目标操作数。寄存器操作数寄存器操作数存放在存放在8086CPU的的8个通用寄存器或段寄存器个通用寄存器或段寄存器中,既可作为源操作数,也可以用作目标操作数。中,既可作为源操作数,也可以用作目标操作数。存储器操作数存储器操作数可以是字节、字或双字,分别存放在可以是字节、字或双字,分别存放在1个、个、2个个或或4个存储单元中。存储器操作数在指令中既可作为源操作数,个存储单元中。存储器操作数在指令中既可作为源操作数,
12、也用作目的操作数。对大多数指令,也用作目的操作数。对大多数指令,3.1.1 3.1.1 指令的基本构成指令的基本构成3.23.2 80868086的寻址方式的寻址方式 80868086指令系统中,有部分指令所用的指令系统中,有部分指令所用的8 8位或位或1616位操作数就在指位操作数就在指令中提供,这种方式叫立即数寻址方式。指令中的源操作数是立令中提供,这种方式叫立即数寻址方式。指令中的源操作数是立即数,即源操作数是参加操作的数据本身。即数,即源操作数是参加操作的数据本身。3.2.13.2.1立即寻址立即寻址(immediate addressing) MOVMOVALAL,80H80H ;将
13、;将1616进制数进制数80H80H送入送入ALAL MOV AX MOV AX,1090H 1090H ;将;将1090H1090H送送AXAX,AHAH中为中为1010,ALAL中为中为90H90H获得操作数所在获得操作数所在的地址的方法的地址的方法代代码码段段10H90HMOV操作码操作码低低8位位高高8位位代代码码段段立立即即数数AH AL 寻找操作数所在地址的方法寻找操作数所在地址的方法 寻找转移地址的方法寻找转移地址的方法 3.2.2 直接寻址(直接寻址(direct addressing) 使用直接寻址方式时,数据总是在存储器中,存储单元的偏移使用直接寻址方式时,数据总是在存储器
14、中,存储单元的偏移地址由指令直接指出,该地址与指令的操作码一起存放在内存的代地址由指令直接指出,该地址与指令的操作码一起存放在内存的代码段。也是低码段。也是低8 8位在前,高八位在后。所以直接寻址是对存储器进位在前,高八位在后。所以直接寻址是对存储器进行访问时可采用的最简单的方式。例如:行访问时可采用的最简单的方式。例如: MOVMOVAXAX,3102H3102H ;将;将DSDS段的段的3102H3102H、3103H3103H两单元两单元 内容送内容送AXAX中中若(若(DS)2000H,则所寻找的操作数的物理地址为:,则所寻找的操作数的物理地址为: 20000H3102H23102H数
15、数据据段段02H31H默认为段寄默认为段寄存器是数据存器是数据寄存器寄存器DS23102H偏移地址偏移地址31 02AH AL直接寻址方式下,直接寻址方式下,操作数的段地址操作数的段地址默认为数据段默认为数据段(DS),但允许),但允许段重设,即由指段重设,即由指令定义段。令定义段。n例:例:MOV AX,ES:1200H采用寄存器寻址方式的指令在执行时,操作就在采用寄存器寻址方式的指令在执行时,操作就在CPUCPU内内部进行,不需要使用总线周期,因此,执行速度快。在一条部进行,不需要使用总线周期,因此,执行速度快。在一条指令中,可以对源操作数采用寄存器寻址方式,也可以对目指令中,可以对源操作
16、数采用寄存器寻址方式,也可以对目的操作数采用寄存器寻址方式,还可能两者都用寄存器寻址的操作数采用寄存器寻址方式,还可能两者都用寄存器寻址方式。方式。参加操作的操作数在参加操作的操作数在CPUCPU的内部寄存器中。的内部寄存器中。3.2.3 寄存器寻址(寄存器寻址(register addressing)AXBX3.2.4 寄存器间接寻址寄存器间接寻址 (register indirect addressing) 寄存器间接寻址时,指令中指定的寄存器的内容不是操作数,寄存器间接寻址时,指令中指定的寄存器的内容不是操作数,而是操作数的偏移地址。而是操作数的偏移地址。参与操作的操作数存放在内存中,其
17、偏移参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。地址为指令中的寄存器的内容。例例3-5 MOV AX, SI6000DSS120016 0 0 006 1 2 0 0 61200 H AX44H 33H 存储器存储器数数据据段段1 2 0 0 寻址时默认的段寄存器通常为寻址时默认的段寄存器通常为DSDS。如寄存。如寄存器为器为BPBP时,则对应的段寄存器为时,则对应的段寄存器为SSSS。 寄存器间接寻址可分为以下寄存器间接寻址可分为以下4 4种:种:采用寄存器间接寻址时,操作数一定在存储器中,存储单元的采用寄存器间接寻址时,操作数一定在存储器中,存储单元的有效地址由寄存器指
18、出:有效地址由寄存器指出: DISIBPBXEA寄存器寄存器间接寻址间接寻址基址寻址(间址基址寻址(间址寄存器为基址寄存器寄存器为基址寄存器BX,BP)变址寻址(间址变址寻址(间址寄存器为变址寄存器寄存器为变址寄存器SI,DI)操作数的段地址(数据处于哪个段)取决于选择哪一个间址操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:寄存器: BXBX,SISI,DI DI 默认在数据段默认在数据段 BP BP 默认在堆栈段默认在堆栈段3.2.4 寄存器间接寻址寄存器间接寻址 (register indirect addressing) 位位移量位位移量168DISIBPBXEA采用寄存器
19、间接寻址时,允许在指令中指定一个位移量,采用寄存器间接寻址时,允许在指令中指定一个位移量,这样,有效地址通过一个寄存器的内容加上一个位移量来得这样,有效地址通过一个寄存器的内容加上一个位移量来得到。位移量可以为到。位移量可以为8 8位,也可以为位,也可以为1616位。即位。即3.2.5 寄存器相对寻址寄存器相对寻址例例3-73-7 MOV AX,DATABXMOV AX,DATABX假设(假设(DSDS)6000H, 6000H, (BX)1000H, DATA08H则物理地址则物理地址61008HALAXAH61008操作码操作码代码段代码段数据段数据段08 偏移量最低字节偏移量最低字节00
20、 偏移量最高字节偏移量最高字节 6 0 0 0DS1 0 0 0BX0 0 0 8DATA6 1 0 0 8 3.2.6 基址基址-变址寻址变址寻址 将将BX、BP、SI、DI等寄存器组合起来进行间接寻址等寄存器组合起来进行间接寻址-基址加变址的寻址。基址加变址的寻址。 8 0 0 0DS2 0 0 0BX1 0 0 0SIAXAHAL8 3 0 0 0 83000操作码操作码代码段代码段数据段数据段 DISIBPBXEA3.2.7 基址基址-变址变址-相对寻址相对寻址指令中指定了一个基址寄存器和一个变址寄存器指令中指定了一个基址寄存器和一个变址寄存器, ,同时还给出同时还给出一个一个8 8位
21、或位或1616位的位移量位的位移量, ,将将3 3者相加就得到操作数的偏移地址。者相加就得到操作数的偏移地址。 例例3-10 MOV AX, DATADIBX设(设(DS)8000H,(,(BX)2000H,(,(DI)1000H, DATA0200H,则指令访问的存储单元的物理地址,则指令访问的存储单元的物理地址83200H。3.2.8 隐含寻址隐含寻址指令隐含了的一个或两个操作数的地址,即操作数在默认的指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中地址中例:例: MUL BLMUL BL 指令的执行:指令的执行:ALALBL AXBL AX3.3 80863.3 8086指令系
22、统指令系统 传送指令;传送指令; 逻辑运算指令和移位指令;逻辑运算指令和移位指令; 控制转移指令;控制转移指令; 算术运算指令;算术运算指令; 串操作指令。串操作指令。80868086指令系统中包含指令系统中包含133133条基本指令。主要分为以下几类:条基本指令。主要分为以下几类:本节中要用到的符号:本节中要用到的符号: OPRDOPRD 泛指各种类型的操作数泛指各种类型的操作数 memmem 存储器操作数存储器操作数 accacc 累加器操作数累加器操作数 destdest 目的操作数目的操作数 src src 源操作数源操作数 disp disp 8 8位或位或1616位偏移量,可用符号
23、地址表示位偏移量,可用符号地址表示 DATA DATA 8 8位或位或1616位立即数位立即数 port port 输入输出端口,可用数字或表达式表示输入输出端口,可用数字或表达式表示 ()() 表示寄存器的内容表示寄存器的内容 表示存储单元的内容或偏移地址表示存储单元的内容或偏移地址3.3 80863.3 8086指令系统指令系统3.3.1 3.3.1 数据传送类指令数据传送类指令 传送类指令是指令系统中最活跃的一类指令,也是条数最多传送类指令是指令系统中最活跃的一类指令,也是条数最多的一类指令,主要用于数据的保存及交换等场合的一类指令,主要用于数据的保存及交换等场合,绝大多数都不绝大多数都
24、不会对状态寄存器会对状态寄存器FLAGSFLAGS产生影响。这类指令分为产生影响。这类指令分为4 4种。种。特点特点: :既可一次传送一个字节(既可一次传送一个字节(8 8位),也可一次传送一个字(位),也可一次传送一个字(1616位);位);可使用各种寻址方式;可使用各种寻址方式;可实现以下各种传送:可实现以下各种传送:1 1)一般传送指令)一般传送指令MOVMOV通用数据传送指令通用数据传送指令目标地址传送指令目标地址传送指令标志传送指令标志传送指令输入输出指令输入输出指令1 1、通用数据传送指令、通用数据传送指令n格式:格式:MOV dest,src将一个操作数从原将一个操作数从原地址传
25、送到目的地地址传送到目的地址,而原地址中的址,而原地址中的操作数保持不变。操作数保持不变。可实现以下各种传送:可实现以下各种传送:寄存器与寄存器或寄存器与段寄存器之间的传送寄存器与寄存器或寄存器与段寄存器之间的传送 寄存器与存储器之间的传递寄存器与存储器之间的传递立即数到寄存器的传送立即数到寄存器的传送立即数到存储器的传送立即数到存储器的传送存储器与段寄存器之间的传送存储器与段寄存器之间的传送MOV AL,CLMOV BX,AXMOV DX,5040HMOV BPSI,5MOV DS,1000H3.3.1 3.3.1 数据传送类指令数据传送类指令MOVMOV指令的两个操作数类型必须相同。指令的
26、两个操作数类型必须相同。不能用一个指令完成在两个内存单元之间直接传送数据不能用一个指令完成在两个内存单元之间直接传送数据不能用立即数直接给段寄存器直接赋值不能用立即数直接给段寄存器直接赋值(需要两个(需要两个MOVMOV指令)指令)不能在段寄存器之间进行直接数据传送(需要两个不能在段寄存器之间进行直接数据传送(需要两个MOVMOV指令)指令)在通用传送指令中,寄存器既可以作为源操作数,也可以作为目在通用传送指令中,寄存器既可以作为源操作数,也可以作为目的操作数,但的操作数,但CSCS和和IPIP这两个寄存器不能作为目的操作数这两个寄存器不能作为目的操作数,这两个,这两个寄存器的值不能随意修改。
27、寄存器的值不能随意修改。用用BXBX、SISI、DIDI间接寻址时,默认的段寄存器为间接寻址时,默认的段寄存器为DSDS,而用,而用BPBP来间接来间接寻址时,默认的段寄存器为寻址时,默认的段寄存器为SSSS。所有的通用传送指令都不改变标志所有的通用传送指令都不改变标志。FLAGSFLAGS整体不能作为操作数。整体不能作为操作数。需要注意的几点需要注意的几点:3.3.1 3.3.1 数据传送类指令数据传送类指令判断下列指令的正确性:判断下列指令的正确性:MOV AL,BX MOV AL,BL或或MOV AX,BXMOV BX,SI MOV AX,SI MOV BX,AXMOV DS,1000H
28、 MOV AX,1000H MOV DS,AXMOV DX,ES MOV AX,ES MOV DS,AX判断下列指令的正确性:判断下列指令的正确性:MOV AL,BXMOV AX,SI05HMOV BXBP,BXMOV DS,1000HMOV DX,09HMOV 1200,SI3.3.1 3.3.1 数据传送类指令数据传送类指令例例312把内存中首地址为把内存中首地址为MEM1的的200个字节送到首地个字节送到首地址为址为MEM2的区域中。的区域中。 MOV SI,OFFSET MEM1 MOV DI, OFFSET MEM2 MOV CX, 20NEXT:MOV AL,SI MOV DI,
29、AL INC SI INC DI DEC CX JNZ NEXT HLT3.3.1 3.3.1 数据传送类指令数据传送类指令将将( (* *) ) 的的ASCIIASCII码码2 2AHAH送入内存送入内存10001000H H开始的开始的100100个个单元中:单元中: MOV DIMOV DI,1000H1000H MOV CX MOV CX,64H64H MOV AL MOV AL,2AH2AHAGAINAGAIN:MOV DIMOV DI,ALAL INC DI INC DI ;DI+1DI+1 DEC CX DEC CX ;CX-1CX-1 JNZ AGAIN JNZ AGAIN ;
30、CX0CX0则继续则继续 HLT HLT 3.3.1 3.3.1 数据传送类指令数据传送类指令上段程序在代码段中的存放形式上段程序在代码段中的存放形式設設CS=109EHCS=109EH,IP=0100HIP=0100H,则各条指令存放地址则各条指令存放地址如下:如下: CS : IPCS : IP 109E 109E:0100 MOV DI0100 MOV DI,1000H1000H 109E 109E:0103 MOV CX0103 MOV CX,64H64H 109E 109E:0106 MOV AL0106 MOV AL,2AH2AH 109E 109E:0108 MOV DI0108
31、 MOV DI,ALAL 109E 109E:010A INC DI010A INC DI 109E 109E:010B DEC CX010B DEC CX 109E 109E:010C JNZ 0108010C JNZ 0108 109E 109E:010E HLT010E HLT3.3.1 3.3.1 数据传送类指令数据传送类指令数据段中的分布数据段中的分布 送上送上2 2AHAH后数据段中相应存储单元的内容改后数据段中相应存储单元的内容改变如下:变如下:DSDS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1000 2A 2A
32、 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2
33、A 2A 2A 2A 2A 2A 2A 2A1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2ADSDS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS
34、:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 001060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00偏移地址偏移地址DI3.3.1 3.3.1 数据传送类指令数据传送类指令2)堆栈操作指令)堆栈操作指令PUSH和和POP堆栈操作的原则:堆栈操作的原则: 存取每一次必须是一个字,从高地址向低地址方向增长存取每一次必须是一个字,从高地址向低地址方向增长 堆栈指令中的操作数只能是寄存器或存储器堆栈指令中的操作数只能是寄存器或存储器 堆栈段在内存中的位置由堆栈段在内存中的位置由SS决定,堆栈指
35、针决定,堆栈指针SP总指向栈顶,总指向栈顶,SP的内容等于当前栈顶的偏移地址的内容等于当前栈顶的偏移地址 先进后出先进后出推入堆栈推入堆栈-PUSH;弹出堆栈;弹出堆栈-POP。 堆栈是内存中的一个特殊区域,用以存放寄存器或存储器中暂时堆栈是内存中的一个特殊区域,用以存放寄存器或存储器中暂时不用又必须保存的数据。它在内存中所处的段称为堆栈段,其段地不用又必须保存的数据。它在内存中所处的段称为堆栈段,其段地址存放在堆栈段寄存器址存放在堆栈段寄存器SS中。中。堆栈:堆栈:内存中一个特定的区域,用以存放寄存器或存储器中暂时不内存中一个特定的区域,用以存放寄存器或存储器中暂时不用又必须保存的数据。用又
36、必须保存的数据。堆栈段:堆栈段:堆栈在内存中所处的段。其地址在堆栈在内存中所处的段。其地址在SS中。中。栈顶:栈顶:当前可用堆栈操作指令进行数据交换的存储单元。当前可用堆栈操作指令进行数据交换的存储单元。3.3.1 3.3.1 数据传送类指令数据传送类指令3.3.1 3.3.1 数据传送类指令数据传送类指令压栈指令压栈指令 PUSH3.3.1 3.3.1 数据传送类指令数据传送类指令出栈指令出栈指令POP存储器SS低地址SP高地址堆栈增长方向堆栈段栈顶堆栈示意图主程序断点1断点2子程序1 子程序2执行子程序2子程序调用示意图3.3.1 3.3.1 数据传送类指令数据传送类指令压栈指令压栈指令
37、PUSH PUSH 格式格式: PUSH src: PUSH src出栈指令出栈指令 POP POP 格式格式: POP dest: POP dest注:操作数是注:操作数是l 寄存器(数据寄存器、地址指针和变址寄存器)寄存器(数据寄存器、地址指针和变址寄存器)l 段寄存器(段寄存器(CSCS除外)除外)l 存储单元存储单元压栈指令压栈指令 PUSHPUSH指令执行过程:指令执行过程: (SP (SP)(SPSP)-2-2 (SPSP)-1-1操作数高字节操作数高字节 (SPSP)-2-2操作数低字节操作数低字节出栈指令出栈指令POPPOP指令执行过程:指令执行过程: (SPSP) 操作数低字
38、节操作数低字节 (SPSP)+1 +1 操作数高字节操作数高字节 (SP (SP)(SPSP)+2+23.3.1 3.3.1 数据传送类指令数据传送类指令 SP-2=11FEH12H34H1200H堆堆栈栈段段12H34HAX入栈后入栈后1200H堆堆栈栈段段入栈前入栈前设设AX=1234HAX=1234H,SP=1200HSP=1200H执行执行 PUSH AX PUSH AX 指令后堆栈区的状态:指令后堆栈区的状态: 3.3.1 3.3.1 数据传送类指令数据传送类指令执行执行 POP AX POP AX 堆栈区的状态:堆栈区的状态:12H34H11FEH堆堆栈栈段段代代码码段段POP12
39、34 AX SP+23.3.1 3.3.1 数据传送类指令数据传送类指令堆栈操作指令说明堆栈操作指令说明指令的操作数必须是指令的操作数必须是1616位的位的操作数可以是寄存器或存储器两单元,但不能是立即数操作数可以是寄存器或存储器两单元,但不能是立即数不能从栈顶弹出一个字给不能从栈顶弹出一个字给CSCSPUSHPUSH和和POPPOP指令在程序中一般成对出现指令在程序中一般成对出现PUSHPUSH指令的操作方向是从高地址向低地址,而指令的操作方向是从高地址向低地址,而POPPOP指令的操作指令的操作正好相反正好相反3.3.1 3.3.1 数据传送类指令数据传送类指令例例3-133-13MOV
40、AX,9000HMOV SS,AXMOV SP,0E200HMOV DX,38FFHPUSH DXPUSH AXPOP DXPOP AX执行完执行完PUSH指令后指令后FF009038SS段段低地址低地址高地址高地址9E1FCH38 FFDH DL90 00AH AL9E200HFF009038SS段段低地址低地址高地址高地址38 FFAH A L90 00DH DL执行完执行完POP指令后指令后3.3.1 3.3.1 数据传送类指令数据传送类指令堆栈操作指令例堆栈操作指令例PUSH AXPUSH BXPUSH WORD PTRBXPOP WORD PTRBXPOP BXPOP AX如此,会使
41、如此,会使AX和和BX的内容互换的内容互换3.3.1 3.3.1 数据传送类指令数据传送类指令3) 3)交换指令交换指令格式:格式: XCHG OPRD1 XCHG OPRD1,OPRD2OPRD2使源操作数和目标操作数的内容互换使源操作数和目标操作数的内容互换w 两操作数必须有一个是寄存器操作数两操作数必须有一个是寄存器操作数w 不允许使用段寄存器。不允许使用段寄存器。w 两个操作数字长必须相同两个操作数字长必须相同 例:例: XCHGXCHG AXAX,BXBX XCHG XCHG 20002000,CLCL格式:格式:XLATXLAT说明:字节操作,用说明:字节操作,用BXBX的内容代表
42、表格首地址,的内容代表表格首地址,ALAL内容为内容为表内位移量,表内位移量,BX+ALBX+AL得到要查找元素的偏移地址得到要查找元素的偏移地址操作:操作: BX+AL ALBX+AL AL例:教材第例:教材第112112页页4 4)查表指令)查表指令3.3.1 3.3.1 数据传送类指令数据传送类指令查表指令例查表指令例数据段中存放有一数据段中存放有一张张ASCIIASCII码转换表,码转换表,设首地址为设首地址为20002000H H,现欲查出表中第现欲查出表中第1111个代码的个代码的ASCIIASCII码码(设(设DS=4000HDS=4000H)303132.394142.4546
43、.42000H+042000H+110129ABEF可用如下指令实现:可用如下指令实现:MOV BXMOV BX,2000H 2000H ;(;(BXBX)表首地址表首地址MOV ALMOV AL,0BH 0BH ;(;(ALAL)序号序号XLAT XLAT ; 查表转换查表转换 执行后得到:(执行后得到:(ALAL)=42H=42H3.3.1 3.3.1 数据传送类指令数据传送类指令3.3.1 3.3.1 数据传送类指令数据传送类指令4 4)查表指令)查表指令 XLAT XLAT 3.3.1 3.3.1 数据传送类指令数据传送类指令5 5)字位扩展指令)字位扩展指令 将符号数的符号位扩展到高
44、位将符号数的符号位扩展到高位指令为零操作数指令,采用隐含寻址,隐含的操作数为指令为零操作数指令,采用隐含寻址,隐含的操作数为AXAX及及AXAX,DXDX无符号数的扩展规则为在高位补无符号数的扩展规则为在高位补0 0字节到字的扩展指令字节到字的扩展指令格式:格式: CBWCBW操作:将操作:将ALAL内容扩展到内容扩展到AXAX规则:若最高位规则:若最高位=1=1, 则执行后则执行后AH=FFHAH=FFH; 若最高位若最高位=0=0, 则执行后则执行后AH=00HAH=00H字到双字的扩展指令字到双字的扩展指令格式:格式: CWDCWD操作:将操作:将AXAX内容扩展到内容扩展到DX AXD
45、X AX规则:若最高位规则:若最高位=1=1, 则执行后则执行后DX=FFFFHDX=FFFFH 若最高位若最高位=0=0, 则执行后则执行后DX=0000HDX=0000H3.3.1 3.3.1 数据传送类指令数据传送类指令字位扩展指令例字位扩展指令例 MOV AL,44H CBW ;执行结果执行结果 MOV AX,0AFDEH CWD MOV AL,86H CBW?3.3.1 3.3.1 数据传送类指令数据传送类指令2 2 输入输出(输入输出(I/OI/O)指令)指令I/O是专门面向输入输出端口进行读写的指令。是专门面向输入输出端口进行读写的指令。执行输入指令时,执行输入指令时,CPU可以
46、从一个可以从一个8位端口读入一个字节到位端口读入一个字节到AL中,也可以从两个连续的中,也可以从两个连续的8位端口读一个字到位端口读一个字到AX中。中。 执行输出指令时,执行输出指令时,CPUCPU可以将可以将ALAL中的一个字节写到一个中的一个字节写到一个8 8位端口位端口中,或者将中,或者将AXAX中的一个字写到连续的中的一个字写到连续的8 8位端口读中。位端口读中。输入指令输入指令 IN acc,PORT IN acc,DX 输出指令输出指令 OUT PORT ,acc OUT DX ,acc端口地址端口地址端口号小于端口号小于FFH端口号大于端口号大于FFH端口号小于端口号小于FFH端
47、口号大于端口号大于FFH3.3.1 3.3.1 数据传送类指令数据传送类指令直接寻址直接寻址: : 直接给出直接给出8 8位端口地址,可寻址位端口地址,可寻址256256个端口个端口间接寻址间接寻址: : 16 16位端口地址由位端口地址由DXDX指定,可寻址指定,可寻址6464K K个端口个端口IN AX,80HMOV DX,2400HIN AL,DXOUT DX,AXOUT DL,35H 3.3.1 3.3.1 数据传送类指令数据传送类指令3. 地址传送指令地址传送指令(1) 取偏移地址指令取偏移地址指令LEA(Load Effective Address) 该指令功能是将存储器地址送到一
48、个寄存器,要求源操作数该指令功能是将存储器地址送到一个寄存器,要求源操作数必须为内存单元地址,目的操作数必须为一个必须为内存单元地址,目的操作数必须为一个16位的通用寄存器。位的通用寄存器。这条指令通常用来使一个寄存器作为地址指针。这条指令通常用来使一个寄存器作为地址指针。 例例 LEA LEABXBX,BUFFER BUFFER ;将内存单元;将内存单元BUFFERBUFFER的偏移地址送的偏移地址送BXBX MOV MOVALAL,BX BX ;取出;取出BUFFERBUFFER中的第一个数据送中的第一个数据送ALALMOVMOVAHAH,BXBX11 ;取出;取出BUFFERBUFFER
49、中的第二个数据送中的第二个数据送AHAH指令格式:指令格式:LEA reg16,mem3.3.1 3.3.1 数据传送类指令数据传送类指令例例322设(设(BX)1000H,(,(DS)6000H,(61050H)33H,(,(61051H)44H。比较以下两条指比较以下两条指令执行结果。令执行结果。LEABX, BX50H ;将内存单元;将内存单元BUFFER的偏移地的偏移地 址送址送BXMOVBX,BX+50H ;4433BX执行执行MOVMOV指令后指令后1050BX执行执行LEALEA指令后指令后61050H61051H4433存储区存储区DSDS段段3.3.1 3.3.1 数据传送类
50、指令数据传送类指令该指令用于把存储器该指令用于把存储器mem32中存放的一个中存放的一个32位的远地址指针位的远地址指针(包括偏移地址和段地址)送到(包括偏移地址和段地址)送到reg16和和DS。4个存储器单元的前个存储器单元的前两个单元的内容作为偏移地址送两个单元的内容作为偏移地址送reg16,后两个单元的内容作为段,后两个单元的内容作为段地址装入段寄存器地址装入段寄存器DS。指令格式:指令格式:LDS reg16,mem32(2) 将地址指针装入将地址指针装入DS和另一个寄存器的指令和另一个寄存器的指令LDS(Load pointer into register and DS) 3.3.1
51、 3.3.1 数据传送类指令数据传送类指令 如:设如:设213021302133H2133H这这4 4个单元存放着一个个单元存放着一个地址,地址,2130H2130H和和2131H2131H中中为地址的偏移量,为地址的偏移量,2132H2132H和和2133H2133H中为地址中为地址的段值,执行指令:的段值,执行指令:LDS DILDS DI,2130H2130H;使;使2130H2130H和和2131H2131H中的偏移量送中的偏移量送到到DI, 2132H和和2133H中的段值送到中的段值送到DS。 LDS LDS指令的功能是把指令的功能是把4 4个字节的地址指针(其中包括一个段个字节的
52、地址指针(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后针的后2 2个字节即段地址一定送到个字节即段地址一定送到DSDS中。中。2131H2130H5012DIC287DS501287C22133H2132H3.3.1 3.3.1 数据传送类指令数据传送类指令例例323设(设(DS)6000H,内存地址为内存地址为60348H开始的开始的单元中存放了一个单元中存放了一个32位的远指针位的远指针98011H。以下指令将该指针以下指令将该指针装入装入DS:SI中。中。LDS SI,0348HMOV AX,SI指令执行后:
53、指令执行后:(SI)8011H,(DS)9000H,(AX)3412H4433BX执行执行MOV指令后指令后1050BX执行执行LEA指令后指令后443361050H61051H存储区存储区DS段段3.3.1 3.3.1 数据传送类指令数据传送类指令4. 4. 标志位操作指令标志位操作指令 LAHFSAHFPUSHFPOPF隐含操作数隐含操作数AH隐含操作数隐含操作数FLAGSLAHF LAHF ;将将FLAGSFLAGS的低的低8 8位装入位装入AHAHSAHF ;SAHF ;执行与执行与LAHFLAHF相反的操作相反的操作SFPFAFZFCF.AHFLAGSD15D0D7D0针对针对FLA
54、GSFLAGS的堆栈操作指令的堆栈操作指令 将标志寄存器压栈或从堆栈弹出将标志寄存器压栈或从堆栈弹出3.3.1 3.3.1 数据传送类指令数据传送类指令3.3.23.3.2算术运算指令算术运算指令 算术运算指令涉及的一些问题算术运算指令涉及的一些问题无符号数和有符号数采用同一套加、减法指令。这就要求参与无符号数和有符号数采用同一套加、减法指令。这就要求参与加、减运算的数必须同为无符号数或有符号数,且要用不同的方法加、减运算的数必须同为无符号数或有符号数,且要用不同的方法检测无符号数或有符号数的运算结果是否溢出。检测无符号数或有符号数的运算结果是否溢出。所有的算术运算指令,都会影响状态标志。规则
55、如下:所有的算术运算指令,都会影响状态标志。规则如下:当无符号数运算产生溢出时,当无符号数运算产生溢出时,CF为为1;当有符号数运算产生溢出时,当有符号数运算产生溢出时,OF为为1;如果运算结果为如果运算结果为0,则,则ZF=1;如果运算结果为负数,则如果运算结果为负数,则SF=1I.如果运算结果中有偶数个别,则如果运算结果中有偶数个别,则PF=1。 加法运算指令加法运算指令减法运算指令减法运算指令乘法指令乘法指令除法指令除法指令1 1加法指令加法指令 (AdditionAddition)(1) (1) 不带进位的加法指令不带进位的加法指令 ADDADD OPRD1+OPRD2 OPRD1 比
56、如:比如:ADDAL,50H;AL和和50H相加,结果放在相加,结果放在AL中中ADDCX,1000H;CX中的内容和中的内容和1000H相加,结果在相加,结果在 CX中中 这些指令对标志位这些指令对标志位CF、OF、PF、SF、ZF和和AF有影响。有影响。格式:格式: ADD OPRD1,OPRD2普通加法指令普通加法指令ADD带进位位的加法指令带进位位的加法指令ADC加加1指令指令INC3.3.23.3.2算术运算指令算术运算指令 ADDADD指令例指令例 11111100 + 01111110 01011011 110110010标志位状态:标志位状态: CF=0 SF=1 AF=1 Z
57、F=0 PF=0 OF=13.3.23.3.2算术运算指令算术运算指令 (2) 带进位位的加法指令(带进位位的加法指令(add with carry)ADC OPRD1+OPRD2+CF OPRD1带进位位的加法指令带进位位的加法指令ADC在形式上和功能上都和在形式上和功能上都和ADD指令类似,指令类似,只有一点区别,就是执行只有一点区别,就是执行ADC指令时,将进位标志指令时,将进位标志CF的值加在和的值加在和中中, ADC指令多用于多字节数相加,使用前要先将指令多用于多字节数相加,使用前要先将CF清零。清零。 例例 :ADCAX,SI ;AX和和SI中的内容以及中的内容以及CF的值相加,结
58、果放的值相加,结果放 在在AX 中中ADCDX,SI;取;取SI和和SI+1所指的存储单元的内容和所指的存储单元的内容和DX的的 内容以内容以 及及CF的值相加,结果放在的值相加,结果放在DX中中 3.3.23.3.2算术运算指令算术运算指令 例例 设设CF=1,写出以下计算结果,写出以下计算结果 MOV AL,7EH ADCAL,0ABH例例 求求0107A379H+10067E4FH的和的和 MOV DX,0107H MOV AX,0A379H MOV BX,1006H MOV CX,7E4FH ADD AX,CX ADC DX,BX3.3.23.3.2算术运算指令算术运算指令 (3)增量
59、指令()增量指令(Increment)指令在执行时,将操作数的内容加指令在执行时,将操作数的内容加1,再送回该操作数,常用,再送回该操作数,常用于在程序中修改地址指针。主要用于在循环程序中修改地址指针于在程序中修改地址指针。主要用于在循环程序中修改地址指针和循环次数等。比如:和循环次数等。比如: INCALINCCX INC指令影响标志位指令影响标志位AF、OF、PF、SF和和ZF,但它不影响进位但它不影响进位标志标志CF。格式:格式: INC OPRD3.3.23.3.2算术运算指令算术运算指令 例例 计算计算2658+3619=2658+3619=? 结果结果存放在存放在SUMSUM单元单
60、元设被加数和加数的每一位设被加数和加数的每一位都以都以ASCIIASCII码形式存放在码形式存放在内存中,低位在前,高位内存中,低位在前,高位在后。在后。36H32H39H31HSTRING1STRING238H35H36H33H数数据据段段SUM.3.3.23.3.2算术运算指令算术运算指令 例例 LEA SI,STRING1 LEA DI,STRING2 LEA BX,SUM MOV CX,4 CLCNEXT:MOV AL,SI ADC AL,DI AAA MOV BX,AL INC SI INC DI INC BX DEC CX JNZ NEXT3.3.23.3.2算术运算指令算术运算指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辐射安全管理题库(含答案)
- 民房房屋购买合同范例
- 数据结构与算法复习题
- 特约顾问聘用合同范例
- 工程咨询合同范例内容
- 员工宿舍合租合同范例
- 合同范例生效
- Unit1《Greetings》(教学实录)-2024-2025学年沪教版(五四制)(2024)英语一年级上册
- 市场开发咨询合同范例
- 律师委托协议合同范例
- 《Photoshop CC图形图像处理实例教程》全套教学课件
- 公共租赁住房运行管理标准
- 2024-2030年中国永磁耦合器行业经营优势及竞争对手现状调研报告
- JJ∕G(交通) 200-2024 轮碾成型机
- 小学六年级奥数难题100道及答案(完整版)
- 小学科学教科版五年级上册全册易错知识点专项练习(判断选择-分单元编排-附参考答案和点拨)
- 电影作品解读-世界科幻电影智慧树知到期末考试答案章节答案2024年成都锦城学院
- NB-T47003.1-2009钢制焊接常压容器(同JB-T4735.1-2009)
- 聚焦高质量+探索新高度+-2025届高考政治复习备考策略
- 惠州市惠城区2022-2023学年七年级上学期期末教学质量检测数学试卷
- 北京市西城区2022-2023学年七年级上学期期末英语试题【带答案】
评论
0/150
提交评论