第3章_8086、微机原理课件_第1页
第3章_8086、微机原理课件_第2页
第3章_8086、微机原理课件_第3页
第3章_8086、微机原理课件_第4页
第3章_8086、微机原理课件_第5页
已阅读5页,还剩167页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-6-181第3章8086指令系统2022-6-182了解了解基本数据类型;基本数据类型;了解了解8086的指令格式;的指令格式;熟练熟练掌握掌握8086各种寻址方式各种寻址方式 ;熟悉熟悉8086常用指令的格式、功能常用指令的格式、功能教学要求2022-6-183教学重点教学重点 8086指令的操作数寻址方式指令的操作数寻址方式 8086的通用指令的通用指令2022-6-1843.1 基本数据类型基本数据类型3.2 8086的指令格式的指令格式3.3 8086指令的操作数寻址方式指令的操作数寻址方式3.4 8086的通用指令的通用指令总结总结本章主要内容2022-6-1853.1 基

2、本数据类型l字节字节l字字l双字双字l四字四字l双四字双四字 注意注意基本数据类型在内存中的字节顺序基本数据类型在内存中的字节顺序2022-6-1863.1.1字、双字、四字和双四字的对齐字、双字、四字和双四字的对齐当当数据对齐数据对齐时,对时,对字字来说,地址要来说,地址要被被2整除整除;对;对双字、四双字、四字和双四字字和双四字来说,地址要来说,地址要被被4、8和和16整除整除。80X86处理器能够访问任何有效地址的数据类型,而不需处理器能够访问任何有效地址的数据类型,而不需要对齐数据。但对于要对齐数据。但对于不对齐不对齐地址的数据,处理器访问时,地址的数据,处理器访问时,需要额外的访问存

3、储器时间需要额外的访问存储器时间应该将数据的地址对齐,以取得较高的存取速度!应该将数据的地址对齐,以取得较高的存取速度!2022-6-187假设假设80386要从要从内存地址内存地址2013H处读取一个双字,处读取一个双字,则要做则要做两次存储两次存储器访问操作器访问操作D53CB29A7BA66E122017H2016H2015H2014H2013H2012H2011H2010H内存内存不对不对准的准的双字双字举例说明2022-6-1881、首先读取从首先读取从2010H处开始的处开始的四个字节,其中三个字节要被四个字节,其中三个字节要被忽略掉,而忽略掉,而2013H中的字节则中的字节则是所

4、要求的双字中的一部分。是所要求的双字中的一部分。2、然后再取出四个字节,从地然后再取出四个字节,从地址址2014H开始,在开始,在2017处的字处的字节被忽略,留下双字所要求的节被忽略,留下双字所要求的其余三个字节。其余三个字节。D53CB29A7BA66E122017H2016H2015H2014H2013H2012H2011H2010H内存内存2013H2010H2011H2012H7B2014H2015H2016H2017H9AB23C读第二双字读第二双字读第一双字读第一双字所要求的双字所要求的双字2022-6-1893.1.2 数字数据类型(1)无符号整数)无符号整数 范围从范围从0到

5、到2n 1,其中,其中,n为整数的位数。为整数的位数。(2)符号整数)符号整数 用补码表示,范围从用补码表示,范围从-2n-1到到2n- -1。其中,。其中,n为整数的位数。为整数的位数。2022-6-18103.1.3 指针数据类型指针数据类型3.1.4 位字段数据类型位字段数据类型3.1.5 串数据类型串数据类型2022-6-18113.2 8086的指令格式标号标号: 助记符助记符 参数参数1, 参数参数2 ;注释注释 各部分之间至少用一各部分之间至少用一个空格作为间隔个空格作为间隔带方括号部分表示任选带方括号部分表示任选项项助记符助记符:说明计算机要执行哪种操作,用英文单词的缩写:说明

6、计算机要执行哪种操作,用英文单词的缩写表示。表示。参数参数:指令执行的参与者,即各种操作的对象。:指令执行的参与者,即各种操作的对象。参数参数1是目的操作数,是目的操作数,参数参数2是源操作数是源操作数2022-6-18123.3 8086指令的操作数寻址方式问题:问题:什么是寻址方式什么是寻址方式?寻找寻找操作数操作数存放地址的方式称为寻址方式。存放地址的方式称为寻址方式。注意注意:操作数的表达方法,为展开操作数的表达方法,为展开8086指令系统指令系统做好准备做好准备2022-6-1813操作数存放位置 指令中指令中 寄存器寄存器 存储器存储器 I/O端口端口2022-6-1814本节重点

7、介绍本节重点介绍 数据存放前三种位置的寻址方式数据存放前三种位置的寻址方式 以以 MOV 指令为例指令为例 以以 源操作数源操作数为例为例2022-6-1815传送指令MOV(move)的格式lMOV指令的格式指令的格式:MOV dest, src;destsrc lMOV指令的功能:指令的功能:是将是将源操作数源操作数src传送至传送至目的操作数目的操作数dest,例如:,例如:MOV AL,05H;AL05HMOV BX,AX;BXAXMOV AX,SI;AXDS:SIMOV AX,BP+06H;AXSS:BP+06HMOV AX,BX+SI;AXDS:BX+SI2022-6-18161

8、1、立即数寻址方式、立即数寻址方式例:例: MOV AL, 5 MOV AX, 3100H 操作码操作码5AL存储器存储器指令指令操作码操作码0031存储器存储器指令指令AHALAX2022-6-1817立即寻址注意问题立即寻址注意问题* 只能用于只能用于源操作数字段源操作数字段2022-6-18182、寄存器寻址方式、寄存器寻址方式操作数存放在寄存器中操作数存放在寄存器中,指令指定寄存器号。,指令指定寄存器号。对于对于16位操作数,位操作数,寄存器可以是数据寄存器寄存器可以是数据寄存器(AX、BX、CX、DX)、指针寄存器、指针寄存器(SI、DI、SP、BP)、段寄存器、段寄存器(DS、CS

9、、ES、SS)等。等。对于对于8位操作数,位操作数,寄存器可以是寄存器可以是AL、AH、BL、BH、CL、CH、DL和和DH等。等。例如:例如:MOV SS,AX 指令的执行过程如下图所示。指令的执行过程如下图所示。AXSSAXBXCXDX2022-6-18193、直接寻址方式l有效地址在指令中直接给出有效地址在指令中直接给出l默认的段地址在默认的段地址在DS段寄存器,可使用段超越前缀改变段寄存器,可使用段超越前缀改变MOV AX,2000H;AXDS:2000HMOV AX,ES:2000H;AXES:2000H 表示其中表示其中为偏移地址为偏移地址段超越前缀段超越前缀即:偏移地即:偏移地址

10、址2022-6-1820用符号表示地址*在汇编语言指令中,还可用符号地址代替数值地址在汇编语言指令中,还可用符号地址代替数值地址 例如:例如: MOV AX,VALUE VALUE:为存放操作数存储单元的地址符号为存放操作数存储单元的地址符号 也可以写成也可以写成 : MOV AX,VALUE2022-6-18214、寄存器间接寻址方式、寄存器间接寻址方式(1) 操作数存放在存储器中操作数存放在存储器中,而操作数的地址的而操作数的地址的16位位偏移量可在偏移量可在BX、BP或或SI、DI寄存器中。寄存器中。2022-6-1822选择选择BX、SI、DI作为作为间址寄存器,则操作数在数据段中,间

11、址寄存器,则操作数在数据段中,所以用所以用DS寄存器的内容作为段地址。操作数的物理地址:寄存器的内容作为段地址。操作数的物理地址:物理地址物理地址=(DS)*10H+(BX)(SI)(DI)例例 1 MOV AX, BX相当于左移相当于左移4位位寄存器间接寻址寄存器间接寻址4、寄存器间接寻址方式、寄存器间接寻址方式(2) 隐含的段寄存器为数据段寄存器隐含的段寄存器为数据段寄存器DS,操作数存放在现行数据段中,将,操作数存放在现行数据段中,将数据段寄存器数据段寄存器DS的内容左移四位,再加上的内容左移四位,再加上BX、SI或或DI寄存器的内容便寄存器的内容便可得到操作数的物理地址。可得到操作数的

12、物理地址。2022-6-1823 选择选择BP作为作为间址寄存器,则操作数在堆栈段中,所以用间址寄存器,则操作数在堆栈段中,所以用SS寄存器的内容作为段地址。操作数的物理地址为:寄存器的内容作为段地址。操作数的物理地址为:物理地址物理地址=(SS)*10H+(BP)例例2 MOV AX,BP 隐含的段寄存器为数据段寄存器隐含的段寄存器为数据段寄存器SS,操作数存放在现行数,操作数存放在现行数据段中,将数据段寄存器据段中,将数据段寄存器SS的内容左移四位,再加上的内容左移四位,再加上BP寄寄存器的内容便可得到操作数的物理地址。存器的内容便可得到操作数的物理地址。4、寄存器间接寻址方式、寄存器间接

13、寻址方式(3)2022-6-1824 MOV AX,ES:BX 源操作数的物理地址为:(源操作数的物理地址为:(ES)*10H+(BX) MOV AX,DS:BP源操作数的物理地址为:(源操作数的物理地址为:(DS)*10H+(BP)段超越前缀段超越前缀(段寄存器的约定见表(段寄存器的约定见表3-2)说明:指令中也可指定段超越前缀来取得其他段中的数据!说明:指令中也可指定段超越前缀来取得其他段中的数据!4、寄存器间接寻址方式、寄存器间接寻址方式(4)2022-6-1825以下情况不能段超越(以下情况不能段超越(P49页表页表32)!)!l程序的程序的指令序列指令序列必须安排在必须安排在代码段代

14、码段l程序使用的程序使用的堆栈堆栈一定在一定在堆栈段堆栈段l串操作的目的区必须是附加段串操作的目的区必须是附加段4、寄存器间接寻址方式、寄存器间接寻址方式(5)2022-6-18265、寄存器相对寻址方式、寄存器相对寻址方式l有效地址是寄存器内容与有符号有效地址是寄存器内容与有符号8位或位或16位位移量(补码位位移量(补码表示表示)之和,寄存器可以是之和,寄存器可以是BX、BP或或SI、DI 有效地址有效地址BX/BP/SI/DI8/16位位移量位位移量l段地址对应段地址对应BX/SI/DI寄存器默认是寄存器默认是DS,对应,对应BP寄存器默寄存器默认是认是SS;可用段超越前缀改变;可用段超越

15、前缀改变2022-6-1827寄存器相对寻址指令MOV AX,SI+06H;AXDS:SI+06HMOV AX,BP+06H;AXSS:BP+06H寄存器相对寻址寄存器相对寻址2022-6-18286、基址加变址寻址方式l有效地址由基址寄存器有效地址由基址寄存器(BX或或BP)的内容加上变址寄的内容加上变址寄存器存器(SI或或DI)的内容构成:的内容构成:有效地址有效地址BX/BPSI/DIl段地址对应段地址对应BX基址寄存器默认是基址寄存器默认是DS,对应,对应BP基址寄存基址寄存器默认是器默认是SS;可用段超越前缀改变;可用段超越前缀改变注意:必须一个是基址寄存器,另一个是变址寄注意:必须

16、一个是基址寄存器,另一个是变址寄存器,不能两个都是基址寄存器,也不能两个都是存器,不能两个都是基址寄存器,也不能两个都是变址寄存器!变址寄存器!2022-6-1829基址加变址寻址指令MOV AX,BX+SI ;AXDS:BX+SIMOV AX,BP+DI ;AXSS:BP+DIMOV AX,DS:BP+DI ;AXDS:BP+DI基址加变址寻址基址加变址寻址2022-6-18307、相对基址变址寻址方式l有效地址是基址寄存器有效地址是基址寄存器(BX/BP)、变址寄存器、变址寄存器(SI/DI)与一个与一个8位或位或16位位位移量之和:位移量之和:有效地址有效地址BX/BPSI/DI8/16

17、位位移量位位移量l段地址对应段地址对应BX基址寄存器默认是基址寄存器默认是DS,对应,对应BP基址寄存器基址寄存器默认是默认是SS;可用段超越前缀改变;可用段超越前缀改变注意:必须一个是基址寄存器,另一个是变址寄注意:必须一个是基址寄存器,另一个是变址寄存器,不能两个都是基址寄存器,也不能两个都是存器,不能两个都是基址寄存器,也不能两个都是变址寄存器变址寄存器2022-6-1831相对基址变址寻址指令MOV AX,BX+DI+06H;AXDS:BX+DI+06H相对基址加变址寻址相对基址加变址寻址2022-6-1832用符号表示位移量l在有位移量的寻址方式中(在有位移量的寻址方式中(寄存器相对

18、寻址或相对基址变寄存器相对寻址或相对基址变址址寻址寻址),位移量位移量可用符号表示:可用符号表示:MOV AX,SI+COUNT;COUNT是事先定义的变量或常量(就是数值)是事先定义的变量或常量(就是数值)MOV AX,BX+SI+WNUM;WNUM也是变量或常量也是变量或常量2022-6-1833多种表达形式l同一寻址方式可以写成不同的形式:同一寻址方式可以写成不同的形式:MOV AX,BXSI;等同于;等同于 MOV AX,BX+SIMOV AX,COUNTSI;等同于;等同于 MOV AX,SI+COUNTMOV AX,WNUMBXSI;等同于;等同于 MOV AX,WNUMBX+SI

19、;等同于;等同于 MOV AX,BX+SI+WNUM注意:位移量写在注意:位移量写在的左边的左边2022-6-1834寻址方式总结(1)7种寻址方式归纳为种寻址方式归纳为3大类:大类: 立即方式立即方式:立即(:立即(操作)操作)数数 寄存器方式寄存器方式:寄存器操作数:寄存器操作数 存储器方式存储器方式(直接寻址、寄存器间接寻址、寄(直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址、相对存器相对寻址、基址加变址寻址、相对基址加基址加变址寻址):存储器操作数变址寻址):存储器操作数2022-6-1835l目的操作数也有寻址方式,但只有目的操作数也有寻址方式,但只有6种,种,立即立即寻址

20、寻址除外。除外。寻址方式总结(2)2022-6-1836寻址方式总结(3) 对于存储器方式,有效地址可以由以下三种成分组成:对于存储器方式,有效地址可以由以下三种成分组成:位移量位移量(Displacement):是存放在指令中的一个:是存放在指令中的一个8位或位或16位位数,但它不是立即数,而是一个地址。数,但它不是立即数,而是一个地址。基址基址(Base):是存放在基址寄存器(:是存放在基址寄存器(BX或或BP)中的内容。)中的内容。变址变址(Index):是存放在变址寄存器(:是存放在变址寄存器(SI或或DI)中的内容。)中的内容。 有效地址的计算可用下式表示:有效地址的计算可用下式表示

21、:EA = 基址基址 + 变址变址 + 位移量位移量 它们任意组合使用,可得到不同的寻址方式。它们任意组合使用,可得到不同的寻址方式。2022-6-1837寻址方式总结(4)l没有指明时,一般的数据访问在没有指明时,一般的数据访问在DS段;使用段;使用BP访问主访问主存,则在存,则在SS段段l默认的情况允许改变,需要使用默认的情况允许改变,需要使用段超越前缀指令段超越前缀指令;8086指令系统中有指令系统中有4个:个:CS:;代码段超越,使用代码段的数据;代码段超越,使用代码段的数据SS: ;堆栈段超越,使用堆栈段的数据;堆栈段超越,使用堆栈段的数据DS: ;数据段超越,使用数据段的数据;数据

22、段超越,使用数据段的数据ES: ;附加段超越,使用附加段的数据;附加段超越,使用附加段的数据2022-6-18383.4 8086的通用指令的通用指令16位位8086指令系统是指令系统是Intel 80 x86系列微系列微处理器指令系统的基础处理器指令系统的基础2022-6-1839学习指令的注意事项l指令的功能指令的功能该指令能够实现何种操作。通常指令助该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式记符就是指令功能的英文单词或其缩写形式l指令支持的寻址方式指令支持的寻址方式该指令中的操作数可以采用何该指令中的操作数可以采用何种寻址方式种寻址方式l指令对标志的影响指令

23、对标志的影响该指令执行后是否对各个标志位该指令执行后是否对各个标志位有影响,以及如何影响有影响,以及如何影响( (参见参见P425)P425)l其他方面其他方面该指令其他需要特别注意的地方,如指令该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存执行时的约定设置、必须预置的参数、隐含使用的寄存器等器等2022-6-1840教学提示全面而准确地理解每条指令的功能和应用,是编写汇全面而准确地理解每条指令的功能和应用,是编写汇编语言程序的关键编语言程序的关键在正确理解每条指令的功能基础上,可以阅读和编写有在正确理解每条指令的功能基础上,可以阅读和编写有实际意义的程序

24、段实际意义的程序段2022-6-1841指令遵循的规则指令遵循的规则l两个操作数的类型要一致两个操作数的类型要一致l两个操作数不能都是存储器两个操作数不能都是存储器l只有只有MOV、PUSH、POP指令允许以段寄存器作为指令允许以段寄存器作为操作数操作数l目的操作数不能是立即数和目的操作数不能是立即数和CSl单操作数指令中的操作数不能是立即数单操作数指令中的操作数不能是立即数2022-6-18423.4.13.4.1数据传送指令数据传送指令l数据传送是计算机中最基本、最重要的一种数据传送是计算机中最基本、最重要的一种操作操作l传送指令把数据从一个位置传送到另一个位传送指令把数据从一个位置传送到

25、另一个位置置2022-6-18431、MOV(MOVE)指令指令执行操作:(执行操作:(OPRD1)(OPRD2)格式:格式:MOV OPRD1,OPRD2目的目的源源n此指令不影响标志位此指令不影响标志位2022-6-1844立即数立即数CS除外除外CS除外除外AX、BXCX、DXBP、SPSI、DI通用寄存器通用寄存器CS、DSSS、ES段寄存器段寄存器存储器存储器MOV指令传送功能 注意:注意:MOVMOV也并非任意传送也并非任意传送也可以是也可以是8 8位寄存器位寄存器2022-6-1845MOV指令举例lmov al,4 ;al4,字节传送,字节传送lmov ax,bx ;axbx,

26、字传送,字传送lmov dx,bp;dxss:bp2022-6-18462、交换指令XCHG(exchange)XCHG OPRD1,OPRD2执行操作:执行操作: OPRD1 OPRD2n数据传送指令不影响标志位数据传送指令不影响标志位2022-6-1847XCHG指令数据交换方向l寄存器与寄存器之间对换数据寄存器与寄存器之间对换数据l寄存器与存储器之间对换数据寄存器与存储器之间对换数据 通用寄存器通用寄存器AX,BX,CX,DXBP,SP,DI,SI存储器存储器数据交换方向如下:数据交换方向如下:也可以是也可以是8位寄存器位寄存器2022-6-1848lxchg ax,bxxchg ax,

27、bxlxchg ah,alxchg ah,allxchgxchg ax,2000h ax,2000hlxchgxchg al,2000h al,2000hXCHG指令举例XCHG AX, DLXCHG BX, 0100H这些都是错误指令!这些都是错误指令!2022-6-18493、堆栈操作指令、堆栈操作指令堆栈是以堆栈是以“后进先出后进先出”方式工作的一个存储区方式工作的一个存储区(内存内存区区),堆栈操作必须在堆栈段中进行,其段地址由堆栈段堆栈操作必须在堆栈段中进行,其段地址由堆栈段寄存器寄存器SS确定。确定。它的一端固定,另一端浮动,固定的一端叫它的一端固定,另一端浮动,固定的一端叫栈底栈

28、底,浮,浮动的一端叫动的一端叫栈顶栈顶。堆栈只有一个出入口,即当前栈顶;用堆栈只有一个出入口,即当前栈顶;用堆栈指针寄存堆栈指针寄存器器SP指定,指定,SP的内容是栈顶的偏移地址的内容是栈顶的偏移地址。进栈指令和出栈指令都必须根据当前进栈指令和出栈指令都必须根据当前SP的内容来确定的内容来确定进栈或出栈的单元,而且必须及时修改进栈或出栈的单元,而且必须及时修改SP的值,使的值,使SP的内容指向当前的栈顶。的内容指向当前的栈顶。栈顶是栈顶是地址较小地址较小的一端的一端2022-6-1850堆栈操作指令l堆栈只有两种基本操作:进栈和出栈,对应堆栈只有两种基本操作:进栈和出栈,对应两条指令两条指令P

29、USH和和POPl堆栈操作的单位是堆栈操作的单位是l指令不影响标志位指令不影响标志位2022-6-1851入栈指令PUSH (Push word onto the stack)执行操作:(执行操作:(SP)(OPRD的高字节)的高字节)(SP)(SP)-1(SP)-1(SP)(OPRD的低字节)的低字节)(SP)指令执行后,(指令执行后,(SP)=(SP)-2说明说明: OPRD: OPRD可以使用除立即数以外的任何一种寻址可以使用除立即数以外的任何一种寻址方式方式. .这是错误指令这是错误指令 PUSH 1234HPUSH r16/m16/segpush axpush 2000h2022-6

30、-1852出栈指令POP(Pop word from the stack)执行操作:(执行操作:(OPRD的低字节)的低字节)(SP)(SP)(SP)+1(OPRD的高字节)的高字节)(SP)(SP)(SP)+1 注注意意: POP指令不允许使用立即数和指令不允许使用立即数和CS寄存器寄存器 POP 1234H POP CS这些都是错误指令这些都是错误指令POP r16/m16/segpop axpop 2000h2022-6-1853PUSH指令举例例例 PUSH AX已知指行指令前(已知指行指令前(SP)=0305H,(AX)=8057H指令的执行过程如下:指令的执行过程如下:偏移地址偏移

31、地址堆栈内容堆栈内容(1)入栈前的情况)入栈前的情况(SP)=0305H0305H(SP)0305H偏移地址偏移地址堆栈内容堆栈内容(2)PUSH AX后的情况后的情况80H57H(SP)0304H0303H(SP)(SP)(SP)=0303H2022-6-1854POP指令举例指令举例 例例 POP BX已知执行指令前,(已知执行指令前,(SP)=0303H,(BX)=1234H指令的执行过程如下:指令的执行过程如下:0305H偏移地址偏移地址 堆栈内容堆栈内容80H57H0304H0303H(SP)(1)POP BX前的情况前的情况 (SP)=0303H0305H80H57H0304H03

32、03H偏移地址偏移地址堆栈内容堆栈内容(2)POP BX前的情况前的情况指令执行后指令执行后,(SP)=0305H,(BX)=8057H(SP)(SP)BLBH(SP)2022-6-18554、输入输出指令、输入输出指令l8086通过输入输出指令与外设进行数据交换;呈通过输入输出指令与外设进行数据交换;呈现给程序员的外设是现给程序员的外设是端口端口(Port)即)即I/O地址地址l8086用于寻址外设端口的地址线为用于寻址外设端口的地址线为16条,端口最条,端口最多为多为21665536(64K)个,端口号为)个,端口号为0000HFFFFHl每个端口用于传送一个每个端口用于传送一个的外设数据

33、的外设数据l输入输出指令不影响标志位输入输出指令不影响标志位2022-6-1856输入输出寻址方式l8086的的端口有端口有64K个,无需分段,设计有两种寻个,无需分段,设计有两种寻址方式址方式v 直接寻址直接寻址:只用于寻址:只用于寻址00HFFH前前256个端口,操作数个端口,操作数i8表示端口号表示端口号v 间接寻址间接寻址:可用于寻址:可用于寻址全部全部64K个端口,个端口,DX寄存器的值就寄存器的值就是端口号是端口号l对大于对大于FFH的端口只能采用间接寻址方式的端口只能采用间接寻址方式2022-6-1857(1)输入指令IN(Input)l将外设数据传送给将外设数据传送给CPU内的

34、内的AL/AXIN AL,n;字节输入:;字节输入:ALI/O端口(端口(n直接寻址)直接寻址)IN AL,DX;字节输入:;字节输入:ALI/O端口(端口(DX间接寻址)间接寻址)IN AX,n;字输入:;字输入:AXI/O端口(端口(n直接寻址)直接寻址)IN AX,DX;字输入:;字输入:AXI/O端口(端口(DX间接寻址)间接寻址)n取值取值000FFH2022-6-1858;直接寻址,字节量输入;直接寻址,字节量输入in al,21hin al,21hmov ah,almov ah,alin al,20hin al,20h;直接寻址,字量输入;直接寻址,字量输入in ax,20hin

35、 ax,20h;间接寻址,字量输入;间接寻址,字量输入movmov dx,20h dx,20hin ax,dxin ax,dx 两段功能相同两段功能相同 字量数据传送实字量数据传送实际上实现了连续的际上实现了连续的两个端口地址的字两个端口地址的字节量传送节量传送IN指令举例指令举例2022-6-1859(2)输出指令OUT(Outout)l将将CPU内的内的AL/AX数据传送给外设数据传送给外设OUT n,AL;字节输出:;字节输出:I/O端口端口AL(n直接寻址)直接寻址)OUT DX,AL;字节输出:;字节输出:I/O端口端口AL(DX间接寻址)间接寻址)OUT n,AX;字输出:;字输出

36、:I/O端口端口AX(n直接寻址)直接寻址)OUT DX,AX;字输出:;字输出:I/O端口端口AX(DX间接寻址)间接寻址)2022-6-18605、(符号)扩展指令 什么是什么是符号扩展符号扩展? ?2022-6-1861符号扩展的概念l符号扩展是指用一个操作数的符号位(即最高位)形成另一符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,另一个操作数的各位是全个操作数,另一个操作数的各位是全0(正数)或全(正数)或全1(负(负数)。数)。符号扩展不改变数据大小符号扩展不改变数据大小对于数据对于数据64H(表示数据(表示数据100),其最高位),其最高位D7为为0,符号扩,符号扩

37、展后高展后高8位都是位都是0,成为,成为0064H(仍表示数据(仍表示数据100)对于数据对于数据ffd2H(表示有符号数(表示有符号数46),其最高位),其最高位D15为为1,符号扩展后高符号扩展后高16位都是位都是1,成为,成为ffffffd2H(仍表示有符号数(仍表示有符号数46)2022-6-1862符号扩展的实际意义l将数据进行符号扩展是为了产生一个位数加将数据进行符号扩展是为了产生一个位数加倍、但数值大小不变的结果,以满足有些指倍、但数值大小不变的结果,以满足有些指令对操作数位数的要求,例如倍长于除数的令对操作数位数的要求,例如倍长于除数的被除数,再如加、减、乘运算的操作数位数被除

38、数,再如加、减、乘运算的操作数位数相同。相同。 2022-6-1863CBW(convert byte to word);AL的符号扩展至的符号扩展至AH;如;如AL的最高有效位是的最高有效位是0,则,则AH00;AL的最高有效位为的最高有效位为1,则,则AHFFH。AL不变不变CWD(convert word to double word);AX的符号扩展至的符号扩展至DX;如;如AX的最高有效位是的最高有效位是0,则,则DX00;AX的最高有效位为的最高有效位为1,则,则DXFFFFH。AX不变不变符号扩展指令 不影响标志位不影响标志位2022-6-1864符号扩展指令举例符号扩展指令举例

39、movmov al,80h al,80h;al=80hal=80hcbwcbw;ax=ff80hax=ff80hadd al,255add al,255;al=7fhal=7fhcbwcbw;ax=007fhax=007fh对无符号数除法应该采用直接使高对无符号数除法应该采用直接使高8位或高位或高16位清位清0的方法,获得倍长的被的方法,获得倍长的被除数除数2022-6-18653.4.2 二进制算术运算指令 8086指令系统提供加、减、乘、除四种基本的算术指令系统提供加、减、乘、除四种基本的算术运算操作。这些操作都可用于字节或字的运算,也运算操作。这些操作都可用于字节或字的运算,也都可以用于

40、带符号数与无符号数的运算。若是符号都可以用于带符号数与无符号数的运算。若是符号数,则用数,则用补码补码表示。表示。指令运算指令会根据运算结果影响状态标志,使用指令运算指令会根据运算结果影响状态标志,使用它们时请留心有关状态标志。它们时请留心有关状态标志。2022-6-18661、加法指令ADDADC2022-6-1867加法指令ADD (Addition )ADD r,im/r/mem;rrim/r/memADD mem,im/r;memmemim/rlADD指令将源与目的操作数相加,结果送到目的操指令将源与目的操作数相加,结果送到目的操作数作数lADD指令按状态标志的定义相应设置指令按状态标

41、志的定义相应设置2022-6-1868带进位加法指令ADC(Add with carry)lADC指令将源与目的操作数相加,再加上进位指令将源与目的操作数相加,再加上进位CF标标志,结果送到目的操作数志,结果送到目的操作数lADC指令按状态标志的定义相应设置指令按状态标志的定义相应设置lADC指令主要与指令主要与ADD配合,实现多精度加法运算配合,实现多精度加法运算ADC r,im/r/mem;rrim/r/memCFADC mem,im/reg;memmemim/rCF2022-6-1869mov ax,4652h;ax=4652hadd ax,0f0f0h;ax=3742h,CF=1mov

42、 dx,0234h;dx=0234hadc dx,0f0f0h;dx=f325h,CF=0;DX.AX0234 4652HF0F0 F0F0HF325 3742HADC指令举例指令举例2022-6-18702、减法指令、减法指令SUBSBB2022-6-1871减法指令SUB(subtract)lSUB指令将目的操作数减去源操作数,结果送到目指令将目的操作数减去源操作数,结果送到目的操作数的操作数lSUB指令按照定义相应设置状态标志指令按照定义相应设置状态标志SUB r,im/r/mem;rrim/r/memSUB mem,im/r;memmemim/r2022-6-1872带借位减法指令SB

43、B(subtract with borrowlSBB指令将目的操作数减去源操作数,再减去借位指令将目的操作数减去源操作数,再减去借位CF(进(进位),结果送到目的操作数。位),结果送到目的操作数。lSBB指令按照定义相应设置状态标志指令按照定义相应设置状态标志lSBB指令主要与指令主要与SUB配合,实现多精度减法运算配合,实现多精度减法运算SBB r,im/r/mem;rrim/r/memCFSBB mem,im/r;memmemim/rCF2022-6-1873MULIMUL3、乘法指令2022-6-1874乘法指令MUL r8/mem8;无符号字节乘法;无符号字节乘法;AXALr8/mem

44、8MUL r16/mem16;无符号字乘法;无符号字乘法;DX.AXAXr16/m16IMUL r8/mem8;有符号字节乘法;有符号字节乘法;AXALr8/m8IMUL r16/mem16;有符号字乘法;有符号字乘法;DX.AXAXr16/m16MUL(Multiplication) 无符号数乘法指令无符号数乘法指令IMUL (Integer Multiplication) 带符号数乘法指令带符号数乘法指令2022-6-1875乘法指令的功能l乘法指令乘法指令分无符号和有符号乘法指令分无符号和有符号乘法指令l乘法指令的源操作数显式给出,乘法指令的源操作数显式给出,隐含使用另一个操隐含使用另一

45、个操作数作数AX和和DX字节量相乘:字节量相乘:AL与与r8/m8相乘,得到相乘,得到16位的结果,位的结果,存入存入AX字量相乘:字量相乘:AX与与r16/m16相乘,得到相乘,得到32位的结果,位的结果,其高字存入其高字存入DX,低字存入,低字存入AX2022-6-1876乘法指令对标志的影响l乘法指令如下影响乘法指令如下影响OF和和CF标志:标志:MUL指令指令若乘积的高一半(若乘积的高一半(AH或或DX)为)为0,则,则OF=CF=0;否则;否则OF=CF=1IMUL指令指令若乘积的高一半(若乘积的高一半(AH或或DX)是低一)是低一半(半(AL或或AX)的)的符号扩展符号扩展,则,则

46、OF=CF=0;否则均;否则均为为1l乘法指令对其他状态标志乘法指令对其他状态标志没有定义没有定义 对标志没有定义:指令执行后这些标志是任对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是意的、不可预测(就是谁也不知道是0还是还是1) 对标志没有影响:指令执行不改变标志状态对标志没有影响:指令执行不改变标志状态2022-6-1877乘法运算指令举例mov al,0b4h;al=b4h=180mov bl,11h;bl=11h=17mul bl;ax=Obf4h=3060;OF=CF=1,AX高高8位不为位不为0mov al,0b4h;al=b4h=76mov bl,11h;

47、bl=11h=17imul bl;ax=faf4h=1292;OF=CF=1,AX高高8位含有效数字位含有效数字2022-6-18784、除法指令DIVIDIV2022-6-1879DIV r8/m8;无符号字节除法:;无符号字节除法:ALAXr8/m8的商,的商,AhAXr8/m8的余数的余数DIV r16/m16;无符号字除法:;无符号字除法:;AXDX.AXr16/m16的商,的商,DXDX.AXr16/m16的余数的余数IDIV r8/m8;有符号字节除法:;有符号字节除法:ALAXr8/m8的商,的商,AhAXr8/m8的余数的余数IDIV r16/m16 ;有符号字除法:;有符号字

48、除法:;AXDX.AXr16/m16的商,的商,DXDX.AXr16/m16的余数的余数除法指令除法指令DIV(Division) 无符号数除法指令无符号数除法指令IDIV (Integer Division)带符号数除法指令)带符号数除法指令2022-6-1880除法指令的功能l除法指令分无符号和有符号除法指令除法指令分无符号和有符号除法指令l除法指令的除数显式给出,隐含使用另一个操作数除法指令的除数显式给出,隐含使用另一个操作数AX和和DX作为被除数作为被除数字节量除法:字节量除法:AX除以除以r8/m8,8位商存入位商存入AL,8位余数存位余数存入入AH字量除法:字量除法:DX.AX除以

49、除以r16/m16,16位商存入位商存入AX,16位位余数存入余数存入DXl除法指令对标志位没有定义除法指令对标志位没有定义2022-6-1881字节字节操作要求被除数是操作要求被除数是1616位,若不是,位,若不是,则需扩展为字(用则需扩展为字(用CBWCBW指令);指令);字字操作要求被除数是操作要求被除数是3232 位,若不是,则位,若不是,则需扩展为双字(用需扩展为双字(用CWDCWD指令)。指令)。除法指令的功能2022-6-18825、增量减量指令、增量减量指令(1)增量指令INC(increment)lINC指令对操作数加指令对操作数加1(增量)(增量)lINC指令指令,按定义设

50、置其,按定义设置其他状态标志他状态标志INC r/mem;r/memr/mem1inc bx2022-6-1883(2)减量指令DEC(decrement)lDEC指令对操作数减指令对操作数减1(减量)(减量)lDEC指令指令不影响进位不影响进位CF标志标志,按定义设置,按定义设置其他状态标志其他状态标志DEC r/mem;r/memr/mem12022-6-18846、求补指令NEG(negative)lNEG指令对操作数执行求补运算:用零减去操作数,指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数然后结果返回操作数l求补运算也可以表达成:将操作数按位取反后加求补运算也可以表达成

51、:将操作数按位取反后加1lNEG指令对标志的影响与用零作减法的指令对标志的影响与用零作减法的SUB指令一指令一样样NEG r/mem;r/mem0r/mem2022-6-18857、比较指令CMP(compare)lCMP指令将目的操作数减去源操作数,按照定义相应指令将目的操作数减去源操作数,按照定义相应设置状态标志设置状态标志lCMP指令执行的功能与指令执行的功能与SUB指令,但指令,但结果不回送目的结果不回送目的操作数操作数CMP r,im/r/mem;rim/r/memCMP mem,im/r;memim/r2022-6-18863.4.3 十进制算术指令十进制算术指令十进制数在计算机中

52、也要用二进制编码表示,十进制数在计算机中也要用二进制编码表示,这就是二进制编码的十进制数:这就是二进制编码的十进制数:BCD码。前述码。前述二进制算术运算指令实现了二进制的加减乘除,二进制算术运算指令实现了二进制的加减乘除,要实现十进制要实现十进制BCD码的运算,还需要对二进制码的运算,还需要对二进制运算结果进行调整。运算结果进行调整。2022-6-1887压缩型压缩型BCD码(组合码(组合BCD码)码)用用4位二进制数表示一个十进制数,整个十位二进制数表示一个十进制数,整个十进制数形式为一个顺序的以进制数形式为一个顺序的以4位为一组的数串。位为一组的数串。例如,例如,9502D的压缩型的压缩

53、型BCD码为:码为:1001 0101 0000 0010B每每4位之间留一位之间留一空格空格即:即:9502H2022-6-1888非压缩型非压缩型BCD码(非组合码(非组合BCD码)码)以以8位为一组表示一个十进制数位,位为一组表示一个十进制数位,8位中的低位中的低4位位0000B1001B表示表示09,而高,而高4位为位为0。例如,例如,9502D的的非压缩型非压缩型BCD码为:码为:00001001 00000101 00000000 00000010B每每8位之间留一位之间留一空格空格即:即:09050002H2022-6-18893.4.4 逻辑指令逻辑运算指令用来对字节或字逻辑运

54、算指令用来对字节或字按位按位进行进行逻辑运算逻辑运算2022-6-1890逻辑乘(与)指令ANDl对两个操作数执行逻辑与运算,结果送到目的操作对两个操作数执行逻辑与运算,结果送到目的操作数数AND reg,im/reg/memAND reg,im/reg/mem ;regregim/reg/memregregim/reg/memAND mem,im/regAND mem,im/reg ;memmemim/regmemmemim/reg 只有相只有相“与与”的两位都是的两位都是1,结,结果才是果才是1;否则,;否则,“与与”的结果为的结果为0lAND指令设置指令设置CF = OF = 0,根据结

55、果设置,根据结果设置SF、ZF和和PF状态,而对状态,而对AF未定义未定义2022-6-1891测试指令TESTl对两个操作数执行逻辑与运算,对两个操作数执行逻辑与运算,结果不回送到目的结果不回送到目的操作数操作数TEST reg,im/reg/mem ;regim/reg/memTEST mem,im/reg;memim/reglTEST指令设置指令设置CF = OF = 0,根据结果设置,根据结果设置SF、ZF和和PF状状态,而对态,而对AF未定义未定义2022-6-1892逻辑加(或)指令ORl对两个操作数执行逻辑或运算,结果送到目的操作对两个操作数执行逻辑或运算,结果送到目的操作数数O

56、R reg,im/reg/mem ;regregim/reg/memOR mem,im/reg ;memmemim/reg 只要相只要相“或或”的两位有一位是的两位有一位是1,结果就是结果就是1;否则,结果为;否则,结果为0lOR指令设置指令设置CF = OF = 0,根据结果设置,根据结果设置SF、ZF和和PF状态,而对状态,而对AF未定义未定义2022-6-1893按位加(逻辑异或)指令XORl对两个操作数执行逻辑异或运算,结果送到目的操对两个操作数执行逻辑异或运算,结果送到目的操作数作数XOR reg,im/reg/mem ;regreg im/reg/memXOR mem,im/reg

57、 ;memmem im/reg 只有相只有相“异或异或”的两位不相同,的两位不相同,结果才是结果才是1;否则,结果为;否则,结果为0lXOR指令设置指令设置CF = OF = 0,根据结果设置,根据结果设置SF、ZF和和PF状态,而对状态,而对AF未定义未定义2022-6-1894求反(逻辑非)指令NOTl对一个操作数执行逻辑非运算对一个操作数执行逻辑非运算NOT reg/mem ;reg/memreg/mem 按位取反,原来是按位取反,原来是“0”的位变的位变为为“1”;原来是;原来是“1”的位变为的位变为“0”lNOT指令是一个单操作数指令指令是一个单操作数指令lNOT指令指令2022-6

58、-1895逻辑指令应用AND指令可用于复位某些位(同指令可用于复位某些位(同0相与),不影相与),不影响其他位:将响其他位:将BL中中D3和和D0位清位清0,其他位不变,其他位不变and bl,11110110BOR指令可用于置位某些位(同指令可用于置位某些位(同1相或),不影相或),不影响其他位:将响其他位:将BL中中D3和和D0位置位置1,其他位不变,其他位不变or bl, 00001001BXOR指令可用于求反某些位(同指令可用于求反某些位(同1相异或),不相异或),不影响其他位:将影响其他位:将BL中中D3和和D0位求反,其他不变位求反,其他不变xor bl, 00001001B202

59、2-6-18963.4.5 移位和循环移位指令移位和循环移位指令1、移位指令(shift)l将操作数移动一位或多位,分成逻辑移位和算术移将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作位,分别具有左移或右移操作2022-6-1897SHL reg/mem,1/CLSHL reg/mem,1/CL;逻辑左移,最高位进入;逻辑左移,最高位进入CFCF,最低位补,最低位补0 0SHR reg/mem,1/CLSHR reg/mem,1/CL;逻辑右移,最低位进入;逻辑右移,最低位进入CFCF,最高位补,最高位补0 0SAL reg/mem,1/CLSAL reg/mem,1/C

60、L;算术左移,最高位进入;算术左移,最高位进入CFCF,最低位补,最低位补0 0SAR reg/mem,1/CLSAR reg/mem,1/CL;算术右移,最低位进入;算术右移,最低位进入CFCF,最高位不变,最高位不变SALSAL与与SHLSHL相同相同 移位次数大于移位次数大于1时,必须由时,必须由CL给给出移位次数出移位次数2022-6-1898移位指令的操作CFOPRSHR SHR 逻辑右移逻辑右移0CFOPRSAR SAR 算术右移算术右移CFOPR0SHL SHL 逻辑左移逻辑左移SAL SAL 算术左移算术左移高位高位低位低位2022-6-1899移位指令对标志的影响l按照移入的

温馨提示

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

评论

0/150

提交评论