山东大学微机原理与应用课件03指令系统
第第3 3章章 指令系统指令系统1主要内容:指令系统的一般概念对操作数的寻址方式六大类指令的操作原理:2操作码的含义操作码的含义指令对操作数的要求指令对操作数的要求指令执行的结果指令执行的结果3.13.1 概述概述3了解:指令及指令系统;指令的格式;指令中的操作数类型;指令字长与机器字长;指令的执行时间CISC和RISC指令系统4一、指令与指令系统指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的。5二、指令格式指令中应包含的信息:6运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作指令格式操作码 操作数,操作数7执行何种操作执行何种操作目标操作数目标操作数源操作数源操作数参加操作的数据或数据存放的地址参加操作的数据或数据存放的地址指令格式: 8零操作数指令:零操作数指令: 操作码操作码 单操作数指令:单操作数指令: 操作码操作码 操作数操作数双操作数指令:双操作数指令: 操作码操作码 操作数,操作数操作数,操作数多操作数指令:多操作数指令: 三操作数及以上三操作数及以上三、指令中的操作数立即数寄存器存储器9表征参加操作的数据本身表征参加操作的数据本身表征数据存放的地址表征数据存放的地址立即数操作数立即数本身是参加操作的数据,可以是8位或16位,只能作为源操作数。 例: MOV AX,1234H MOV BL,22H立即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在可取值范围内。10寄存器操作数:参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOV AX,BXMOV DL,CH11存储器操作数参加运算的数存放在存储器的某一个或某两个单元中。表现形式: 12立即数或寄存器立即数或寄存器 中的内容是存放所寻找数据的单元的偏移地址中的内容是存放所寻找数据的单元的偏移地址存储器操作数例例: MOV AX,1200H MOV AL,1200H132222H1111H1200H偏移地址偏移地址AH AL 四、指令字长指令字长:由操作码的长度、操作数地址长度、操作数个数决定。14五、指令的执行速度指令的字长影响指令的执行速度对不同的操作数,指令执行的时间不同: 存储器15快!快!立即数立即数寄存器寄存器六、CISC和RISC指令系统CISC(complex instruction set computer)指令的功能强,种类多,常用指令用硬件实现;指令系统复杂,难使用。RISC指令系统指令功能较弱,种类少,格式简单;多数指令在一个计算机周期内完成;对存储器的结构和存取速度要求较高。163.23.2 寻址方式寻址方式17寻址方式 寻找操作数所在地址的方法 寻找转移地址的方法 18本节本节寻址方式操作数可能的来源或存放处:由指令直接给出寄存器内存单元寻找操作数所在地址的方法可以有三种大类型指令直接给出的方式存放于寄存器中的寻址方式存放于存储器中的寻址方式19一、立即寻址指令中的源操作数是立即数,即源操作数是参加操作的数据本身例:MOV AX,1200H2012H00HAH ALMOV代代码码段段 立即寻址仅适合于源操作数立即寻址仅适合于源操作数二、寄存器寻址参加操作的操作数在CPU的通用寄存器中。例:MOV AX,BX21 AX BX三、直接寻址指令中直接给出操作数的偏移地址默认在数据段例:MOV AX,1200H222222H1111H1200H偏移地址偏移地址 数数据据段段AH AL直接寻址直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。例:MOV AX,ES:1200H23四、寄存器间接寻址参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。24寄存器间接寻址例例:MOV AX,BX 设BX=1200H252222H1111H1200H偏移地址偏移地址AH AL 11 22数数据据段段代代码码段段MOV寄存器间接寻址由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器: BX,SI,DI BP26默认在数据段默认在数据段默认在堆栈段默认在堆栈段寄存器间接寻址 寄存器间接寻址27基址寻址(间址基址寻址(间址寄存器为基址寄存寄存器为基址寄存 器器BX,BP)变址寻址(间址变址寻址(间址寄存器为变址寄存寄存器为变址寄存 器器SI,DI)五、寄存器相对寻址操作数的偏移地址为寄存器的内容加上一个位移量例:MOV AX,BX+DATA 设:DS=2000H,BX=0220H,DATA=05H 则:AX=20225H28六、基址、变址寻址操作数的偏移地址为一个基址寄存器的内容 + 一个变址寄存器的内容;操作数的段地址由选择的基址寄存器决定基址寄存器为BX,默认在数据段基址寄存器为BP,默认在堆栈段基址变址寻址方式与相对寻址方式一样,主要用于一维数组操作。29例:执行下列指令:MOV SI,1100HMOV BX,SIMOV AX,SI+BX3022H11H2200H偏移地址偏移地址AH AL 11 22数数据据段段七、基址、变址、相对寻址操作数的偏移地址为:基址寄存器内容+变址寄存器内容+位移量操作数的段地址由选择的基址寄存器决定。基址变址相对寻址方式主要用于二维表格操作。31例:执行以下程序段:MOV DI,1100HMOV BP,DIMOV AL,BPDI53222H11H2205H偏移地址偏移地址AL 22堆堆栈栈段段八、隐含寻址指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。例: MUL BL指令执行:ALBL33AX3.3 80863.3 8086指令系统指令系统34掌握:指令码的含义指令对操作数的要求指令的对标志位的影响指令的功能3580868086指令系统从功能上包括六大类:36数据传送数据传送算术运算算术运算逻辑运算和移位逻辑运算和移位串操作串操作程序控制程序控制处理器控制处理器控制数据传送指令数据传送指令n通用数据传送n输入输出n地址传送n标志位操作37一、通用数据传送一般数据传送指令堆栈操作指令交换指令查表转换指令字位扩展指令38n特点:特点:n该类指令的执行对标志位不产生影响该类指令的执行对标志位不产生影响 1. 一般数据传送指令一般数据传送指令 MOV格式:MOV dest,src操作:src例: MOV AL,BL39 dest一般数据传送指令注意点:两操作数字长必须相同;两操作数不允许同时为存储器操作数;两操作数不允许同时为段寄存器;在源操作数是立即数时,目标操作数不能是段寄存器;IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。40一般数据传送指令例判断下列指令的正确性:MOV AL,BXMOV AX,SI05HMOV BXBP,BXMOV DS,1000HMOV DX,09HMOV 1200,SI41一般数据传送指令应用例将(*)的ASCII码2AH送入内存数据段1000H开始的100个单元中。题目分析:确定首地址确定数据长度写一次数据修改单元地址修改长度值判断写完否?未完继续写入,否则结束421063H100B1000H 2AH数据段数据段2AH2AH2AH一般数据传送指令应用例程序段: MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI ;DI+1 DEC CX ;CX-1 JNZ AGAIN ;CX0则继续 HLT 43上段程序在代码段中的存放形式設CS=109EH,IP=0100H,则各条指令在代码段中的存放地址如下: CS : IP 机器指令 汇编指令 109E:0100 B80010 MOV DI,1000H 109E:0103 . MOV CX,64H 109E:0105 . MOV AL,2AH 109E:0107 . MOV DI,AL 109E:0109 INC DI 109E:010A DEC CX 109E:010B JNZ 0107H 109E:010D HLT44数据段中的分布 送上2AH后数据段中相应存储单元的内容改变如下:DS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2ADS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 0045偏移地址偏移地址 DI2. 堆栈操作指令掌握:有关堆栈的概念栈顶、栈首、栈底堆栈指令的操作原理执行过程,执行结果46堆栈操作的原则先进后出以字为单位47堆栈操作指令压栈指令 PUSH 格式: PUSH OPRD出栈指令 POP 格式: POP OPRD4816位寄存器或位寄存器或存储器两单元存储器两单元16位寄存器或位寄存器或存储器两单元存储器两单元压栈指令 PUSH指令执行过程:SP - 2 SP操作数高字节 SP+1操作数低字节 SP49 SP堆堆栈栈段段SP高高8位位低低8位位压栈指令的操作设AX=1234H,SP=1200H执行 PUSH AX 指令后堆栈区的状态: 501200H 堆堆栈栈段段 SP-2=11FEH12H34H1200H 堆堆栈栈段段12H 34HAX入栈后入栈后入栈前入栈前出栈指令POP指令执行过程: SP SP+1 SP SP+251操作数低字节操作数低字节操作数高字节操作数高字节 SP堆堆栈栈段段SP高高8位位低低8位位出栈指令的操作执行 POP AX 5212H34H11FEH 堆堆栈栈段段代代码码段段PUSH 12 34 AX SP+21200H 出栈后出栈后出栈前出栈前堆栈操作指令说明指令的操作数必须是16位的;操作数可以是寄存器或存储器两单元,但不能是立即数;不能从栈顶弹出一个字给CS;PUSH和POP指令在程序中一般成对出现;PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。53堆栈操作指令例MOV AX,1234HMOV SP,AXMOV BX,5678HMOV BX,AHMOV BX+1,BLPUSH AXPUSH BXPUSH WORD PTRBX POP WORD PTRBXPOP AXPOP BX54 如此,会使如此,会使AX和和BX的内容互换的内容互换3. 交换指令格式: XCHG REG,MEM/REG注:两操作数必须有一个是寄存器操作数不允许使用段寄存器。例: XCHGAX,BXXCHG2000,CL554. 查表指令格式: XLAT说明:用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址操作:将BX+AL所指单元的内容送AL56查表指令例数据段中存放有一张ASCII码转换表,设首地址为2000H,现欲查出表中第11个代码的ASCII码57303031313232.393941414242.4545464620002000H+020002000H+110129ABEF查表指令例 可用如下指令实现:可用如下指令实现: MOV BXMOV BX,2000H 2000H ;BXBX表首地址表首地址 MOV ALMOV AL,0BH 0BH ;ALAL序号序号 XLATXLAT ;查表转换查表转换 执行后:执行后:AL = 42HA