您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第3章 8086指令系统_1
第三章8086/8088指令系统2020/1/191第三章8086/8088指令系统一、指令格式与寻址方式二、数据传送类指令三、算术运算指令四、逻辑运算指令五、移位指令六、串操作指令七、控制转移指令八、处理器控制指令九、输入输出指令十、中断指令第三章8086/8088指令系统2020/1/192一、指令格式与寻址方式指令(Instruction)是指示CPU执行某种操作的命令;指令系统(InstructionSet)是某一CPU所能执行的全部指令的集合,也称为指令集;8086/8088的指令系统完全相同。指令是构成程序的基础,程序是指令的有序组合,CPU执行程序就是执行一条条指令。1、指令格式2、寻址方式第三章8086/8088指令系统2020/1/193二、数据传送类指令1、通用数据传送指令2、地址传送指令3、状态标志传送指令第三章8086/8088指令系统2020/1/194三、算术运算指令1、加法运算指令2、减法指令3、乘法指令4、除法指令例题第三章8086/8088指令系统2020/1/195四、逻辑运算指令1、“与”运算指令AND2、“或”运算指令OR3、“非”运算指令NOT4、“异或”运算指令XOR5、测试指令TEST第三章8086/8088指令系统2020/1/196五、移位指令1、逻辑移位指令2、算术移位指令3、循环移位指令4、通过进位位循环移位指令例题第三章8086/8088指令系统2020/1/197七、控制转移指令1、控制转移指令的寻址方式2、无条件转移指令3、条件转移指令4、循环控制指令5、过程调用和返回指令第三章8086/8088指令系统2020/1/198八、处理器控制指令1、标志位操作指令2、与外部事件协调同步的指令3、空操作指令第三章8086/8088指令系统2020/1/1991、指令格式(1)操作码指定CPU执行某种操作,如传送、运算等;(2)操作数为参与操作的数据,如寄存器中的数据或内存单元中的数据等。①包含一个操作数的指令称为单操作数指令;②包含两个操作数的指令称为双操作数指令;③在指令执行过程中使用的操作数,保持原值不变的称为源操作数;④不保留原值而将处理结果存入其中的称为目的操作数。操作码操作数一条指令通常包括两部分:操作码和操作数。格式:第三章8086/8088指令系统2020/1/19102、寻址方式(AddressingMode)(1)指令寻址方式指令通常是顺序存放的,因此只要通过对指令指针自动加1,便形成下条指令地址;只有当遇到转移指令或调用指令时,根据转移目标去修改IP或CS。(2)操作数寻址方式所谓操作数寻址方式,就是寻找指令中所需操作数的方法。第三章8086/8088指令系统2020/1/19112、寻址方式(AddressingMode)操作数的来源①包含在指令中,紧跟在操作码之后,称为立即数;②操作数在CPU的某个寄存器中;③操作数在内存的某单元中,这时指令中给出的是操作数所在单元的地址,或者是产生该地址的计算方法;④操作数在某I/O端口中。第三章8086/8088指令系统2020/1/19122、寻址方式(AddressingMode)由于操作数的不同来源,产生了几大类寻址方式。(1)立即数寻址(2)寄存器寻址(3)内存寻址(4)I/O端口寻址例题第三章8086/8088指令系统2020/1/1913(1)立即(数)寻址当操作数就在指令中时,称为立即(数)寻址。这种操作数称为立即数,8位或16位均可。如:①MOVAL,12H说明:这条指令的功能就是将立即数12H传送到寄存器AL中。执行完该条指令后,(AL)=12H或表示成:AL=12H第三章8086/8088指令系统2020/1/1914(1)立即(数)寻址②MOVAX,1234H说明:这条指令的功能就是将立即数1234H传送到寄存器AX中。执行完该条指令后,(AX)=1234H或表示成:AX=1234H第三章8086/8088指令系统2020/1/1915(1)立即(数)寻址③MOVAL,12H这是一条双操作数指令。其中:*MOV就是操作码,*立即数12H称为源操作数;*寄存器AL称为目的操作数。特点:*源操作数在执行指令后,它的值不会发生变化;*立即数不能作为目的操作数。第三章8086/8088指令系统2020/1/1916(2)寄存器寻址(SegmentAddressing)当操作数在寄存器中时为寄存器寻址(或称寄存器直接寻址)。如:①MOVAL,12H说明:目的操作数AL即为寄存器寻址。②MOVAX,BX说明:这条指令的功能就是将寄存器BX的内容传送到寄存器AX中。执行完该条指令后,AX的内容和BX的内容一样,表示成AX=BX;第三章8086/8088指令系统2020/1/1917注意:(1)寄存器寻址方式的指令操作在CPU内部执行,不需要执行总线周期,执行速度快(2)寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目的操作数。【例】MOVAX,BX执行过程如图4-3所示。AXBX图寄存器寻址示意图第三章8086/8088指令系统2020/1/1918(3)内存寻址(MemoryAddressing)当操作数在内存中时为内存寻址,称其为内存操作数。注意:一条指令中只允许有一个内存操作数!*内存寻址时,指令中给出的是操作数的有效地址EA或产生EA的计算方式。*EA即是逻辑地址中的偏移地址。第三章8086/8088指令系统2020/1/1919(3)内存寻址(MemoryAddressing)①直接寻址②寄存器间接寻址③基址寻址④变址寻址⑤基址变址寻址⑥字符串寻址第三章8086/8088指令系统2020/1/1920①直接寻址操作数的有效地址(EA)直接包含在指令中,它与操作码一起存放在代码段CS中。操作数存放的物理地址=DS×16+16位地址偏移量。有效地址EA:即段内偏移地址,表示操作数所在存储单元距离段首址的字节数。有效地址是一个无符号的16位二进制数。第三章8086/8088指令系统2020/1/1921【例4-5】MOVAX,[22A0H]执行过程如图4-4所示。322A0H322A1H32H48H…操作码偏移量A0H偏移量22H……代码段数据段AX图4-5直接寻址方式示意图3000+)22A0322A0HDS48323248第三章8086/8088指令系统2020/1/1922例:MOVAH,[2100H];将DS段中2100H单元的内容送给AHMOVAX,[2100H];将DS段中2100H单元的内容送给AL;2101H单元的内容送给AHMOV[1000H],AH;DS:1000H←AH第三章8086/8088指令系统2020/1/1923注意:(1)直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器DS中(2)如果操作数在其他段,则需要在指令中用段超越前缀指出相应的段寄存器名例:MOVAH,ES:[2000H]将附加段寄存器ES的内容乘16,再加上2000H作为操作数所在存储单元的地址,取出该存储单元的内容送到寄存器AH中第三章8086/8088指令系统2020/1/1924有效地址EA的内容由寄存器内容给出,称为内存寻址中的寄存器间接寻址。•寄存器应带有方括号。如MOVAL,[BX];EA=BX这些寄存器仅限于BX、BP、SI、DI,分两类情况:以SI、DI、BX间接寻址以BP间接寻址②寄存器间接寻址第三章8086/8088指令系统2020/1/1925【例4-7】MOVAX,[SI]执行过程如图4-5所示。21000H21001H2000+)SI100021000HDS50A0A0H50H代码段数据段AX图4-5寄存器间接寻址方式示意图………操作码1)以SI、DI、BX间接寻址:操作数通常在现行数据段中,即DS中的值左移四位加上SI、DI或BX中的有效地址即为操作数的物理地址。第三章8086/8088指令系统2020/1/1926【例4-8】MOVAX,[BP]执行过程如图4-6所示。2)以BP间接寻址:则操作数在堆栈段中,即操作数的物理地址位是SS中的值左移四位与BP相加。32000H32001H3000+)BP200032000HSS62B0B0H62H代码段堆栈段AX图4-6以BP间接寻址方式示意图………操作码第三章8086/8088指令系统2020/1/1927注意:(1)只有SI、DI、BX、BP可作为间址寄存器,如:MOVAX,[CX]错误(2)以SI、DI、BX间接寻址时,若操作数所在存储单元不在数据段DS中,需要在指令中用段超越前缀表明其所在段的段名。第三章8086/8088指令系统2020/1/1928③基址寻址EA=BXBP+8位偏移量16位偏移量操作数在存储器中,指令中寄存器(BX或BP)的内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。使用BX时,段地址为DS的内容使用BP时,段地址为SS的内容第三章8086/8088指令系统2020/1/1929【例4-9】MOVAX,COUNT[BP]执行过程如图4-7示30H20H14100H14101H1000+)BP200014100HSS+)COUNT21002030…操作码偏移量00偏移量21……代码段堆栈段图4-7基址寻址方式示意图AX如:MOVBL,2[BX]或MOVBL,[BX+2];(DS:[BX+2])→BL第三章8086/8088指令系统2020/1/1930④变址寻址操作数在存储器中,指令将变址寄存器SI、DI的内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。段地址规定为DS的内容EA=SIDI+8位偏移量16位偏移量第三章8086/8088指令系统2020/1/1931【例4-10】MOVAX,COUNT[SI]执行过程如图4-8所示。30H20H35000H35001H3000+)SI200035000HDS+)COUNT30002030…操作码偏移量00偏移量30……代码段数据段图4-8变址寻址方式示意图AX如:MOVAX,2[DI]或MOVAX,[DI+2];即(DS:[DI+2])→AL(DS:[DI+3])→AH第三章8086/8088指令系统2020/1/1932⑤基址加变址寻址操作数在存储器中,指令将基址寄存器BX、BP与变址寄存器SI、DI的内容之和再加上指令指定的偏移量作为操作数所在存储单元的有效地址EA(偏移地址)。使用BX时,段寄存器为DS使用BP时,段寄存器为SS16位偏移量EA=BXBP+8位偏移量SIDI+第三章8086/8088指令系统2020/1/1933【例4-11】MOVAX,[BX+SI+250H]执行过程如图4-9所示。33250H33251H3000+)BX100033250HDS+)SI2000+)0250203030H20H数据段代码段图4-9基址加变址寻址方式示意图…操作码偏移量50偏移量02……操作码AX第三章8086/8088指令系统2020/1/1934⑥字符串寻址用于字符串操作指令。规定变址寄存器SI中的内容是源数据串的段内偏移地址,而变址寄存器DI中的内容是目标数据串的段内偏移地址。源数据串的段地址规定是数据段DS,目标数据串的段地址规定是附加段ES。指令执行后SI和DI的内容自动增量(或减量),增(或减)值为1或2【例4-12】MOVSB执行后:[DI]←[SI]SI←SI±1DI←DI±1第三章8086/8088指令系统2020/1/1935(4)I/O端口寻址(寻找输入输出设备的端口地址)I/O端口寻址直接端口寻址间接端口寻址由指令直接给出输入输出设备的端口地址。规定端口地址为8位,能寻址256个端口。由寄存器DX给出输入输出设备的端口地址。由于DX是16位,因此能寻址64K个端口。【例4-13】INAL,20H;将地址为20H的外设的内容读入AL中OUTDX,AL;将AL中内容输出给以DX的内容为地址的外设第三章8086
本文标题:第3章 8086指令系统_1
链接地址:https://www.777doc.com/doc-3176274 .html