410 likes | 603 Views
第二章 微型机指令系统. 第一节 寻址方式 第二节 8086/8088 指令系统 第三节 80286/80386 扩充与增加的指令. 第一节 寻址方式 一、立即寻址 二、寄存器寻址 三、直接寻址 四、寄存器间接寻址 五、变址寻址 六、基址寻址 七、基址 - 变址寻址. 二、寄存器寻址 特点:操作数位于 CPU 的 寄存器 当中。 例如: MOV CL , AL MOV SS , AX 用途:通过寄存器传送数据,传送速度快。. 一、立即寻址 特点:操作数位于指令当中。 例如: MOV CL , 05
E N D
第一节 寻址方式 第二节 8086/8088指令系统 第三节 80286/80386扩充与增加的指令
第一节 寻址方式 一、立即寻址 二、寄存器寻址 三、直接寻址 四、寄存器间接寻址 五、变址寻址 六、基址寻址 七、基址-变址寻址
二、寄存器寻址 特点:操作数位于CPU的寄存器当中。 例如:MOVCL,AL MOV SS,AX 用途:通过寄存器传送数据,传送速度快。
一、立即寻址 特点:操作数位于指令当中。 例如:MOVCL,05 MOV AX,3100H 用途:给寄存器或存储单元赋初值。
三、直接寻址 特点:指令的操作码后面直接给出操作数 的16位偏移地址。 例如:MOVAX,[3100H] 设此时数据段寄存器DS=6000H, 则该内存单元的物理地址为: 6000H×10H+3100H = 63100H 61300H中的内容 AL 61301H中的内容 AH
四、寄存器间接寻址 特点:操作数在内存单元中,操作数的内存 单元地址在指令的寄存器中。 1、SI、DI、BX作为间址寄存器 例如:MOVAX,[DI] 设此时数据段寄存器DS=6000H, DI=2000H,则该内存单元的物理地址为: 6000H×10H+2000H = 62000H 2、BP作为间址寄存器 例如:MOV[BP],AX 设此时堆栈段寄存器SS=5000H, BP=1000H,则AX中的内容送入内存单元(?)
五、变址寻址 特点:操作数的有效地址为指令中的变址 寄存器的内容加上位移量的内容。 例如:MOV BX,[SI+1100H] 设此时数据段寄存器DS=6000H, SI=2000H则该内存单元的物理地址为: 6000H×10H+2000H+1100H = 63100H
六、基址寻址 特点:操作数的有效地址为指令中的基址 寄存器(BX或BP)中的内容。 例如:MOVBLOCK[BP],AX 设此时堆栈段寄存器SS=6000H, BP=2000H,BLOCK=2500H,则该内存单元的物理地址为: 6000H×10H+2000H+2500H = 64500H
七、基址-变址寻址 特点:操作数的有效地址为指令中的基址 寄存器(BX或BP)和变址寄存器(SI或DI)以及8位或16位偏移量的和。 例如:MOVAX ,BLOCK[BX][SI] 设此时数据段寄存器DS=6000H, BX=2000H,SI=5000H,BLOCK=2500H,则该内存单元的物理地址为: 6000H×10H+2000H+5000H+2500H = 69500H
操作数三种类型: 1、立即数操作数 2、寄存器操作数 3、存储器操作数
指令系统的分类: 一、数据传送指令 二、算术运算指令 三、逻辑指令 四、串处理指令 五、控制转移指令 六、处理器控制指令
四、串处理指令 五、处理器控制指令
1、通用数据传送指令 1)一般传送指令(MOV) 格式: MOV 目标操作数,源操作数 举例: MOV SI,BX MOV DS,AX MOV AX,CS MOV AL,5 MOV MEM,5 MOV MEM,AX MOV DS,MEM MOV [BX],6 MOV AX,DISP[BX][SI]
例程: … … MOV SI,OFFSET BUFFER1 MOV DI,OFFSET BUFFER2 MOV CX,200 NEXT:MOV AL,[SI] MOV [DI],AL INC SI INC DI DEC CX JNZ NEXT ……
2)堆栈指令(PUSH和POP) PUSH 源操作数; POP 目的操作数(寄存器、段寄存器或存储器); 例:MOV SP,0E200H MOV SS,9000H;此时栈顶位置为:9E200H PUSH AX; POP BX; AX 堆栈段 11 22 9E1FEH 9E1FFH 9E200H BX 11 22
3)交换指令 (XCHG) XCHG 目的操作数,源操作数 例:XCHG BL,DL XCHG AX,SI 4)查表指令(XLAT) XLAT 表地址 指令执行前,应将表首地址送至BX, 元素的序号送至AL。 例:MOV BX,OFFSET Hex-table;(BX) 表首址 MOV AL,0AH ;(AL) 序号 XLAT Hex-table ;查表转换
2、输入输出指令(2条) 1)IN AX(AL),端口地址2)OUT 端口地址,AX(AL) 例:IN AL,data8 例:OUT data8,AL IN AX,data8 OUT data8,ax IN AL,DX OUT DX,AL IN AX,DX OUT DX,AX 例:IN AL,61H OR AL,10000000B OUT 61H,AL
3、目标地址传送指令(3条) 1)LEA reg16,mem16;将一个近地址指针写入一个指定的 通用寄存器。 2)LDS reg16,mem32;传送一个32位的远地址指针, 其中的16位偏移地址写入一个指定的通用寄存器 16位段地址写入数据段寄存器DS。 3)LES reg16,mem32;同上。 16位段地址写入附加段寄存器ES。 例如:MOV BX,BUFFER LEA BX,BUFFER = MOV BX,OFFSET BUFFER
4、标志传送指令(4条) 1)LAHF ;将FLAGS中的SF、ZF、AF、PF和CF 传送至AH的对应位。 2)SAHF ;将AH中的7、6、4、2、0位传送至 FLAGS中的对应位。 3)PUSHF ;SP=SP-2,然后将FLAGS送入堆栈。 4)POPF ;将堆栈中内容送至FLAGS,然后 SP=SP+2。
1、加法运算指令(5条) 1)ADD 目的操作数,源操作数; 2)ADC 目的操作数,源操作数; 3)INC 目的操作数 ; 4)AAA ;ASCII码调整指令 5)DAA ;十进制调整指令
2、减法运算指令(5条) 1)SUB 目的操作数,源操作数; 2)SBB 目的操作数,源操作数; 3)DEC 目的操作数 ; 4)AAS ;ASCII码调整指令 5)DAS ;十进制调整指令 6)NEG 目的操作数 ; 7)CMP 目的操作数,源操作数;
3、乘法指令(3条) 1)MUL 源操作数; 2)IMUL 源操作数; 3)AAM ;ASCII码调整指令 4、除法指令(5条) 1)DIV 源操作数; 2)IDIV 源操作数; 3)AAD ;ASCII码调整指令
5、转换指令(2条) 1)CBW ; 2)CWD ;
1、逻辑运算指令(5条) 1)AND 目的操作数,源操作数; 2)TEST 目的操作数,源操作数; 3)OR 目的操作数,源操作数; 4)XOR 目的操作数,源操作数; 5)NOT 目的操作数;
2、移位指令(3条) 1)SHL(SAL) 目的操作数,1;左移1位 SHL(SAL) 目的操作数,CL;左移CL中指定的位数。 2)SHR 目的操作数, 1;右移1位 SHR 目的操作数,CL;右移CL中指定的位数。 3)SAR 目的操作数, 1;右移1位 SAR 目的操作数,CL;右移CL中指定的位数。
3、循环移位指令(4条) 1)ROL 目的操作数,1;向左循环移动1位。 ROL 目的操作数,CL;向左循环移动CL中指定的位数。 2)ROR 目的操作数, 1;向右循环移动1位。 ROR 目的操作数,CL;向右循环移动CL中指定的位数。 3)RCL 目的操作数, 1;向左循环移动1位。 RCL 目的操作数,CL;向左循环移动CL中指定的位数。 4)RCR 目的操作数, 1;向右循环移动1位。 RCR 目的操作数,CL;向右循环移动CL中指定的位数。
四、串操作指令(5条) 1、MOVS;字符串传送指令 2、CMPS;字符串比较指令 3、SCAS;字符串扫描指令 4、LODS;字符串装入指令 5、STOS;字符串送存指令
例:将数据段中首地址为BUFFER1的200个字节 传送到附加段首地址为BUFFER2的内存区中。 LEA SI,BUFFER1 LEA DI,BUFFER2 MOV CX,200 CLD REP MOVSB
例:比较两个20字节长,首地址分别为STRING1和 STRING2的字节串,找出其中第一个不相等字符的 地址。如果两字符串完全相同,则转到ALL进行处 理。 LEA SI,STRING1 LEA DI,STRING2 MOV CX,20 CLD REPE CMPSB JCXZ ALL DEC SI DEC DI JMP DONE ALL: MOV SI,0 MOV DI,0 DONE: ……
1、转移指令 1)无条件转移指令JMP 功能:无条件转移至指令中规定的目标地址。 JMP near_lable; JMP short_lable; JMP reg16; JMP mem16; JMP far_lable; JMP mem32; 2)条件转移指令 表
2、循环控制指令 1)LOOP short_lable 功能:将CX-1,若结果为0,则执行下一条指令; 若结果不为0,则跳转到short_lable标号处。 2) LOOPE/LOOPZ short_lable 功能:将CX-1,若结果不为0,且ZF=1,则跳转到short_lable标号处。 3) LOOPNE/LOOPNZ short_lable 功能:将CX-1,若结果不为0,且ZF=0,则跳转到short_lable标号处。
3、过程调用指令 1)CALL 功能:调用一个过程。 CALL near_proc ;段内直接调用 CALL reg16/mem16;段内间接调用 CALL far_proc ;段间直接调用 CALL mem32 ;段间间接调用 2)RET 功能:从过程返回。
4、中断指令 1)INT n 功能:调用一个中断程序。 2)INTO 功能:如果溢出(OF=1),则产生一个中断。 3)IRET 功能:中断返回指令。
1、标志位操作 1)CLC 功能:使CF=0。 2)STC 功能:使CF=1。 3)CMC 功能:使CF取反。 4)CLD 功能:使DF=0。 5)STD 功能:使DF=1。 6)CLI 功能:使IF=0。 7)STI 功能:使IF=1。
2、空操作指令 NOP 3、暂停指令 HLT 4、等待指令 WAIT 5、Escape指令 ESC ext_op,src 6、锁定指令 LOCK