第3章8086/8088指令系统莫善军中山大学工学院Tel:(020)39332230定义指令——控制计算机完成指定操作的命令机器指令——指令的二进制代码形式。例如:CD21H汇编指令——助记符形式的指令。例如:INT21H指令系统——CPU所有指令及其使用规则的集合8088/8086指令系统:(1)指令向后兼容(x86系列)(2)应用广泛,资料易于寻找3主要内容:指令系统的一般概念对操作数的寻址方式六大类指令的操作原理:操作码的含义指令对操作数的要求指令执行的结果4§3.1概述5了解:指令及指令系统;指令的格式;指令中的操作数类型;指令字长与机器字长;指令的执行时间CISC和RISC指令系统6一、指令与指令系统指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的。7二、指令格式指令中应包含的信息:运算数据的来源运算结果的去向执行的操作8指令格式操作码[操作数],[操作数]执行何种操作目标操作数源操作数参加操作的数据或数据存放的地址9指令格式:零操作数指令:操作码单操作数指令:操作码操作数双操作数指令:操作码操作数,操作数多操作数指令:三操作数及以上10三、指令中的操作数立即数寄存器存储器表征参加操作的数据本身表征数据存放的地址11立即数操作数立即数只能作为源操作数。其本身是参加操作的数据,可以是8位或16位。例:MOVAX,1234HMOVBL,22H立即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在可取值范围内。12寄存器操作数:参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOVAX,BXMOVDL,CH13存储器操作数参加运算的数存放在存储器的某一个或某两个单元中表现形式:[]立即数或寄存器14存储器操作数例例:MOVAX,[1200H]MOVAL,[1200H]22H11H1200H偏移地址AHAL┇15四、指令字长与机器字长指令字长:由操作码的长度、操作数地址长度、操作数个数决定;机器字长:计算机能够直接处理的二进制数的位数。16五、指令的执行速度指令的字长影响指令的执行速度(常用指令的执行时间见表3-4)对不同的操作数,指令执行的时间不同:存储器快!立即数寄存器17六、CISC和RISC指令系统CISC指令系统指令的功能强,种类多,高级语言和机器语言间的距离缩小;指令系统复杂,难使用。RISC指令系统指令功能较弱,种类少,格式简单;多数指令在一个计算机周期内完成;对存储器的结构和存取速度要求较高。18§3.2寻址方式19寻址方式立即寻址寄存器寻址存储器寻址串操作寻址I/O端口寻址隐含寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址6种类别5种途径20寻址方式寻找操作数所在地址的方法寻找转移地址的方法本节21一、立即寻址指令中的源操作数是立即数,即源操作数是参加操作的数据本身例:MOVAX,1200H12H00HAHALMOV代码段┇22二、直接寻址指令中直接给出操作数的偏移地址例:MOVAX,[1200H]22H11H1200H偏移地址┇数据段AHAL23直接寻址直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。例:MOVAX,ES:[1200H]24三、寄存器寻址参加操作的操作数在CPU的通用寄存器中。例:MOVAX,BXAXBX25四、寄存器间接寻址参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。在内存中的源和目的操作数由段选择子和偏移量引用。段选择子规定包含操作数的段。隐示和显示(段超越前缀)、段寄存器值偏移量(从段的开始至操作数的第一个字节的字节数)规定操作数的线性或有效地址。EA(EffectiveAddress,有效地址)数值、寄存器值、寄存器地址26(3).保护模式下存储器地址的产生0线性地址线性地址空间232分段管理机制31物理地址物理地址空间最大232与实际的配置有关分页管理机制031PG=1PG=0当PG=0时,分页管理机制关闭,线性地址就是物理地址虚拟地址空间虚拟地址213×232×2=246=64T选择子偏移量:015031段寄存器1.213代表什么含义?2.232代表什么含义?3.乘以2代表什么含义?27寄存器间接寻址例例:MOVAX,[BX]设BX=1200H22H11H1200H偏移地址AHAL┇1122数据段代码段MOV28寄存器间接寻址由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:BX,SI,DIBP默认在数据段默认在堆栈段29寄存器间接寻址寄存器间接寻址基址寻址(间址寄存器为基址寄存器BX,BP)变址寻址(间址寄存器为变址寄存器SI,DI)30五、寄存器相对寻址操作数的偏移地址为寄存器的内容加上一个位移量例:MOVAX,[BX+DATA]设:DS=2000H,BX=0220H,DATA=05H则:AX=[20225H]31六、基址、变址寻址操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址由选择的基址寄存器决定例:MOVAX,[SI+BX]32七、基址、变址、相对寻址操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量。操作数的段地址由选择的基址寄存器决定例:MOVAX,[BP+SI+DATA]33使用相对的基址-变址寻址方式可以很方便地访问二维数组。基址寄存器数组首地址变址寄存器数组元素行址位移量数组元素列址(偏移地址)二维数组例:内存图示(按行存储)(行位移地址)(行内元素下标)183252409A=34指令操作例:MOVAX,DATA[DI][BX]若(DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H则指令执行后(AH)=[83021H],(AL)=[83020H]8320083200HAHALAX+DATA0200操作码代码段数据段.........YYXXDS8000BX2000DI100035MOVAL,[2000H]直接寻址[2000H]:表示内存单元地址。MOVAX,ES:[500H]16*ES+500HMOVBX,[SI]16*DS+SI寄存器间接寻址MOVBX,COUNT[SI]寄存器相对寻址MOVBX,[SI+COUNT]MOVAX,[BX][SI]基址变址寻址16*DS+BS+SIMOVAX,MASK[BX][SI]相对基址变址寻址16*DS+BX+SI+MASK判断寻址方式36说明源操作数和目的操作数的寻址方式①MOVAX,2408H②ADDBX,[SI]③ADC[BP+100H],AX④MOV[BX+DI],’$’⑤SUBDX,ES:[BX+SI]⑥SBBVAL[BP+DI],DXSBB[BP+DI+VAL],DXEA=BP+DI+VALPA=10H*SS+EA寄存器寻址,立即数寻址寄存器寻址,寄存器间接寻址寄存器相对寻址,寄存器寻址基址变址寻址,立即数寄存器寻址,段超越基址变址基址相对变址寻址,寄存器寻址37八、隐含寻址指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中例:MULBL指令的执行:AL×BLAX38段寄存器隐含约定寄存器间接寻址寄存器相对寻址基址变址寻址基址相对变址寻址堆栈操作取指令操作DS:SS:BPDS:BX+SS:BP+SS:SPCS:IPBXSIDISIDISIDI39寻址方式立即寻址寄存器寻址存储器寻址串操作寻址I/O端口寻址隐含寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址6种类别5种途径40内容回顾寻址方式(2+3+2+1)2数3寄2基1隐寄存器类别(大类、小类)各自分工默认段寄存器41练习已知DS=1A27H,SS=0FC90H,ES=2B9AH,BX=4013H,BP=3215H,SI=311EH,SP=100H写出存储器操作数的物理地址。1)MOVAL,[BX+SI+9000H]2)MOVBX,[BP-18]3)ADDSS:[BX+SI-3],AL4)SUB[SI+BP],CX5)PUSHBX2A3A1HFFB03H03A2EH102C33HFC9FEH42段寄存器隐含约定寄存器间接寻址寄存器相对寻址基址变址寻址基址相对变址寻址堆栈操作取指令操作DS:SS:BPDS:BX+SS:BP+SS:SPCS:IPBXSIDISIDISIDI43§3.38086指令系统44指令的基本构成说明要执行的是什么操作操作对象,可以有0个、1个或2个目的源45掌握:指令码的含义指令对操作数的要求指令的对标志位的影响指令的功能468086指令系统从功能上包括六大类:数据传送算术运算逻辑运算和移位串操作程序控制处理器控制478086/8088指令表指令类别记助符数据传送通用传送输入输出目标地址传送标志传送算术运算加法减法乘法除法转换MOV,PUSH,POP,XCHG,XLATIN,OUTLEA,LDS,LESLAHF,SAHF,PUSHF,POPFADD,ADC,INC,AAA,DAASUB,SBB,DEC,NEG,CMP,AAS,DAS,MUL,IMUL,AAMDIV,IDIV,AADCBW,CWD488086/8088指令表(续)逻辑指令逻辑运算移位循环移位串处理串操作重复控制控制转移转移无条件转移条件转移循环控制过程调用中断指令处理器控制AND,OR,XOR,NOT,TESTSHL,SAL,SHR,SARROL,ROR,RCL,RCRMOVS,CMPS,SCAS,LODS,STOSREP,REPE/REPZ,REPNE/REPNZJMPJA/JNBE,JAE/JNB,JB/JNAE,JBE/JNA,JC,JCXZ,JE/JZ,JNS,JO,JS,JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JNC,JNE/JNZ,JNO,JNP/JPO,JP/JPELOOP,LOOPE/LOOPZ,LOOPNE/LOOPNZCALL,RETINT,INTO,IRETCLC,STC,CMC,CLD,STD,CLI,STI,NOP,HLT,WAIT,ESC,LOCK指令类别记助符49数据传送指令通用数据传送输入输出地址传送标志位操作50一、通用数据传送一般数据传送指令堆栈操作指令交换指令查表转换指令字位扩展指令特点:该类指令的执行对标志位不产生影响51指令类型指令功能指令书写格式通用数据传送字节或字传送字压入堆栈字弹出堆栈字节或字交换代码转换MOV目标,源PUSH源POP目标XCHG目标,源XLAT目标地址传送装入有效地址装入DS寄存器装入ES寄存器LEA目标,源LDS目标,源LES目标,源标志位传送将FLAGS低字节装入AH寄存器将AH内容装入FLAGS低字节将FLAGS内容压入堆栈从堆栈弹出FLAGS内容LAHFSAHFPUSHFPOPFI/O数据传送输入字节或字输出字节或字IN累加器,端口OUT端口,累加器521.一般数据传送指令一般数据传送指令MOV格式:MOVdest,src操作:src例:MOVAL,BLdest53一般数据传送指令注意:两操作数字长必须相同;两操作数不允许同时为存储器操作数;两操作数不允许同时为段寄存器;在源操作数是立即数时,目标操作数不能是段寄存器;IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。54一般数据传送指令判断下列指令的正确性:MOVAL,BXMOVAX,[SI]05HMOV[BX][BP],BXMOVDS,1000HMOVDX,09HMOV[1200],[SI]55一般数据传送指令应用例将(*)的AS