硬件第4章2009.ppt_第1页
硬件第4章2009.ppt_第2页
硬件第4章2009.ppt_第3页
硬件第4章2009.ppt_第4页
硬件第4章2009.ppt_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

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

文档简介

第4章指令系统,2,本章要求掌握的内容,寻址方式:立即寻址、寄存器寻址、内存寻址常用指令:1)数据传送指令MOV、LEA、XCHG2)算术运算指令ADD(加)、SUB(减)、MUL(乘)、DIV(除)3)逻辑运算指令AND(与)、OR(或)、NOT(非),XOR(异或4)移位指令SHL、SAL、SHR、SAR、ROL、ROR5)常用转移指令JNZ、JNA等,循环控制指令LOOP6)外设的输入和输出指令IN、OUT,3,主要内容,指令与指令系统指令格式操作数寻址方式六大类指令,下面分别介绍,4,4.1指令与指令系统概述,指令及指令系统指令格式,下面分别介绍,5,一、指令与指令系统,1.指令(Instruction):计算机完成某种操作的命令如:数据传送指令MOVE(把数据由一处复制到另一处)如:加法指令ADD(进行加法运算)2.指令系统(InstructionSystem):机器提供的所有指令3.指令兼容性:同一系列机器的指令兼容4.程序(Program):为完成某个任务编制的一系列指集合,6,二、指令的表示,1.二进制代码表示机器指令例1000101011000011(8AC3H)功能:把寄存器BL内容复制到寄存器AL中2.符号化机器指令助记符表示(汇编语言指令)例MOVAL,BL,汇编,汇编语言指令,二进制机器指令,7,三、指令格式,做什么需要的数据或存放数据的地址指令包含的信息:执行的操作、运算数据来源、运算结果去向例MOVAX,1234H功能:把数据1234H送到AX寄存器中,格式:操作码目标操作数,源操作数;注释,8,四、指令操作数个数,操作数:指令需要的数据1)无操作数指令格式:操作码例HLT2)单操作数指令格式:操作码操作数例INCAX3)双操作数指令格式:操作码操作数,操作数例MOVAL,34H4)多操作数指令:SHLDAX,BX,1,9,五、指令字长及执行时间,例MOVAX,1234H机器代码是B83412,指令字长3B存储该指令需3个字节指令字长:由操作码长度、操作数地址长度、操作数个数和类型决定。操作数越多,指令字长越大执行时间:指令字长影响指令执行时间,代码段,B8,34,12,内存低端,内存高端,3字节,10,指令字长举例,MOVAL,BL机器代码8AC3,指令字长2BMOVBL,AL机器代码8AD8,指令字长2BMOVAX,1234H机器代码B83412,指令字长3BMOVBX,1234H机器代码BB3412,指令字长3B,11,确定操作数地址的方法。即寻找操作数的方法。包括立即寻址(数据直接在指令中)例MOVAX,1234H内存寻址(数据放在内存中)例MOVAX,1234H寄存器寻址(数放在寄存器中)例MOVAX,BX,4.2操作数的寻址方式,下面分别介绍,12,一、立即寻址(ImmediateAddressing),立即数:源操作数是常数(固定值)立即寻址:源操作数是常数例MOVAX,1234H;机器代码是B83412,AHAL,源操作数存放在操作码之后,低放低,高放高,12,34,B8,代码段,内存低端,内存高端,13,二、寄存器寻址(RegisterAddressing),操作数在CPU的通用寄存器中例源操作数、目的操作数都是寄存器寻址MOVAX,BX;把BX内容送到AX中即BHAHBLAL例目的操作数是寄存器寻址,源操作数是立即寻址MOVAX,1234HADDAL,78H;AL+78HAL,14,三、内存寻址(MemoryAddressing),指令给出操作数的偏移地址,操作数默认在数据段分为1.直接寻址(DirectAddressing)2.寄存器间接寻址(RegisterIndirectAddressing)3.基址加变址寻址4.寄存器相对寻址5.基址、变址、相对寻址,下页举例,15,1.直接寻址(DirectAddressing),直接给出操作数的偏移地址操作数段地址默认为数据段DS例MOVAX,1200H实际地址:DS16+1200AH=11HAL=22H,11,22,数据段,内存低端,内存高端,1200H,16,段重设(重新设置)的直接寻址,允许:指令指出操作数所在段操作数默认的段:数据段DS例MOVAX,ES:1200H指明ES为操作数的段地址,操作数在ES段中数据实际地址:ES16+1200,17,AHAL,1122,2.寄存器间接寻址,操作数偏移地址由寄存器给出该寄存器称为间址寄存器,可以是BX、BP、SI、DI例MOVBX,1200HMOVAX,BX;BX(Base)实际地址:DS16+1200,22,11,1200H,数据段,接下页,18,间址寄存器(不要求),只能是:基址寄存器(BX、BP),变址寄存器(SI、DI)操作数的段地址取决于间址寄存器BX,SI,DI默认在数据段BP默认在堆栈段例MOVAX,BX数据在数据段DSMOVAX,BP数据在堆栈段SS寄存器为BX(Base)、BP(BasePoint):又称为基址寻址寄存器为SI、DI:又称为变址寻址,19,3.基址加变址寻址,操作数的偏移地址为:基址寄存器+变址寄存器操作数的段地址:由基址寄存器决定例MOVAX,BX+SI或写成MOVAX,BXSIBX的段地址默认在数据段DS实际地址:DS16+BX+SI,2个自由度,20,操作数偏移地址:间址寄存器+位移量(相对量)例MOVAX,SI+DATA;数据在数据段DS地址=DS16+SI+DATA例MOVAX,DATABP;数据在堆栈段SS地址=SS16+BP+DATA例MOVAX,BX+DATA,接下页,4.寄存器相对寻址,21,5.基址、变址、相对寻址,操作数的偏移地址为:基址寄存器+变址寄存器+位移量操作数的段地址:由基址寄存器决定例MOVAX,BP+SI+DATABP的段地址默认在堆栈段SS实际地址:SS16+BP+SI+DATA,3个自由度,22,四、32位地址的寻址方式,MOVAX,ESPMOVEAX,123456HMOVEAX,EBXMOVEBX,ECX*2MOVEBX,EAX100HMOVEDX,EAX*4200HMOVEBX,EAXEDX*2MOVEBX,EAXEDX*2300H,23,寻址方式习题,指出下列每条指令源操作数的寻址方式。1)MOVCH,3AH;立即数寻址2)MOVAX,BX;寄存器寻址3)MOVBX,2000H;内存寻址(直接寻址),数在数据段4)MOVDX,BX;内存寻址(间接寻址),数在数据段5)MOVAL,ES:SI;数据在附加段6)MOVBX,DS:BP;数据在数据段,BP默认在堆栈段7)MOVAX,3BXDI;内存寻址(基址变址相对寻址),在数据段,24,4.3微机指令系统,按功能分为六大类指令,数据传送(重点)算术运算(重点)逻辑运算和移位(重点)串操作(不要求)程序控制(重点)处理器控制(不要求),下面分别介绍,25,4.3.1数据传送指令,通用数据传送(重点)输入输出(重点)地址传送(重点)标志位操作(不要求),下面分别介绍,不影响标志位,26,1.一般数据传送指令MOV(MOVE),一般数据传送指令:MOV格式:MOVDEST,SRC操作:SRC(源操作数)DEST(目标操作数)例MOVAX,1000HMOVAL,BLMOVAX,1200HMOVAX,BX,27,MOV错误指令举例,MOV100H,AX立即数不能作目的操作数MOVAL,BX两操作数字长必须相同MOV1200,SI两操作数不允许同时为存储器地址MOVDS,ES不能在两个段寄存器之间传送数据MOVDS,1000H立即数不能直接传给段寄存器MOVIP,AX不能修改IP值MOVDS,1000H不能修改DS值,28,练习题,指出下列指令错误原因MOVAL,BXMOV1200,SIMOVDS,1000H,29,2.传送、填充指令(MoveAndFill),80386及以后CPU增加的指令可以传送数据类型相同、位数不同的数据,下面分别介绍,30,1)零填充传送指令,格式:MOVZXDEST,SRCMOVZX:MovewithZeroExtend用0填充多出的位例MOVAL,87HMOVZXCX,AL;CX0087H,31,2)符号填充传送指令,格式:MOVSXDEST,SRCMOVSX:MovewithSignExtend用符号位填充多出的位例MOVAL,87H;10000111MOVSXCX,AL;CXFF87H,32,3.交换两数指令XCHG(Exchange),格式:XCHGDEST,SRC功能:交换操作数要求:两操作数必须有一个是寄存器操作数禁止:不允许使用段寄存器例XCHGAX,BX;交换AX和BX的值XCHGCL,2000H;交换CL和2000H单元中的值XCHG2000H,CL;同上,33,4.地址传送指令LEA(LoadEffectiveAddress),格式:LEA寄存器,内存有效地址可以是SI、DI、DX功能:内存效地址的偏移量送寄存器例LEASI,DATA将符号DATA表示的地址偏移量送SI中,例子见下页,34,LEA指令与MOV指令的区别,比较下列指令:LEASI,DATA1MOVSI,OFFSETDATA1MOVSI,DATA1前2条指令:SI=DATA1地址后1条指令:SI=1234H数据MOVBX,BXLEABX,BX前者:BX=7788H后者:BX=1100H,LEA应用见下页,DATA1,12H,34H,BX=1100H,88H,77H,1100H,符号地址,35,应用LEA举例,题目:传送数据将数据段中首地址为MEM1的10字节数据传送到该段首地址为MEM2的区域存放要求:编写相应程序段,SI=MEM1MEM1+1,DI=MEM2bMEM2+1,10个字节,10个字节,程序见下页,36,流程图,开始,计数值=0?,取源地址,送数据块长度到CL,取目标地址,传送一个字节,结束,修改地址指针,修改计数值,N,Y,程序见下页,37,程序,LEASI,MEM1LEADI,MEM2MOVCL,10NEXT:MOVAL,SI;取数据MOVDI,AL;移数据INCSI;SI加1INCDI;DI加1DECCL;CL减1JNZNEXT;CL0,跳到NEXTHLT,SI=MEM1,DI=MEM2,10个字节,10个字节,38,低高,6.堆栈操作指令(StackOperation),堆栈基本概念:堆栈段:内存的一块区域指针:栈顶、栈底堆栈操作:入栈、出栈操作原则:先进后出,SP栈顶,栈底,下页,39,数据入栈指令PUSH,Pushwordordoublewordontostack8086CPU:PUSHRegister/Memory操作数可以是寄存器、内存地址80286及以后CPU,操作数还可以是立即数PUSHRegister/Memory/Immediate,下页举例,40,入栈指令举例,SP=1200H,堆栈段,入栈前,SP=11FEH,34,12,堆栈段,入栈后,1234,AX,例PUSHAX设AX=1234H,SP=1200H,执行指令后堆栈区状态见图SP-1放操作数高字节SP-2放操作数低字节,高地址,低地址,41,数据出栈指令POP,PopwordordoublewordoffstackPOPRegister/Memory操作数可以是寄存器、内存地址,下页举例,42,出栈指令举例,SP=1200H,34,12,堆栈段,出栈后,SP=11FEH,34,12,堆栈段,出栈前,例POPAXSP操作数低字节SP+1操作数高字节SP+2SPAX=1234H(AH=12HAL=34H),1234,AX,高地址,低地址,43,8.输入输出指令(InputandOutput),专门面向I/O端口(设备)操作的指令内容:指令格式及操作指令两种寻址方式指令对操作数的要求,下面分别介绍,44,指令格式,指令格式:输入指令:IN累加器,端口地址输出指令:OUT端口地址,累加器例输入指令INAX,80H;将端口80H中的数据送到AX例输出指令OUT43H,AL;AL数据送到43H端口,45,指令寻址方式(直接寻址),直接寻址:直接给出8位端口地址,可寻址256个端口例INAX,80H;直接给出8位端口地址80H例OUT43H,AL;AL数据送到地址43H端口间接寻址:见下页,46,指令寻址方式(间接寻址),间接寻址:16位端口地址由DX指定,可寻址64K个端口例MOVDX,03FFH;将16位端口地址送DXINAL,DX;DX端口数据入AL寄存器例MOVDX,43H;端口地址送至DX中OUTDX,AX;注意只能用DX存放端口地址,47,4.3.2算术运算类指令(重点),加法运算指令减法运算指令乘法运算指令除法运算指令,算术运算指令的大多对状态标志位有影响,下面分别介绍,48,1.加法指令,包括:普通加法指令ADD带进位的加法指令ADC加1指令INC加法指令对操作数的要求与MOV指令相同,下面分别介绍,49,1)不带进位加法指令ADD,格式:ADDOPRD1,OPRD2功能:OPRD1+OPRD2OPRD1例执行下列程序段后,AX结果是什么?MOVAX,12ADDAX,15,50,ADD运算影响标志寄存器Flags举例1,例执行下列程序段后,AL结果是什么?Flags中的CF、ZF、OF、SF的值各是什么?MOVAL,7FHADDAL,01H答AL=80H。状态标志位结果CF=0ZF=0OF=1SF=1看成带符号数运算:7FH是+127,80H对应-128看成无符号数运算:7FH是127,80H对应128,01111111+0000000110000000,用调试程序看结果,51,用调试程序查看标志位,52,ADD运算影响标志寄存器举例2,例执行下列程序段后,AX结果是什么?Flags中的CF、ZF、OF、SF的值各是什么?MOVAX,7FFFHADDAX,0001H答AX=1000000000000000=8000H看成带符号数运算:7FFFH是+32767,加结果是-32768状态标志位结果CF=0ZF=0OF=1SF=1,53,注意,若立即数的最高位为数码AF,则必须在前面添加一个0,以避免混淆。MOVAH,0B6HMOVBX,1234H,54,2)带进位加法指令ADC(AddwithCarry),指令格式:ADCOPRD1,OPRD2指令操作:OPRD1+OPRD2+CFOPRD1对操作数要求、标志位影响与ADD指令完全一样ADC指令多用于多字节数相加运算,例子见下页,55,ADC指令举例,ADC指令用于多字节数相加运算MOVAX,0FH;AX=000FHADDAL,0F1H;AL+F1HAL=00H,有进位CF=1ADCAH,0;AH+0+CFAH=01H最后结果:AH=01HAL=00H,56,3)加1指令INC(Incrementby1),用于在程序中修改地址或修改计数值(控制循环次数)格式:INCOPRD操作:OPRD+1OPRD例LEASI,MEM1.INCSI;地址SI加1.,SI=MEM1MEM1+1内存,OPRD不能是段寄存器或立即数,57,2.减法指令,包括:普通减法指令SUB考虑借位的减法指令SBB减1指令DEC两数比较指令CMP求数据补码指令NEG减法指令对操作数的要求与对应的加法指令相同,下面分别介绍,58,1)减法指令SUB(Subtract),格式:SUBOPRD1,OPRD2操作:OPRD1OPRD2OPRD1对标志位影响与ADD指令相同例计算3078H-240AH=?结果放在AX中MOVAX,3078HSUBAX,240AH,59,2)带借位减法指令SBB(SubtractwithBorrow),指令格式:SBBOPRD1,OPRD2指令操作:OPRD1OPRD2CFOPRD1对操作数的要求与SUB指令完全一样对标志位的影响与SUB指令完全一样SBB指令多用于多字节数相减运算,60,3)减1指令DEC(Decrementby1),格式:DECOPRD操作:OPRD1OPRD例MOVCX,25DECCX;CX减1常用于在程序中修改计数值,控制循环次数对操作数的要求与INC指令相同,例子见下页,61,DEC应用程序举例,问执行下面循环程序后,AX的值是多少?MOVAX,0MOVCX,3LOP:ADDAX,1DECCXJNZLOP;若CX0,则跳到LOP处HLT,62,4)求补指令NEG(Negate),格式:NEGOPRD操作:0OPRDOPRD用0减去操作数,相当于对操作数求补码例求两数之差的绝对值,结果放到AL中。MOVAL,24;求|24-32|=?SUBAL,32NEGAL,63,5)两数比较指令CMP(Compare),格式:CMPOPRD1,OPRD2操作:OPRD1OPRD2特点:指令执行后,两个操作数不变,只影响标志位用途:比较两个数的大小,可作为条件转移指令的转移条件指令对操作数的要求及对标志位的影响与SUB指令相同,比较原理见下页,两数相减影响标志位,64,CMP指令比较原理,对于两个无符号数(CMPAX,BX):若CF=0没借位,则AXBX若CF=1有借位,则AXBX若OF和SF状态不同,则AXA时跳到AA处AA:,用于无符号数,109,带符号数条件转移常用指令,指令名称汇编格式转移条件大于转移(jumpgreater)JGtargetSF=OF且ZF=0不小于或等于转移JNLEtargetSF=OF且ZF=0大于或等于转移JGEtargetSF=OF不小于转移JNLtargetSF=OF小于转移(jumpless)JLtargetSFOF且ZF=0不大于或等于转移JNGEtargetSFOF且ZF=0小于或等于JLEtargetSFOF或ZF=1不大于转移JNGtargetSFOF或ZF=1,110,其他常用条件转移指令,指令名称汇编格式转移条件等于转移(jumpequal)JEtargetZF=1为零转移(jumpzero)JZtargetZF=1不等于转移(jumpnotequal)JNEtargetZF=0非零转移(jumpnotzero)JNZtargetZF=0,举例见下页,求负数个数,从内存5单元开始存有10个符号数,统计负数个数,送RT单元XORDI,DI;DI清零,存放负数个数MOVBX,5;起始地址5BXMOVCX,10;数据个数CX(置计数器初值)AGAIN:MOVAL,BX;BX内容送ALCMPAL,0;比较JGENOT;AL0(非负数)时,转NOTINCDI;为负数DI加1NOT:INCBX;BX加1,指向下一个数DECCX;CX内容减1JNZAGAIN;结果不为零,转到AGAIN处继续MOVRT,DI;负数个数送RT单元存储,112,4.循环控制指令,控制程序在以当前IP为中心的-128+127范围内循环执行循环次数由CX寄存器指定,循环指令,无条件循环指令LOOP条件循环指令,LOOPZLOOPNZ,113,无条件循环指令(LoopUntilComplete),格式:LOOPLabel功能:每次CX减1,若CX0,则转到Label处继续执行例1+2+3+10AXMOVAX,0;AX清0,结果要存在AX中MOVBX,1MOVCX,10;循环次数=10SUM:ADDAX,BX;AX+BXAXINCBX;BX加1LOOPSUM;若CX0,转到SUM处继续,114,无条件循环指令(LoopUntilComplete),格式:LOOPLabel功能:每次CX减1,若CX0,则转到Label处继续执行例1+2+3+10AXMOVAX,0;AX清0,结果要存在AX中MOVBX,1MOVCX,10;循环次数=10SUM:ADDAX,BX;AX+BXAXINCBX;BX加1LOOPSUM;若CX0,转到SUM处继续,115,80386以后CPU增加的LOOP指令,LOOPW标号适用于80386及以后CPU,CX作循环计数器LOOPD标号适用于80386及以后CPU,ECX作循环计数器每次ECX减1,若ECX0,则转到标号处继续执行,116,条件循环指令,格式1:LOOPZLabelLOOPELabel功能:每次CX减1,若CX0且ZF=1,则转到Label处格式2:LOOPNZLabelLOOPNELabel功能:每次CX减1,若CX0且ZF=0,则转到Label处,117,LOOPNZ举例,计算2+4+8+16,结果存在AX中XORAX,AXMOVBX,2MOVCX,10LP:ADDAX,BXADDBX,BXCMPBX,32LOOPNZLP;CX0且BX-320时跳到LP处,结果:AX=30=1EHBX=32=20H,118,5.过程调用指令和返回指令,过程直接调用:CALL过程名直接给出过程名过程间接调用:CALLRegister/Memory由寄存器或内存地址给出过程的地址过程返回指令:RET,下面分别介绍,断点,过程入口地址,返回,调用,119,过程调用的执行过程,1)调用前保护断点地址(把CALL指令下一条指令的偏移地址存入堆栈)2)获取过程入口址(过程第1条指令的偏移地址)3)执行过程4)过程执行结束后返回原调用处(CALL指令的下一条指令)继续执行(断点恢复),120,调用近(段内)过程,CALLNEAR过程名子过程与原调用程序在同一代码段调用前只需保护断点的偏移地址例CALLAVERAGE;AVERAGE是近过程CALLWORDPTRBX由BX所指内存字单元存放过程入口偏移地址(IP),121,调用远(段间)过程,CALLFAR过程名子过程与原调用程序不在同一代码段调用之前需保护断点的段基地址和偏移地址先将断点的IP压栈,再将断点的CS压栈例CALLFARDISPLAYCALLDWORDPTRBX;由BX所指内存双字单元存放过程入口的偏移地址(IP)和段值(CS),122,6.中断指令(Interrupt),功能:用于调用中断服务程序格式:INTN通过N得到中断服务程序的起始(首)地址16位机,中断服务程序首地址在中断向量表32位机,中断服务程序首地址在中断描述符表,中断类型号N(0255),下面分别介绍,123,中断向量表,表中存放256个中断处理程序首地址1个中断处理程序首地址占4B共占用1KB(2564)地址范围00000H003FFH,124,中断描述符表,在32位微处理器的保护模式下:中断处理程序首地址放在内存的中断描述符表中表中存放256个中断描述符,每个描述符占用8B256个中断描述符占用2K字节一个中断处理程序对应一个中断描述符中断描述符包括中断处理程序首地址,125,中断指令举例,例26号中断是时间中断,读系统当前时间指令如下MOVAH,0INT26执行中断服务程序前系统自动保护断点地址和FLAGS,习题(更多习题见教材),什么是指令系统?写出指令的一般格式。指令中的操作数可以表示为哪三种形式?什么是寻址方式,简述立即寻址、寄存器寻址、内存寻址,各写出一条指令写出下列指令的操作码数据传送、地址传送、加法、减法、无符号数的乘法和除法、符号数的乘法和除法、加1、减1、比较两数、交换两数位置,接下页,5.下列每条指令的源操作数在哪个段,从段中取出几字节数据?MOVAL,1200HMOVAX,1200HMOVAX,ES:1200H6.堆栈段的进出原则是什么?入栈指令和出栈指令的作用是什么?栈顶是什么?7.执行“PUSHAX”指令后,AX中的数据被放到哪个段?向该段存进几个字节的数据,该段的指针有何变化?8.指令“POPAX”的功能是

温馨提示

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

评论

0/150

提交评论