下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 8088指令系统

8088指令系统.doc

8088指令系统

小子
2011-12-19 0人阅读 举报 0 0 暂无简介

简介:本文档为《8088指令系统doc》,可适用于IT/计算机领域

第四章指令系统只有硬件的计算机称为裸机它是不能工作的若要工作必须要事先编好程序也称为软件。计算机是硬件与软件共同组成的不可分割的系统。程序是由指令组成的。因此要理解计算机的工作原理掌握它的指令系统是必不可少的。指令是控制计算机去完成某种操作的命令与计算机的硬件有关根据设计使某型计算机所具有的指令的集合便是计算机的指令系统因此不同类型的计算机有不同的指令系统。指令的表达形式:机器码指令和汇编语言指令。①用二进制代码表示的指令称为机器码指令或目标代码指令这种形式的指令能够直接被计算机识别和执行。的指令一般有二到六个字节较复杂我们不作介绍。②因为机器码指令难以记忆和编程就将指令操作功能的英文缩写作为指令的符号称为助记符。用助记符表示的指令便于记忆和编程但不能被计算机直接识别和执行必须经过汇编转换为机器码后才能执行,汇编语言指令由此而得名。汇编语言指令与机器码指令有一、一对应关系用汇编语言指令进行编程能够充分开发计算机硬件资源它的程序目标代码短运行速度快因此汇编语言是面向机器的语言它在自动控制、智能化仪器仪表、监测等领域应用非常广泛。指令系统兼容了的全部指令这部分对位微处理器的指令是处理字节的此外还有自已所特有的对字或字符串的处理指令以及对带符号数的运算指令中断指令和协处理器的指令等。§汇编语言指令的格式与寻址方式一、汇编语言指令的格式指令格式是指编写指令是的书面表达形式一条完整的汇编语言指令由四个部分(字段)组成:标号:(指令助记符)操作数操作数注释各部分间用空格或规定的标点符号隔开方括号内的字段为可选项圆括号内的字段为关键字必选项。、标号是给该指令所在地址取的名字必须后跟“:”它可以缺省是可供选择的标识符。汇编语言中的标号按以下规则设定:()标识符由字母(a~zA~Z)数字(~)或某些特殊字符(?)组成()第一字符必须是字母(a~zA~Z)或某些特殊字符号(?)但“?”不能单独作标识符()标号有效长度为个字符若超过个字符则只保留前面的个字符为有效标识符。如:STARTMYCOOE?MORE都是有效的标号。而:LOOPSTART=?ABF都是无效的标号。、指令助记符是指令功能的代表符号它是指令语句中的关键字段不可缺省它表示本指令的操作功能。的指令助记符前面可以加一个或多个“前缀”从而实现某些附加操作。、操作数是参加指令操作的数据指令若出现两个操作数它们必须用逗号“”分开操作数也可以用表达式表示。操作数字段可以缺省。指令中参与操作的数据叫源操作数而表示指令操作结果的数据叫目的操作数。存放源操作数的地址叫源地址存放目的操作数的地址叫目的地址。、注释部分是可选项允许缺省如果带注释则必须用“”注释本身只用来对语句功能加以解释给阅读程序带来方便汇编程序对它不做任何处理。二、的寻址方式计算机指令大多是对数据进行操作。计算机中的数据是以多种方式存放的这样做的目的是为了增加计算机处理数据的能力。对于数据存放的方式必须预先约定根据这些约定机器才能找到它们并进行处理。所谓寻址方式就是寻找操作数所在地址的方式。在这里地址泛指一个存储单元或某个寄存器。寻址方式的多少是反映指令系统功能强弱的一个重要指标。指令系统的寻址方式有七种。、立即数寻址:指令的操作数本身就放在指令中这类指令的寻址方式叫立即寻址方式。例如:MOVALH将数H送入ALMOVAXH将数H送AX其中AH中为HAL中为H。采用立即数寻址方式的指令主要用来对寄存器赋值。因为操作数可以直接从指令中取得不需要运行总线周期因此立即寻址方式的特点是速度快。立即数可以是位也可以是位规定立即数只能是整数不能是小数、变量或者其它类型的数据。另外还须注意立即数只能作源操作数。、寄存器寻址:操作数在CPU的内部寄存器中在指令中指出该寄存器名这种寻址方式是寄存器寻址方式。例如:MOVSSAX将AX的内容传给SSROLAH将AH中的内容循环左移一位。对位操作数来说寄存器可以为AX、BX、CX、DX、SI、DI、SP或者BP对位操作数来说寄存器可以为AH、AL、BH、BL、CH、CL、DH、DL。采用寄存器寻址方式的指令在执行时操作就在CPU内部进行也不需使用总线周期因此执行速度快。一条指令中可以对源操作数采用寄存器寻址方式也可以对目的操作数采用寄存器寻址方式还可以两者都用寄存器寻址方式。、直接寻址:操作数放在存储器中指令直接指出存储单元的有效地址。直接寻址是对存储器进行访问时可采用的最简单方式。地址用位十六进制数表示外加方括号区别于立即寻址。例如:MOVAXH将DS段的H和H两单元的内容送AX中。设DS为H则本指令在执行时将绝对地址为H单元的内容送AL将绝对地址为H单元的内容送AH。注意:采用直接寻址时若没有前缀指明操作数在哪一段则默认段寄存器是数据段寄存器DS若对其它段寄存器所在的存储区进行寻址则指令前必须加前缀指出段寄存器名。例如:CS∶MOVBXH将CS段的H和H两单元内容送BX。设CS为H则本指令在执行时将绝对地址为H单元的内容送BL将绝对地址为H单元的内容送BH。、寄存器间接寻址:操作数在存储器中存储单元的有效地址放在指令指出的寄存器中即指令给出的寄存器中放的是操作数所在存储单元的有效地址。寄存器外加方括号区别于寄存器寻址。所用的寄存器可以为BX、SI、DI和BP之一。和直接寻址一样若指令没有前缀指明具体的段寄存器则默认为DS若寄存器为BP时则对应的段寄存器为SS。例:MOVBXDI设DS=HDI=H则本指令在执行时将绝对地址为H单元内容送BL将绝对地址为H单元内容送BH。例:ES∶MOVCXBX设:ES=HBX=H则本指令在执行时将绝对地址为H和H两单元的内容送CX。、基址寻址:指令中指定的基址寄存器的内容与位移量相加其和作为操作数的有效地址。所用寄存器为BXBP位移量可以是位也可以是位。BX位位移量EA=+BP位位移量用BX寄存器进行基址寻址时默认的段寄存器为DS以寄存器BP进行间接寻址时操作数默认在堆栈段中。例:MOVAXBP+COUNT设SS=HBP=HCOUNT=H则本指令在执行时将绝对地址为H和H两单元的内容送AX。、变址寻址:指令指定的变址寄存器的内容与位移量相加其和作为操作数的有效地址。所用寄存器为SI和DI它们分别称为源变址寄存器和目的变址寄存器。这两个寄存器中的内容在串操作指令执行过程中会自动修改以指向下一个操作数。SI位位移量EA=+DI位位移量例:MOVAXDI+COUNT设DI=HCOUNT=H是位移量DS=H则本指令在执行时将存储器中绝对地址为EAH和EBH两单元的内容送AX。、基址加变址寻址:指令指定的基址寄存器、变址寄存器二者内容相加再加指令中的位移量其和作为操作的有效址。基址寄存器为BXBP变址寄存器为SIDI位移量为位或位利用这种寻址方式的指令也可以没有位移量。BXSI位位移量EA=++BPDI位位移量由于SI、DI中的内容可以改变因此这种寻址方式使用起来很灵活特别是为堆栈中数组的访问过程提供了极大的方便。例:MOVAXBX+DI+MASK设DS=HBX=HDI=HMASK=H则本指令在执行时将绝对地址为AAH和ABH两单元内容送AX。如图所示在访问堆栈数组时可以在BP中存放堆栈顶的地址位移量表示数组第一个元素到栈顶的距离变址寄存器SI(也可为DI)指出数组元素。§数据传送类指令传送类指令是指令系统中最活跃的一类指令也是条数最多的一类指令负责把数据、地址或立即数传送到寄存器或存储单元。我们把这类指令分为四种。一、通用数据传送指令:提供方便灵活的通用的传送操作适用于大多数操作数。通用传送指令(除了XCHG以外)是唯一允许以段寄存器为操作数的指令。这种指令包括最基本的传送指令MOV堆栈指令PUSH和POP数据交换指令XCHG。、传送指令:MOVdestsrc(src为源dest为目的后同)。功能:实现CPU内部寄存器之间的数据传送、寄存器和内存之间的数据传送还可以把一个立即数送给CPU的内部寄存器或者内存单元。例:MOVDLCHCH中的位数送DLMOVAXCX将CX的内容传送给AXMOVAXFFH将立即数FFH送AXMOVWORDPTRSIBH立即数BH送SI和SI+所指两个单元。这里的PTR是一个汇编操作符与前面的WORD一起意思是从SI地址中取一个字而不是一个字节。、堆栈操作指令:堆栈是从内存中划分出来的一部分存贮空间用于存放程序执行过程中的某些特定数据。向堆栈中存数叫入栈从堆栈中取数叫出栈。第一个存入堆栈的数据的地址叫栈底最后一个进入堆栈的数据的地址叫栈顶。SP叫堆栈指针寄存器总是指向栈顶。入栈指令:PUSHsrc功能:将SP值减然后将源操作数送至由SP所指向的栈顶。出栈指令:POPdest功能:将SP所指栈顶内容送至目的单元然后SP值加。注意的栈操作指令以字为单位进行操作不允许以字节为单位进行操作。且POP指令中的目的操作数可以是除代码段寄存器CS之外的其它寄存器和存储器。例:设AX=HSS=HSP=HBX=H执行PUSHAX后则SP=H存储单元H的内容为HH单元的内容为H。再执行POPBX后(SP)=H(BX)=H堆栈中的内容是按先进后出的原则进行传送的因此在保存和恢复内容时要按照对称的次序执行一系列压入指令和弹出指令。、交换指令:XCHGdest,src功能:将源地址单元的内容与目的地址单元的内容相互交换。交换指令可以实现字节交换也可以实现字交换交换过程可以在CPU内部寄存器之间进行也可以在内部寄存器和存储单元之间进行但两个内存单元之间不能直接交换。例:XCHGALBHAL和BH之间的字节内容交换XCHGAXDXAX和DX之间的字内容交换XCHGBXHBX和H及H两单元内容交换。注意:存储器之间不能交换两个操作数中必须有一个在寄存器中段寄存器不能作为一个操作数交换指令不影响标志位。、换码指令:XLAT功能:将BX和AL中内容的和为目的地址取出其存储单元的内容送入AL。可以使累加器中的某个值变换为内存单元中的某个值一般用来实现代码的转换故称换码指令也可称查表指令。该指令的操作数缺省。例:将存储单元AH中的内容送累加器执行:MOVBXHMOVALAHXLAT该指令用作查表时必须事先建立好表格该表最大容量为字节。二、目标地址传送指令:这是一种专用于传送地址码的指令可用来传送操作数的段地址和偏移地址共包含三条指令。、取有效地址指令:LEAdestsrc功能:将存储器地址送到一个寄存器而不是传送其内容。该指令中要求源操作数必须为内存单元地址目的操作数必须为位的通用寄存器。例:LEAAXH将H单元的偏移量送AX(AX)=HLEABXBP+SI指令执行后BX的内容为BP+SI的值LEASPH使堆栈指针SP为H、地址指针装入DS和另一个寄存器的指令:LDSdestsrc功能:把四个字节的地址指针(包括一个段地址和一个偏移量)传送到两个目的寄存器其中地址指针的后两个字节即段地址一定送到DS中。该指令中源操作数必须是存储单元地址。例:执行LDSDIH将H和H中的地址偏移量送到DI将H和H中的段值送到DS寄存器。、地址指针装入ES和另一个寄存器的指令:LESdestsrc功能:把四个字节的地址指针(包括一个段基址和一个偏移量)传送到两个目的寄存器其中后两个字节的内容即段基址一定送ES中该指令中源操作数也必须是存储单元地址。LES指令与LDS指令的操作基本相同。三、标志位传送指令:这种指令的执行可读出当前标志寄存器的内容也可对标志寄存器设置新的值。这种指令共四条。、读取标志指令:LAHF功能:将标志寄存器中的低八位传送到AH中如图所示。FLAGOFDFIFTFSFZFAFPFCFAHDDDDDLAHF指令的功能、设置标志指令:SAHF功能:将AH寄存器的相应位传送到标志寄存器的低位与上条指令功能相反即将上图中的箭头方向反过来。以上两条指令是为兼容位而设置的。、将标志寄存器的内容压入堆栈指令:PUSHF功能:将标志寄存器的值压入堆栈顶部SP值减且标志寄存器的内容不变。、对标志寄存器的弹出堆栈指令:POPF功能:从堆栈顶弹出一个字送到标志寄存器中同时SP的值加。PUSHF和POPF指令一般用在子程序和中断处理程序的首尾起保护主程序标志和恢复主程序标志的作用。四、输入输出数据传送指令:用来完成累加器(ALAX)与IO端口之间的数据传送功能。、输入指令:INaccPort(acc为累加器Port为端口下同)功能:从一个位端口(或一个位端口)读入一个字节到AL中(读入一个字到AX中)。、输出指令:OUTPortacc功能:将AL中的一个字节写入一个位端口(或将AX中的一个字写到一个位端口中)。注意:若为位端口地址可用数据直接表示端口若为位端口地址则必须将地址数据送入DX中指令中用DX表示端口地址。例:实现(H)、(H)端口内容→(DATAWORD)INAXHMOVDATAWORDAX例:从端口FCH送一个字到AX寄存器MOVDXFCHINAXDX(AL)←(FCH)(AH)←(FDH)例:实现将(AL)→(H)OUTHAL(H)←(AL)例:实现将(H)→(H)MOVALHMOVDXHOUTDXAL§算术运算类指令算术运算是计算机的最基本的运算之一CPU具有完备的加、减、乘、除算术运算指令可处理不带符号或带符号的位二进制整数以及不带符号的装配型拆开型十进制整数。特点:①大部分都影响标志位,不同指令影响不同:()加、减法指令影响SF,ZF,AF,PF,CF,OF()加和减指令不影响CF()乘法指令影响CF,OF()除法指令使大部分标志位的状态不确定()对BCD码调整指令对标志位的影响不同()转换指令对标志位无影响。②都可以用于字节、字的运算。③双操作数指令除源为立即数外其余必须有一个操作数为寄存器单操作数指令不能为立即数。一、加法指令、不带进位位的加法指令:ADDdestsrc功能:用来执行目的操作数与源操作数相加操作结果放目的地址。例:ADDCLHCL内容与H相加结果放CL中ADDCXHCX中内容与H相加结果放CX中ADDDXSIDX与SI内容相加结果放DX中ADDBYTEPTRALPHADI,H存储器立即数ADDAXBX+HBXH单元及BX+H单元内容与AX内容相加结果放AX中、带进位位的加法指令:ADCdestsrc功能:目的操作数与源操作数及进位位CF内容相加结果放目的地址。例:ADCCXCX中的内容与以及CF的值相加结果放CX中ADCALBLAL与BL以及CF值相加结果放BXADCBYTEPTRMEM,存储器立即数CFADCBX+DIAXBXDI和BX+DI+两单元内容与AX内容及CF值相加结果仍放BX+DI单元和BX+DI+单元。ADC指令为多字节加法运算提供了方便如有两个字节的无符号数相加两个数分别放在H和H开始的存储单元中低字节放在低地址单元高字节放在高地址单元和放在H开始的内存单元可执行如下程序段:CLC清进位位MOVSIH取第一个数的首地址MOVAXSI将第一个数的低位取到AXMOVDIH取第二个数的首地址ADDAXDI第一个数和第二个数的低位相加MOVSIAX将和送H和H两单元MOVAXSI+将第一个数的高位送A中ADCAXDI+两个数的高位连同进位位相加MOVSI+AX高位的和送H和H两单元、增量指令:INCdest功能:将操作数的内容加再送回原地址。该指令只有一个操作数一般用在循环程序中修改指针和循环次数且该指令执行结果不影响标志位CF。例:INCDLDL中内容加。INCSISI中内容加。INCBYTEPTRBX+DI+将BX+DI+所指单元内容加。INCWORDPTRDI将存储器内容加。二、减法指令、不带借位的减法指令:SUBdestsrc功能:目的操作数减去源操作数差放目的地址。例:SUBAL将AL中内容减去中内容结果放AL。SUBBP+CL将SS段的BP+所指单元内容减去CL中内容结果仍放BP所指堆栈单元中。SUBBXDH将BX中内容减去DH结果仍放BXSUBWORDPTRALPHABXDI,H存储器减立即数、带借位的减法指令:SBBdestsrc功能:目的操作数减去源操作数再减去CF的值结果放目的地址。例:SBBBXBX的内容减去及CF的值结果放BXSBBCXDXCX的内容减去DX的内容SBBWORDPTRDIHDI和DI+两单元内容减去H及CF的值结果仍在DI和DI+所指两单元。与带进位的加法指令类似SBB主要用于多字节减法运算中。、减量指令:DECdest功能:将操作数的值减结果仍放原地址。例如:DECALAL的内容减DECBYTEPTRBXDI将BXDI所指单元内容减。、取补指令:NEGdest功能:将操作数取补码结果仍放原地址。因为对一个数取补码相当于用减去此操作数所以NEG指令执行的也是减法操作。例如:NEGAL将AL中的数取补码送回AL。NEGCX将CX的数码取补码送回CX。、比较指令:CMPdestsrc功能:执行目的操作数减去源操作数但不送回结果只是使结果影响标志位其执行结果如表所示。例:CMPALAH将AL内容与AH相比较结果影响标志位。CMPCXDI将CX与DI的内容相比较。CMPWORDPTRALPHAGAMMA,H存储器与立即数比较三、乘法指令、无符号乘法指令:MULsrc功能:实现源操作数与累加器中的内容这两个无符号数的乘法结果送累加器和DX。、带符号数乘法指令:IMULsrc功能:同上只是源操作数和累加器中的数均为带符号数。以上两条指令的目的操作数是隐含规定的为AL或AX例:MULBXAX内容与BX内容相乘结果在AXMULBYTEPTRHAL与内存单元内容相乘结果放AX。IMULHAX内容与H和H存储单元内容相乘结果放DX及AX。IMULWORDPRTHAX与内存H和H单元内容相乘结果放DX和AX。四、除法指令:、无符号除法指令:DIVsrc功能:实现累加器(及扩展部分)除以源操作数的无符号除法。、带符号除法指令:IDIVsrc功能:同上只是源操作数和目的操作数均为带符号数。除法运算中若除数是位则要求被除数是位即在AX中其结果商放在AL中余数放在AH中若除数是位则要求被除数是位即在DXAX中其结果商在AX中余数放在DX中。若被除数不满足要求则要用以下两条指令进行扩展。、字节转换指令:CBW功能:将AL中的符号位扩展到整个AH中形成双字节的被除数。、字转换成双字指令:CWD功能:将AX中的符号位扩展到整个DX中形成四字节的被除数。例:DIVWORDPTRHIDIVBL例:若要用AL中的带符号数除以H单元的内容(带符号数)应执行以下操作:CBW将AL中的带符号位扩展到AX中。IDIVHAX中内容除以H单元内容商在AL中除数在AH中。§逻辑操作类指令逻辑运算是计算机的另一种基本运算指令系统具有对位数和位数的逻辑操作指令这些指令分为两种:一种是逻辑运算指令另一种是移位指令。一、逻辑运算指令:包括AND(与)、OR(或)、NOT(非)、XOR(异或)和TEST(测试)指令。特点:①可以对位或位操作数执行逻辑操作。②逻辑运算是按位操作操作数应该是位串而不是数。③影响标志位:(NOT指令除外其他指令同),CF=F=A未定义。、逻辑与指令:ANDdestsrc功能:目的操作数与源操作数实现逻辑与运算结果放目的地址。例:ANDALFHAL中的内容与FH相与结果在AL中ANDCXDICX和DI中的内容相与结果在CX中ANDWORDPTRBXSI,FFFEH、逻辑或指令:ORdestsrc功能:目的操作数与源操作数实现逻辑或运算结果放目的地址。例:ORBLFHBL中的内容与FH相或结果在BL中ORCLBXDICL中内容与存储单元BX+DI中的内容相或结果在CLX中ORBYTEPTRMEMBYTE,H、逻辑异或指令:XORdestsrc功能:目的操作数与源操作数实现逻辑异或运算结果放目的地址。例:XORSIDXSI中的内容与DX相异或结果在SI中XORCLHAL和H中的内容相异或结果在AL中XORMEMBX,AX存储器异或寄存器。、逻辑非指令:NOTdest功能:对操作数实现求反运算结果仍在原地址。例:NOTAH对AH中的内容求反NOTWORDPTRH位存储器求反NOTBYTEPTRBP位存储器求反、测试指令:TESTdestsrc功能:TEST指令和AND指令执行同样的操作但TEST指令不送回操作结果仅仅影响标志位。例:TESTAXH如果AX最高位为则ZF=否则ZF=TESTSICH存储器与CH内容相与。在程序设计中可用AND指令对一个数据的指定位清用OR指令对一个数据的指定位置而用XOR将一个数据的指定位取反NOT指令对整个数据取反若再加则得补码TEST指令则用来检测指定位是还是而这个指定位往往对应一个物理量。二、移位指令:分为非循环移位和循环移位移位对象并不局限于累加器中且移动位数可以设定。、非循环移位指令:()逻辑左移算术左移指令:SHLSALdestcount功能:将目的操作数左移由计数值(count)规定的位数目的操作数的低位移入。()逻辑右移指令:SHRdestcount功能:将目的操作数右移由计数值规定的位数目的操作数的最高位移入。()算术右移指令:SARdestcount功能:将目的操作数右移由计数值规定的位数目的操作数的最高位(即符号位)保持不变。逻辑移位指令在执行时把操作数看作无符号数所以右移时最高位添而算术移位指令在执行时则将操作数看作有符号数来移位右移时最高位不变这里的最高位就是符号位。SHL和SAL这两条指令的功能完全一样因为对一个无符号数乘和对一个有符号数乘没有什么区别每移一次最低位数补最高位进入CF在左移位数为的情况下移位后如果最高位和CF不同则溢出标志OF置反之则为可据此判断有符号数移位前后符号位有无变化若移多次则对OF无效。SAR和SHR的功能不同SAR执行时最高位不变而SHR则在最高位补。移位指令在执行时都会影响标志位CF、OF、PF、SF和ZF其执行操作如书图所示。SALDX将DX中的各位左移一位最低位补SHRDXCL将DX中的各位右移由CL中给定的值最高位补SARDXCL将DX中的各位右移由CL中给定的值最高位不变。注意:如果只移一位在指令中用指明即可如移若干位则必须用CL预先置入所移的位数。、循环移位指令:()循环左移指令:ROLdestcount功能:将目的操作数循环左移由计数值规定的位数。()循环右移指令:RORdestcount功能:将目的操作数循环右移由计数值规定的位数。()带进位循环左移指令:RCLdestcount功能:将目的操作数连同进位位一起循环左移由计数值规定的位数。()带进位循环右移指令:RCRdestcount功能:将目的操作数连同进位位一起循环右移由计数值规定的位数。ROL和RCL在执行一次左移后ROR和RCR在执行一次右移后如操作数的最高位发生变化则OF置否则OF为可据此判定符号位的变化。若移多位则对OF无效。条循环移位指令的功能如书图所示。例:ROLAL将AL中各位循环左移位RORAXCL将AX中各位循环右移由CL给定的值RCLWORDPTRDICL将DI和DI+单元中的各位连CF一起循环左移由CL给定的值RCRBYTEPTRDI将DI单元中的各位连同CF一起循环右移一位用移位指令时左移位相当于将操作数乘右移一位相当于将操作数除用乘法指令和除法指令直接执行乘除运算一般所需时间较长如用移位指令来编制一些常用的乘除法程序由于移位指令执行速度快可将计算速度提高五、六倍之多。例:下面的程序将AL中的数乘。SALAL将AL中数左移位得XMOVBLALX保存在BL中MOVCL移位次数置CL中SALALCLX左移次得XADDALBLX加上XAL中为X§程序转移类指令能改变程序执行顺序的指令称为程序转移类指令。在系统中程序的地址由CS和IP两部分组成改变CS和IP(即改变段和偏移量)或者仅改变IP都可以达到这个改变程序执行顺序的目的。其中前者称段间转移或段间调用用FAR来表示这时需要将目标标号的段基址和偏移地址分别置入CS和IP中后者称段内转移或段内调用可用NEAR来表示这时只需将目标标号的偏移地址置入IP即可为了进一步节省目标码的长度对于很短距离的段内转移(~+)又称为短转移用SHORT来表示。无论是段内转移还是段间转移都还有直接和间接之分。所谓直接转移就是转移的目标地址信息直接出现在指令中所谓间接转移就是转移的目标地址信息存储于某一寄存器或某一个内存变量中。当通过寄存器间接转移时因为寄存器只有位所以只能完成段内间接转移。计算段内转移地址有两种方法:一种是把当前的IP值增加或减少某一个值也就是以当前指令为中心向前或向后转移称为相对转移另一种是以新的值完全取代当前的IP值称绝对转移。系统中所有的段内直接转移都是相对转移所有的段内间接转移和段间转移都是绝对转移。相对转移指令及其目标在同一段内并一起浮动。一、无条件转移指令:指令执行结果一定发生转移。、无条件转移指令:JMP目标标号功能:无条件转移到目标标号指定地址去执行。根据目标地址及寻址方式有四种基本格式:()段内直接转移:目标地址在当前代码段内其转移地址与本指令当前IP值之间的字节距离在指令中直接给出。目标标号地址=当前指令IP值+指令字节数+位移量若位移量占字节最高位为符号位转移距离不超过±KB若位移量占一个字节为短转移在~+字节内。例:JMPADDRI若已知ADDR与本指令间距离为H字节指令长个字节CS=HIP=H则该指令执行后转移地址为H+H+H+H=H即IP=H。()段内间接转移:转移的有效地址在某寄存器或存储器中。例:JMPBX若CS=HIP=HBX=H则该指令执行后转到地址为:H+H=H即IP=H。()段间直接转移:目标标号在其它代码段中指令中直接给出目标段基址和偏移地址。例:JMPFARADDR当前CS=HIP=H目标地址在另一代码段中其段基址为H偏移地址为CH则本指令执行后转到地址H+CH=CH处执行CS=HIP=CH。()段间间接转移:目标地址的段基址和偏移地址放在存储器内四个连续单元中指令中给出四个单元的首字节地址。例:JMPBX+H若DS=HBX=H则目标地址偏移地址在H和H单元中段基址在H和H单元。、子程序调用指令:CALL过程名功能:无条件转移到指令中所给出的过程地址去执行。子程序调用有段内调用和段间调用两种。段内调用指所调过程在同一代码段用NEAR表示段间调用指所调过程在其它代码段用FAR表示。段内调用的过程叫近过程段间调用的过程叫远过程。例:CALLNEARPROCNEARPROC为近过程名段内直接寻址CALLBX段内间接寻址过程入口地址在BX中CALLFARPROCFARPROC为远过程名段间直接寻址CALLBX段间间接寻址过程入口地址在BX内容为起始地址的四个连续单元中、返回指令:RET弹出值功能:无条件转移到弹出值所给定的地址去执行。RET指令通常安排在过程出口处为了正确返回RET指令类型必须与调用指令类型相对应。二、条件转移指令:由状态标志判断转移与否都是短距离相对转移指令条件满足则转移不满足则执行下一条指令。根据指令中所测试的状态决定是否转移条件转移指令分为四种。、对无符号数的指令:()JAJNBE目标标号高于不低于也不等于时转移()JAEJNB目标标号高于或等于不低于时转移()JBJNAE目标标号低于不高于也不等于时转移()JBEJNA目标标号低于或等于不高于于时转移、对有符号数的指令:()JGJNLE目标标号大于不小于也不等于时转移()JGEJNL目标标号大于或等于不小于时转移()JLJNGE目标标号小于不大于也不等于时转移()JLEJNG目标标号小于或等于不大于时转移以上两种转移指令要求前面一条是SUB指令或CMP指令。、单标志指令:()JC目标标号进位位为转移()JNC目标标号进位位为转移()JEJZ目标标号等于结果为转移()JNEJNZ目标标号不等于结果不为转移、位条件转移指令:()、JO目标标号溢出时转移()、JNO目标标号不溢出时转移()、JNPJNO目标标号奇偶位奇偶性为奇转移()、JPJO目标标号奇偶位奇偶性为偶转移()、JNS目标标号符号位为转移()、JS目标标号符号位为转移三、循环控制指令:用来控制程序的循环执行。、循环指令:LOOP目标标号功能:以CX为计数器CX减若不为零则转到目标标号地址执行否则顺序执行下一条指令。、相等结果为循环指令:LOOPELOOPI目标标号功能:将CX值减若(CX)值为零且ZF=则转移否则顺序执行。、不等于结果不为循环指令:LOOPNELOOPNI目标标号功能:将CX值减若(CX)值不为零且ZF=则转移否则顺序执行。、CX为零转移指令:JCXZ目标标号功能:若CX值为零则转移否则顺序执行它经常被按排在循环的开始若CX=则跳过该循环。四、中断控制指令:提供下列三种中断指令。、中断指令:INT中断类型功能:将断点地址压入堆栈并启动一个由中断类型号规定的中断过程又称为软中断。中断类型为系统设置中断、、无指令。、溢出中断指令:INTO功能:当溢出标志为时产生软件中断此指令通常在算术逻辑指令后面当溢出时进行相应的处理。、中断返回指令:IRET功能:将保存在堆栈中的断点地址弹出至CS和IP中以继续执行被中断的程序。中断返回指令必须与中断指令(INT或INTO)成对使用在中断服务程序的最后一条指令必须是IRET指令。§字符串操作指令一、字符串操作指令的特点指令系统的特色之一就是具有字符串操作指令串操作指令有以下特点:、通过加重复前缀来实现串操作这比用软件实现循环要快的多。、可以对字节串进行操作也可以对字串进行操作。、所有的串操作指令都用寄存器SI对源操作数进行间接寻址并且假定是在DS段中所有的串操作指令都用寄存器DI对目的操作数进行间接寻址并且假定是在ES段中。串操作指令是唯一的一组源操作数和目的操作数都在存储单元的指令。、串操作时地址的修改往往与方向标志DF有关当DF=时SI和DI作自动减量修改当DF=时SI和DI作自动增量修改。、在同一个段内实现字符串传送时应将数据段基址和附加段基址设置为同一数值即(DS)=(ES)仍由SI和DI分别指出源操作数和目的操作数的偏移地址。一条带重复前缀的串操作指令的执行过程往往相当于一个循环程序的运行。在每次重复之后地址指针SI和DI都会修改不过指令指针IP保持指向重复前缀(前缀本身也是一条指令)的偏移地址所以如在执行串操作指令过程中有外部中断进入那么在完成中断处理后将返回去继续执行串操作指令。字符串指令有许多参数是隐含约定的。二、字符串操作指令、重复前缀:放在串操作指令前起重复作用且不能单独使用。REP:无条件重复REPEREPZ:相等为零时重复REPNEREPNZ:不等不为零时重复、字符串传送指令:MOVSBMOVSW功能:将由SI作为地址指针的源串中的一个字节或一个字传送到由DI作为地址指针的目标串中且相应地修改SIDI的值使之指向下一个字或字节如加前缀则每传送一个元素CX自动减直到CX=为止。进行字符串传送时要注意传送方向。例:将源地址的个字节传送到目标地址单元设源地址偏移量为H目标地址偏移为H则完成这一操作的程序如下:CLDDF=地址自动递增MOVCXH串长度送CXMOVSIH源串首地址送SIMOVDIH目的串首地址送DIREPMOVSB重复传送操作CX=为止、字符串比较指令:CMPSBCMPSW功能:将由SI作为地址指针的源地址的一个字节或字减去由DI作为地址指针的目的地址的一个字节或字不送回结果但影响标志位并相应地修改SI和DI的内容指向下一元素通常CMPS前加前缀REPEREPZ用来确定两串中一个不相等的字节或字。例:试比较上例中两串是否完全相同若相同则BX置若不同则BX指向源串中第一个不相等字节的地址且该字节内容保存在AL寄存器中。CLDDF=MOVCXH(CX)=HMOVSIH(SI)=HMOVDIH(DI)=H以上为初始化REPZCMPSB串比较直到ZF=或CX=ANDCXFFHJZEQQ若为零则转移DECSIMOVBXSI第一个不相同字节地址送BXMOVALSI第一个不相同字节内容送ALJMPSTOP结束EQQ:MOVBX两串相同BX=STOP:HLT、字符串扫描指令:SCASBSCASW功能:用来从目标串中扫描出某个关键字要求待查找的关键字在指令执行前置入AX或AL中扫描的实质是将AXAL中的内容减去由DI指向的目的地址的一个字或字节不送结果只置标志位然后修改DI内容指向下一地址通常加前缀REPNEREPNZ操作进行到ZF=或CX=为止。例:在以H为首址的某个字符串中查找“$”字符若存在则将“$”字符所在地址送BX中否则BX清。CLD(DF)=MOVCXH(CX)=HMOVDIH(DI)=HMOVAL“$”送关键字REPNZSCASB重复查找ANDCXFFH判是否找到JZEERCX=未查到转移DECDICX≠查到恢复地址MOVBXDI地址送BXJMPSTOP结束EER:MOVBX未找到(BX)=STOP:HLT暂停、读字符串指令:LODSBLODSW功能:将源地址所指字或字节取到AXAL中修改SI的内容指向下一地址一般不加重复前缀常和其它指令结合起来完成复杂的串操作功能。例:在数据段中有个字组成的串要求将其中的负数相加其和放到紧接着该串的下一个顺序地址中串首地址为H。CLDMOVSIHMOVBXMOVDXMOVCXCAH以上初始化LOO:DECCXDECCXJZSTO判计数是否完成LODSW从源地址取一个字送AXMOVBXAX暂存于BXANDAXH判正负JZLOO若为正则重取下一字ADDDXBX若为负求和存于DXJMPLOO重复STO:MOVSIDX负数和写入顺序地址中HLT暂停、写字符串指令:STOSBSTOSW功能:将AXAL中的一个字或字节写入由DI作指针的目标地址修改DI内容指向下一地址若加重复前缀则可将内存某一区域初始化为同一个数值若不加重复前缀也可与其它指令一起完成较复杂的操作功能。例:使H开始的个单元清CLD(DF)=MOVDIH送目标地址MOVCXH重复次数送CXXORAXAXAX清REPSTOSW将个字节清§处理器控制类指令处理器控制指令只是完成简单的控制功能指令中不另设置地址码因此又称无地址指令。处理器控制指令按功能可分为两种一种是修改标志寄存器的标志位一类是用来使处理器与外部设备同步或实现处理器与协处理器之间的联络。大家只须掌握标志位操作指令。一、标志位操作指令、CF清指令:CLC使进位位清、CF取反指令:CMC使进位位取反、CF置指令:STC使进位位置、DF清指令:CLD使方向标志位清、DF置指令:STD使方向标志位置、IF清指令:CLI使中断标志位清、IF置指令:STI使中断标志位置在这些指令中没有直接置位和复位单步执行标志位TF的指令如果要对TF进行操作应先用PUSH指令将标志寄存器的内容压入堆栈在堆栈中设定TF位的值然后再从堆栈中弹回标志寄存器。SI位移量BP(栈顶)高地址低地址A()A()A()A(n)PAGE

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/36

8088指令系统

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利