




已阅读5页,还剩115页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章寻址方式和指令系统,3.1寻址方式3.2指令系统3.3数据传送类指令3.4算术运算类指令3.5逻辑操作类指令3.5逻辑操作类指令3.6程序控制类指令3.7串操作类指令,开始,3.1寻址方式,3.1.1立即寻址3.1.2寄存器寻址3.1.3直接寻址3.1.4寄存器间接寻址3.1.5寄存器相对变址寻址3.1.6寄存器基址加变址寻址3.1.7寄存器相对基址加变址寻址,返回本章首页,3.1寻址方式,指令中用于说明操作数地址的方法称为寻址方式。寻址就是正确获取指令中的操作数。操作数是指令或程序的主要处理对象。在8086/8088系统中,操作数可分为数据操作数和转移地址操作数两大类。1数据操作数数据操作数指与数据有关的操作数,其指令中操作的对象是数据。数据操作数包括:立即数操作数、寄存器操作数、存储器操作数和i/o操作数。2转移地址操作数这一类指令中操作的对象不是数据,而是程序要转移的目标地址。它也可以分为:立即数操作数、寄存器操作数和存储器操作数。对于双操作数指令,在操作中保持不变的一个称为源操作数,保存结果的另一个操作数称为目的操作数。,3.1.1立即寻址,立即寻址方式中,指令操作码和操作数都在存储器代码段中。汇编格式:n(n为立即操作数,是用8位或16位二进制补码表示的有符号数)功能:操作数存放在存储器,指令下一单元的内容为立即操作数n。图形表示:,【例3.1】movax,0102h执行后(ax)=?该例中源操作数为立即寻址方式,立即数为0102,存放在指令的下一单元。图形表示:,返回本节,3.1.2寄存器寻址,在指令中用寄存器的名字代替该操作数,通过引用寄存器来使用操作数的寻址方式称为寄存器寻址方式。汇编格式:r其中r表示寄存器名。功能:操作数直接存放在寄存器r中。图形表示:r指令操作数,寄存器寻址方式是比较常用的寻址方式,源和目的操作数都可以是寄存器。根据寄存器的位置,通常分为以下三种类型:1源操作数是寄存器寻址方式例如:addvar1,axaddvar2,bl其中:var1是字类型的内存变量,var2是字节类型的内存变量。2目的操作数是寄存器寻址方式例如:addbh,56haddax,0ba52h3源和目的操作数都是寄存器寻址方式例如:movax,bxmovdh,bl,【例3.2】movax,bx,其中bx=8a12h。指令执行后,(ax)=8a12h,bx保持不变。,3.1.3直接寻址,指令所要的操作数存放在存储单元中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。在这种寻址方式中,操作数通常存放在数据段中,其物理地址由数据段寄存器ds和指令中的有效地址直接形成,但如果使用段前缀,操作数也可存放在其它段汇编格式:含有变量的地址表达式。段寄存器名:ea。功能:指令下一字单元的内容是操作数的偏移地址ea。图形表示:,【例3.3】指令:movax,100h,在执行时,(ds)=4000h,内存单元40100h的值为1234h。求指令执行后寄存器ax的值?,返回本节,物理地址的计算式为:2000h(段基地址)+200h(偏移地址)=20200h(物理地址)图给出了寻址方式示意图。指令执行后的结果为:(ax)=1234h,在访问数据段时,一般默认使用的寄存器是为ds,如果要指定访问其它段内的数据,可在指令中用段前缀的方式显式地书写出来。指令movax,es:1234h就是带有段前缀的直接寻址方式。直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值,该寻址方式可在64k字节的段内进行寻址。立即寻址方式和直接寻址方式的书写格式不同,直接寻址的地址要写在括号“”,“”内。在程序中,直接地址通常用内存变量名来表示。,3.1.4寄存器间接寻址,寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址ea,操作数在存储器中。汇编格式:r功能:操作数存放在存储器,寄存器r存放操作数的偏移地址ea。,偏移地址ea计算方法如下:,ea=,sisi作间址寄存器。didi作间址寄存器。bxbx作间址寄存器。bpbp作间址寄存器。,其一、如果指令中使用的寄存器是bx、si、di,则用ds寄存器的内容作为段地址,即操作数的物理地址为:物理地址=10h(ds)+(bx、si或di三者之一)这种情况称为数据段基址间接寻址方式。其二、如果指令中用bp寄存器,则操作数的段地址在ss中,即堆栈段,所以操作数的物理地址为:物理地址=10h(ss)+(bp)这种情况称为堆栈段基址间接寻址方式。,则物理地址的计算式为:20000h(数据段地址)+1000h(偏移地址)=21000h(物理地址)。图3.4给出了寻址方式示意图。指令执行后的结果为(ax)=1234h。,【例3.4】假设有指令:movax,bx,在执行时,(ds)=2000h,(bx)=1000h,存储单元21000h的内容是1234h。求指令执行后寄存器ax的值?,返回本节,3.1.5寄存器的相对变址寻址,变址寻址方式操作数的偏移地址ea为寄存器的内容加位移量,操作数在存储器中。汇编格式:xr(x表示位移量,是8位或16位二进制补码表示的有符号数)功能:操作数存放在存储器,寄存器r的内容加位移量x为操作数的偏移地址ea。图形表示如下:,偏移地址ea计算方法如下:,与寄存器间接寻址方式类似,如果指令中使用寄存器为bx、si、di,则段寄存器用ds,则物理地址为:物理地址=16(ds)+(bx、si或di三者之一)+8位(或16位)位移量当寄存器为bp时,则使用ss段寄存器的内容作为段地址,此时物理地址为:物理地址=16(ss)+(bp)+8位(或16位)位移量。,【例3.5】假设有指令例:movax,200hsi,(ds)=2000h,(si)=1000h,存储单元21200h的值是1234h,求ax的值?,则物理地址的计算式为:20000h(段地址)+1000h(变址)+200h(位移量)=21200h图3.5给出了寻址方式示意图。指令执行的结果是(ax)=1234h,3.1.6基址加变址寻址,基址加变址寻址方式中,操作数的偏移地址ea是指令中基址寄存器内容、变址寄存器内容、位移量三项之和,操作数在存储器中。汇编格式:xbr+ir功能:操作数存放在存储器,br的内容加ir的内容加位移量x是操作数的偏移地址ea。图形表示:,操作数偏移地址ea计算方法如下,返回本节,则其物理地址的计算的形成如下:,【例3.6】指令movax,bxdi,(ds)=2000h,(bx)=1000h,(di)=3000h,求指令执行后寄存器ax的值?,物理地址的计算式为:20000h(段基地址)+1000h(基址)+3000h(变址)=24000h,指令执行后的结果为(ax)=1234h。,3.1.7相对基址加变址寻址方式,在相对基址加变址寻址方式中,寄存器bx和bp一般作为基址寄存器,寄存器si和di作为变址寄存器。把一个基址寄存器bx或bp的内容,加上变址寄存器si或di的内容,再加上给定的8位或16位位移量,并以一个段寄存器作为地址基准,作为操作数的地址。,操作数物理地址计算方法如下,相对基址加变址寻址方式有多种等价的书写方式,下面的书写格式都是正确的,并且其寻址含义也是一致的。movax,bx+si+2000hmovax,2000hbx+simovax,2000hbxsimovax,2000hsibx,【例3.7】指令movax,bp+si+123h,如果(ss)=2000h,(bp)=4200h,(si)=1200h,内存单元25523h的内容为1234h。求指令执行后寄存器ax的值?,则物理地址的计算式为:ea=4200h(基址)+1200h(变址)+123h(位移量)=5523h,20000h(段基地址)+5523h(ea)=25523h(物理地址),指令执行后的结果为(ax)=1234h。,3.28086cpu的指令系统的基本指令,一、汇编语言指令格式指令通常是由操作码和操作数组成,其一般格式如下:操作码操作数其中,操作码告诉计算机指令执行何种操作;操作数告诉计算机参加该操作的数据的来源和目的。根据指令的不同,操作数的个数可以是:0、1、2、3个不等,称之为无操作数指令,单操作数指令,双操作数指令和三操作数指令。在8086微处理器的指令系统中操作数最多只能有2个(即双操作数指令);,8086cpu的指令的共同的规律,l大多数数据传送类指令、算术运算类指令、位操作类指令及串操作类指令,其双操作数指令有相同的语句格式和操作规定。语句格式:标号:操作符opd,ops;注释l算术运算和位操作类指令的部分单操作数指令有相同的语句格式和操作规定。语句格式:标号:操作符opd;注释,包括数据传送类指令、算术运算类指令、位操作类指令、串操作类指令、控制转移类指令、处理机控制类指令。后几节将分别介绍这些指令的语句格式和功能。,3.3数据传送类指令,3.3.1通用数据传送指令3.3.2堆栈操作指令3.3.3标志寄存器传送指令3.3.4地址传送指令3.3.5输入输出指令,返回本章首页,3.3.1通用数据传送指令,1传送指令mov2数据交换指令xchg3查表转换指令xlat,1传送指令mov语句格式:movopd,ops功能:将源操作数传送入目的地址,源地址内容不变。即(ops)opd。下图2.1描述了mov指令在传送数据时允许传送的路径及类型。,图2.1mov指令所允许的数据传送路径及类型,1.寄存器与寄存器之间的数据传送指令movax,bxmovcl,almovdx,esmovds,axmovbp,simovbx,cs代码段寄存器cs不能为目的操作数,即禁止给段寄存器cs赋值。如指令movcs,bx是不正确,但可作为源操作数,如指令movbx,cs是正确的。两个操作数不能同时为段寄存器,如moves,ds也是不正确的。,2.立即数到通用寄存器的数据传送指令moval,5bhmovbx,0504hmovch,0ahmovsp,4200hmovbx,-100hmovcx,2000h在指令中使用立即数时,立即数只能作为源操作数使用,不能作为目的操作数使用,如:mov100h,ax是错误的。立即数也不能直接传值给段寄存器,如movds,100h也是不正确的。,3.寄存器与存储器之间的数据传送指令moval,var1movax,var2movbl,4000hmovdi,dlmovax,bx+simovbx+di+200h,cl上面指令中的var1是字节类型变量,var2是字类型变量,都代表数据存储单元的符号地址。存储器与存储器之间不能进行数据之间传送。若要实现存储单元之间的数据传送,可以借助于寄存器作为中介来进行。,4.立即数到存储器的数据传送movvar1,20hmovvar1,1234hmovbyteptrsi,6ah存储器变量的类型可以在数据定义时指定,也可以在指令中另行指定,应保证其与立即数的类型一致。,3查表转换指令xla,语句格式:xlatops或xlat功能:将(bx)为首址(al)为位移量的字节存储单元中的数据送al寄存器。即(bx+al)al。,返回本节,3.3.2堆栈操作指令,1进栈指令push2出栈指令pop,堆栈是一种先进后出的数据结构,即最后进栈的元素将被最先出栈。数据进入堆栈称为压栈,数据退出堆栈称为出栈。堆栈从栈低开始存储数据,最后入栈的元素称为栈顶元素。在8086/8088计算机中,堆栈一般是内存中从(ss)16+0000h存储单元处开始设置,最大长度为64kb的一块存储区域。用寄存器sp作为堆栈指针,指向栈顶元素,由sp的值就可以知道栈顶元素的位置。,1进栈指令push,语句格式:pushops是16位的操作数,可以是寄存器或存储器操作数。push指令的操作过程为:(sp)(sp)-2,(sp)(ops)。即先修改堆栈指针sp(入栈时sp自动减2),再将指定的操作数送入新的栈顶位置。(sp)opd,相当于:(ss)10h+(sp)opd。,2出栈指令pop,语句格式:popopd功能:将栈顶元素弹出送至某一寄存器、段寄存器(除cs外)或存储器,堆栈指针加2。opd(sp),(sp)(sp)+2。与入栈指令的操作相反,是先弹出栈顶的数据,然后再修改指针sp的内容。,返回本节,3.3数据交换指令xchg,语句格式:xchgopd,ops功能:将源地址与目的地址中的内容互换。即(opd)ops,(ops)opd。数据传送指令单方向地将源操作数送至目的操作数存储单元,而数据交换指令则将两个操作数相互交换位置。寄存器不能是段寄存器,两个操作数也不能同时为内存变量。xchg指令不影响状态标志位,段寄存器内容不能用xchg指令来交换。【例2.9】寄存器与存储器之间数据交换。movax,5678h;(ax)=5678hmovbx,0ffffh;(bx)=0ffffhxchgax,bx;(ax)=0ffffh,(bx)=5678h,3.3.4标志位操作指令,标志位操作指令是一组对标志位进行读取、设置等操作的指令,这一指令都没有操作数。1进位cf操作指令指令各式如下:clcstccmc指令clc的作用是将进位cf置0,指令ctc将进位cf置1,指令cmc将进位cf取反。,1标志送ah指令lahf,语句格式:lahf功能:将标志寄存器的低8位送入ah寄存器。即(flags)7-0ah。该指令的执行对标志位无影响。【例2.13】标志寄存器传送。执行前:(flags)=0485h,(ax)=0ffffh执行指令:lahf,2方向位df操作指令指令各式如下:cldstd指令cld的作用是将方向位df置0,指令ctd将df置1。3中断允许位if操作指令指令各式如下:clisti指令cld的作用是将中断允许位if置0,指令ctd是将if置1,4取标志位操作指令指令各式如下:lahfsahf指令lahf是取标志寄存器低8位至ah,并不影响标志寄存器的原来内容,ah只是复制了标志寄存器的低8位的内容。指令sahf将ah存至标志寄存器的低8位,即用ah的内容改写flag中的sf、zf、af、pf和cf标志位,从而改变原来的标志位。,5标志位堆栈操作指令指令各式如下:pushfpopf指令pushf把16位标志寄存器进栈,相反,指令popf将16位标志寄存器出栈。,返回本节,3.3.5地址传送指令,1传送偏移地址指令lea2传送偏移地址及数据段首址指令lds3传送偏移地址及附加数据段指令les,1传送偏移地址指令lea,语句格式:leaopd,ops功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。【例2.15】主存偏移地址的获取。movbx,0100h;(bx)=0100hmovsi,0210h;(si)=0210hleabx,1234bx+si;(bx)=1544h,2传送偏移地址及数据段首址指令lds,语句格式:ldsopd,ops功能:将主存中指定字单元数据送入指定存储器,下一字单元数据送ds寄存器。,3传送偏移地址及附加数据段指令les,语句格式:lesopd,ops功能:将主存某字单元内容送指定寄存器。即(ops)opd,(ops+2)es。,返回本节,3.4算术运算类指令,3.4.1加法指令3.4.2减运算指令3.4.3乘运算指令3.4.4除运算指令3.4.5符号扩展指令3.4.6十进制调整指令,返回本章首页,3.4.1加法指令,1加1指令inc2加指令add3带进位加指令adc,1加1指令inc语句格式:incopd功能:将目的操作数加1,结果送目的地址。即(opd)+1opd。inc指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:incbx,即(bx)+1bx。加1指令可用于对计数器和地址指针进行调整。,2加指令add语句格式:addopd,ops功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。即(opd)+(ops)opd。,3带进位加指令adc语句格式:adcopd,ops功能:将目的操作数加源操作数再加低位进位,结果送目的地址。即(opd)+(ops)+cfopd。【例3.8】无符号双字加法运算。movax,4652h;(ax)=4652haddax,0f0f0h;(ax)=3742h,cf=1movdx,0234h;(dx)=0234hadcdx,0f0f0h;(dx)=0f325h,cf=0,返回本节,3.4.2减运算指令,1减1指令dec2减指令sub3求补指令neg4带借位减指令sbb5比较指令cmp,1减1指令dec语句格式:decopd功能:将目的操作数减1,结果送目的地址。即(opd)1opd。dec指令是一个单操作数指令,操作数可以是寄存器或存储器操作数。如:deccx。即(cx)1cx。减1指令dec也一般用于对计数器和地址指针的调整。,2减指令sub语句格式:subopd,ops功能:目的操作数减源操作数,结果存于目的地址,源地址内容不变。即(opd)(ops)opd【例3.9】减法运算。movax,5678h;(ax)=5678hsubax,1234h;(ax)=4444hmovbx,3354h;(bx)=3354hsubbx,3340h;(bx)=0014h,3求补指令neg语句格式:negopd功能:将目的操作数的每一位求反(包括符号位)后加1,结果送目的地址。即(opd)+1opd。【例】求补运算。movax,0ff64hnegal;(ax)=0ff9chsubal,9dh;(ax)=0ffffhnegax;(ax)=0001hdecal;(ax)=0000hnegax;(ax)=0000h,4带借位减指令sbb语句格式:sbbopd,ops功能:目的操作数减源操作数再减低位借位cf,结果送目的地址。即(opd)(ops)cfopd,5比较指令cmp,语句格式:cmpopd,ops功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。即(opd)(ops)。【例】比较al的内容数值大小。cmpal,50;(al)50jbbelow;(al)=50,(al)50alincah;(ah)+1ahbelow:,返回本节,3.4.3乘运算指令,1无符号数乘法指令mul2有符号乘指令imul,乘法指令的被乘数都是隐含操作数,乘数在指令中必须显式地写出。cpu会根据乘数是8位、16位,还是32位操作数,来自动选用被乘数:al、ax或eax。,1无符号数乘法指令mul,语句格式:mulops功能:若是字节数据相乘,(al)与ops相乘得到字数据存入ax中;若是字数据相乘,则(ax)与ops相乘得到双字数据,高字存入dx、低字存入ax中。即字节乘法:(al)*(ops)ax,字乘法:(ax)*(ops)dx,ax【例2.25】无符号数0a3h与11h相乘。moval,0a3h;(al)=0a3hmovbl,11h;(bl)=11hmulbl;(ax)=0ad3h,2有符号乘指令imul,语句格式:imulops功能:字节乘法:(al)*(ops)ax,字乘法:(ax)*(ops)dx、ax。imul指令除计算对象是带符号二进制数外,其他都与mul一样,但计算结果不同。【例3.11】有符号数0b4h与11h相乘。moval,0b4h;(al)=b4hmovbl,11h;(bl)=11himulbl;(ax)=0faf4h,返回本节,3.4.4除运算指令,1无符号除指令div2有符号除指令idiv,除法指令的被除数是隐含操作数,除数在指令中必须显式地写出。cpu会根据除数是8位、16位,或32位,来自动选用被除数ax、dx-ax,还是edx-eax。,1无符号除指令div语句格式:divops功能:字节除法:(ax)/(ops)al(商)、ah(余数)字除法:(dx、ax)/(ops)ax(商)、dx(余数)【例3.12】写出实现无符号数0400h/0b4h运算的程序段。movax,0400h;(ax)=0400hmovbl,0b4h;(bl)=0b4hdivbl;商(al)=05h,余数(ah)=7ch,2有符号除指令idiv语句格式:idivops功能:字节除法:(ax)/(ops)al(商)、ah(余数)字除法:(dx,ax)/(ops)ax(商)、dx(余数)除法指令div和idiv虽然对标志的影响未定义,但可产生溢出。【例3.13】写出实现有符号数0400h/0b4h运算的程序段。movax,0400h;(ax)=0400hmovbx,0b4h;(bx)=0b4hidivbx;(al)=0f3h,(ah)=24h,返回本节,3.4.5符号扩展指令,1字节转换成字指令cbw2将字转换成双字指令cwd,1字节转换成字指令cbw语句格式:cbw功能:将al中的符号位数据扩展至ah。【例3.14】将字节数据扩展成字数据。moval,0a5h;(al)=0a5hcbw;(ax)=0ffa5haddal,70h;(al)=25hcbw;(ax)=0025h,2将字转换成双字指令cwd语句格式:cwd功能:将ax中的符号位数据扩展至dx。【例3.15】将字数据扩展成双字数据。movdx,0;(dx)=0movax,0ffabh;(ax)=0ffabhcwd;(dx)=0ffffh(ax)=0ffabh,返回本节,3.4.6十进制调整指令,1压缩bcd码调整指令2非压缩bcd码调整指令,(1)加法的十进制调整指令daa,语句格式:daa功能:如果al寄存器中低4位大于9或辅助进位(af)=1,则(al)=(al)+6且(af)=1;如果(al)=0a0h或(cf)=1,则(al)=(al)+60h且(cf)=1。同时,sf、zf、pf均有影响。【例3.16】压缩bcd码的加法运算。moval,68h;(al)=68h,表示压缩bcd码68movbl,28h;(bl)=28h,表示压缩bcd码28addal,bl;二进制加法:(al)=68h+28h=90hdaa;十进制调整:(al)=96h;实现压缩bcd码加法:68+28=96,(2)减法的十进制调整指令das,语句格式:das功能:如果(af)=1或al寄存器中低4位大于9,则(al)=(al)6且(af)=1;如果(al)=0a0h或(cf)=1,则(al)=(al)60h且(cf)=1。同时sf、zf、pf均受影响。【例3.17】压缩bcd码的减法运算。moval,68h;(al)=68h,表示压缩bcd码68movbl,28h;(bl)=28h,表示压缩bcd码28subal,bl;二进制减法:(al)=68h28h=40hdas;十进制调整:(al)=40h;实现压缩bcd码减法:6828=40,2非压缩bcd码调整指令,(1)加法的非压缩bcd码调整指令aaa(2)减法的非压缩bcd码调整指令aas(3)乘法的非压缩bcd码调整指令aam(4)除法的非压缩bcd码调整指令aad,(1)加法的非压缩bcd码调整指令aaa语句格式:aaa功能:如果al的低4位大于9或(af)=1,则:(al)=(al)+6(ah)=(ah)+1(af)=(cf)=1且al高4位清零。否则:(cf)=(af)=0al高4位清零。,(2)减法的非压缩bcd码调整指令aas语句格式:aas功能:如果al的低4位大于9或(af)=1,则:(al)=(al)6(ah)=(ah)1(af)=(cf)=1al高4位清零。否则:(cf)=(af)=0al高4位清零。其他标志位of、pf、sf、zf不确定。,(3)乘法的非压缩bcd码调整指令aam语句格式:aam功能:被调整的乘积在ax中,对al按10取模,则:(al)0ahah(商):al(余数)其中ah为商,al为余数,标志位af、cf、of、pf、sf、zf受影响。,(4)除法的非压缩bcd码调整指令aad语句格式:aad功能:除法运算前,先调整被除数ax内容,使:(al)=(al)+(ah)*0ah(ah)=0即把非压缩型十进制数变成二进制数。,返回本节,3.5位操作类指令,3.5.1逻辑运算指令3.5.2移位指令,返回本章首页,3.5.1逻辑运算指令,1逻辑与指令and2逻辑或指令or3求反指令not4按位异或指令xor5测试指令test,1逻辑与指令and指令格式:andopd,ops功能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“与操作”,操作结果存入目标操作数中。该指令影响标志位pf、sf、zf,并使cf=0、of=0。【例3.17】将al中第3位和第7位清零。moval,0ffhandal,77h本指令主要用于修改操作数或置某些位为零。,2逻辑或运算指令or指令格式:oropd,ops功能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑或操作,操作结果存入目标操作数中。【例3.18】将al寄存器中第3位和第7位置1。moval,0oral,88h本指令可以进行字节或字的“或”运算。,3逻辑非运算指令not指令格式:notopd功能:完成对操作数的按位求反运算,结果送回给原操作数,本指令可以进行字节或字的“非”运算,不影响标志位。【例3.19】逻辑非运算。movax,878ah;(ax)=878ahnotax,;(ax)=7875h,4逻辑异或运算指令xor指令格式:xoropd,ops功能:实现两个操作数按位“异或”的运算,结果送至目的操作数中。它可以进行字节或字的“异或”运算。即(opd)(ops)opd。【例3.20】按位加运算。moval,45h;(al)=45hxoral,31h;(al)=74h,5测试指令test指令格式:testoprd1,oprd2功能:对两个操作数进行按位的“与”运算,不将结果送目的操作数,即该指令对两个操作数的内容均不进行修改,仅是在逻辑“与”操作后,对标志位zf重新置位。即(opd)(ops)。【例3.21】测试ax中的第12位是否为0,不为0则转l。testax,1000hjnel,返回本节,3.5.2移位指令,移位指令包括算术移位指令、逻辑移位指令和循环移位指令,分别进行左移和右移操作。这些指令均有统一的语句格式:标号:操作符opd,1或标号:操作符opd,cl其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器cl规定的次数(0255)移动,结果送入目的地址。目的操作数是8位(或16位)的寄存器数据或存储器数据。,1算术左移和逻辑左移指令sal(shl)语句格式:salopd,1或shlopd,1salopd,cl或shlopd,cl功能:将(opd)向左移动cl指定的次数,最低位补入相应的,的内容为最后移入位的值。,2算术右移指令sar语句格式:saropd,1或saropd,clcf功能:将(opd)向右移动cl指定的次数且最高位保持不变;cf的内容为最后移入位的值。,【例3.22】算术右移运算。movbh,0f4h;(bh)=0f4hmovcl,2;(cl)=2sarbh,cl;(bh)=0fdh,(cf)=0该例语句“sarbh,cl”实际上完成了(bh)bh的运算,所以,用sar指令可以实现对有符号数除2n的运算(n为移位次数)。,3逻辑右移指令shr语句格式:shropd,1或shropd,cl功能:将(opd)向右移动cl规定的次数,最高位补入相应个数的,cf的内容为最后移入位的值。,4循环左移指令rol语句格式:rolopd,1或rollpd,cl功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动cl规定的次数。cf的内容为最后移入位的值。,5循环右移指令ror语句格式:roropd,1或roropd,cl功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动cl规定的次数,cf的内容为最后移入位的值。,6带进位的循环左移指令rcl语句格式:rclopd,1或rclopd,cl功能:将目的操作数连同cf标志一起向左循环移动cl规定的次数。,7带进位的循环右移指令rcr语句格式:rcropd,1或rcrod,cl功能:将目的操作数连同cf标志一起向右循环移动所规定的次数。,返回本节,3.6控制转移类指令,2.6.1无条件转移指令2.6.2条件转移指令2.6.3循环指令2.6.4子程序调用指令2.6.5中断指令,返回本章首页,3.6.1无条件转移指令,表2.4无条件转移指令的语句格式及功能,返回本节,3.6.2条件转移指令,1简单条件转移指令2无符号数条件转移指令3.有符号数条件转移指令它们都有通用的语句格式和功能。语句格式:标号:操作符短标号功能:如果条件满足,则(ip)位移量ip。,1简单条件转移指令,2无符号数条件转移指令,表2.2无符号数条件转移指令,【例3.23】比较无符号数大小,将较大的数存放ax寄存器。cmpax,bx;(ax)(bx)jnbnext;若ax=bx,转移到nextxchgax,bx;若ax=bx,转移到nextxchgax,bx;若axbx,交换next:,返回本节,3.6.3循环指令,1循环指令loop2相等/为零循环指令loope3不相等/不为零循环指令loopne4cx为零转移指令jcxz,1循环指令loop语句格式:loop短标号功能:(cx)10,则程序转移(循环);否则,顺序执行。说明:使用loop指令可代替两条指令:deccxjne短标号,2相等/为零循环指令loope语句格式:loope短标号loopz短标号功能:(cx)10且zf=1,则程序转移(循环);否则,顺序执行。,3不相等/不为零循环指令loopne语句格式:loopne短标号loopnz短标号功能:(cx)10,则程序转移(循环);否则,顺序执行。,4cx为零转移指令jcxz语句格式:jcxz短标号功能:(cx)10,则程序转移(循环);否则,顺序执行。,返回本节,3.7串操作类指令,串操作指令:数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此8086提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。,返回本章首页,利用字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针ds:si或es:di来指定的。字符串操作指令可对内存单元按字节或字进行处理,并能根据操作对象的字节数使变址寄存器si(和di)增减1或2。具体规定如下:1)当df=0时,变址寄存器si(和di)增加1或2;2)当df=1时,变址寄存器si(和di)减少1或2;注:在串操作指令中,目的串的段基址在es寄存器中。df的设定需要两条指令:1)cld指令的功能:df=02)std指令的功能:df=1,1传送指令movs语句格式:movsb字节串传送movsw字串传送功能:将以si为指针的源串中的一个字节(或字)存储单元中的数据传送至以di为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。即:(ds:si)es:di。当df=0时,(si)和(di)增量。当df=1时,(si)和(di)减量。,2串比较指令cmps语句格式:cmpsb字节串比较cmpsw字串比较功能:将si所指的源串中的一个字节(或字)存储单元中的数据与di所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,但结果并不保存。即:(si)(di)。修改串指针,使之指向串中的下一个元素。当df=0时,(si)和(di)增量。当df=1时,(si)和(di)减量。,3串搜索指令scas语句格式:scasb字节串搜索scasw字串搜索功能:al(字节)或ax(字)中的内容与di所指的目
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省蠡县2025年上半年公开招聘城市协管员试题含答案分析
- 河北省广宗县2025年上半年公开招聘村务工作者试题含答案分析
- 2025年地震监测测绘合同书模板
- 2025版食堂承包合同补充协议范本(含节假日特殊服务)
- 2025版事业单位教职工合同制聘用规范范本
- 2025年度生态旅游用地地基买卖合同范本
- 2025年度成都二手房交易税费计算及缴纳指导合同
- 2025年度电子劳动合同智能语音服务合同
- 2025年度城市绿化养护与植物保护合同范本
- 2025房地产剩余价值抵押与养老产业投资合同
- 迷彩九月+启航青春+课件-2025-2026学年高一上学期开学军训动员主题班会
- 2025年暑期教师研修心得-研修蓄力笃行致远
- 2024年陕西事业单位联考A类综合应用能力试题及答案
- 公共基础知识试题(附答案)
- 人教版物理九年级全一册16.1《电压》听评课记录
- TCCEAS001-2022建设项目工程总承包计价规范
- 大学普通化学-课件文档
- 《只有一个地球》说课课件课件
- 200T钻具点压校直机技术方案
- 挡土墙计算书(共19页)
- 供配电技术实验指导书(09318)
评论
0/150
提交评论