您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 第3章-4-移位-串-转移-G
汇编语言程序设计3指令系统和寻址方式180X86的指令系统和寻址方式第三章3.3.3移位指令汇编语言程序设计3指令系统和寻址方式23.3.3移位指令移位指令算术移位指令逻辑移位指令循环移位指令其功能为将目的操作数的所有位按操作符规定的方式移动1位或按寄存器CL规定的次数(0~255)移动格式:操作符OPOPD,1或操作符OPOPD,CL目的操作数是8位(或16位)的寄存器数据或存储器数据。汇编语言程序设计3指令系统和寻址方式31.算术左移和逻辑左移指令SAL(SHL)功能:将(OPD)向左移动CL指定的次数,最低位补入相应的0,CF的内容为最后移入位的值。语句格式:SALOPD,1或SHLOPD,1SALOPD,CL或SHLOPD,CLCF0110011010CF1CF01100110例:SHLAL,1;(AL)=0B3H0汇编语言程序设计3指令系统和寻址方式4110011010CF01.算术左移和逻辑左移指令SAL(SHL)语句格式:SALOPD,CL或SHLOPD,CL110011010CF01CF00011001例2:SHLAL,CL;(CL)=3CF0原运行整体左移3位下页汇编语言程序设计3指令系统和寻址方式52.算术右移指令SAR功能:将(OPD)向右移动1次或CL指定的次数且最高位保持不变;CF的内容为最后移入位的值。语句格式:SAROPD,1或SAROPD,CL例:SHLAL,CL;(CL)=2例101011011CFCF101101110CF汇编语言程序设计3指令系统和寻址方式6【例3.43】算术右移运算MOVBH,0F4H;(BH)=0F4HMOVCL,2;(CL)=2SARBH,CL;(BH)=0FDH(CF)=0该例语句“SARBH,CL”实际上完成了(BH)/4→BH的运算,所以,用SAR指令可以实现对有符号数除2n的运算(n为移位次数)。101111110CF001011110CF汇编语言程序设计3指令系统和寻址方式73.逻辑右移指令SHR功能:将(OPD)向右移动1次或CL指定的次数,最高位补0;CF的内容为最后移入位的值语句格式:SHROPD,1或SHROPD,CL例:SHRAL,CL;(CL)=2CF101101000CF0例101011010CF0汇编语言程序设计3指令系统和寻址方式84.循环左移指令ROL语句格式:ROLOPD,1或ROLOPD,CL例:SOLAL,CL;(CL)=2例AL101011010CFCFCF011010110功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向左移动1次或CL规定的次数。CF的内容为最后移入位的值汇编语言程序设计3指令系统和寻址方式95.循环右移指令ROR语句格式:ROROPD,1或ROROPD,CLCF功能:将目的操作数的最高位与最低位连成一个环,将环中的所有位一起向右移动1次或CL规定的次数。CF的内容为最后移入位的值汇编语言程序设计3指令系统和寻址方式106.带进位的循环左移指令RCL语句格式:ROLOPD,1或ROLOPD,CL例:SCLAL,CL;(CL)=2例AL101011010CF功能:将目的操作数连同CF标志一起向左循环移动1次或CL规定的次数。CF101010110CF汇编语言程序设计3指令系统和寻址方式117.带进位的循环右移指令RCR语句格式:RCROPD,1或RCROPD,CL例:SCRAL,CL;(CL)=2例AL111011010CF功能:将目的操作数连同CF标志一起向右循环移动1次或CL规定的次数。CF101101011CF汇编语言程序设计3指令系统和寻址方式128.双精度移位指令SHLD(386及后机型用)语句格式:SHLDDST,REG,CNTSHRDDST,REG,CNT例:SHLDEBX,ECX,8CF1CF8765432181FEDCBAEBXECX移前移后0CFBA87654381FEDCBAEBXECX功能:将(DST)向左移动CNT指定的次数,低位寄存器向高位左补入相应的位,CF的内容为最后移入位的值。注:最终低位寄存器的内容不变。CF汇编语言程序设计3指令系统和寻址方式133.3.4串操作类指令数据传送类指令每次只能传送一个数据,若要传送大批数据就需要重复编程,这样就浪费了大量的时间和空间。为此80X86提供了一组处理主存中连续存放数据串的指令,这就是串操作指令。存储器XXXX…XX汇编语言程序设计3指令系统和寻址方式14流程图串操作的过程流程图CX=0?设置SI、DI、CX及DF(CX)-1→CX串传送操作(SI)±1→SI(DI)±1→DICMPS/SCANS?重复前缀?下条指令重复前缀?与ZF相同?YNNYYNYNY存储器XXXX…XXDS:SIES:DICXDF汇编语言程序设计3指令系统和寻址方式15存储器XXXX…XXDS:SIES:DICXDF即:①(DS:[SI])→ES:[DI]。②当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。011.传送指令MOVSB字节串传送/MOVSW字串传送功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。汇编语言程序设计3指令系统和寻址方式16存储器AB…FAC…FDS:SIES:DICXDF即:①([SI])-([DI])。②修改串指针,使之指向串中的下一个元素。当DF=0时,(SI)和(DI)增量。当DF=1时,(SI)和(DI)减量。012.串比较指令CMPSB字节比较/CMPSW字比较ZF=功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志ZF,但结果并不保存。汇编语言程序设计3指令系统和寻址方式17存储器AB…F…ES:DICXDF即:①字节操作:(AL)-([DI]),字操作:(AX)-([DI])。②修改指针使之指向串中的下一个元素。当DF=0时,(DI)增量。当DF=1时,(DI)减量。013.串搜索指令SCASB字节串搜索/SCASW字串搜索功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位ZF,结果不保存。ALZF=‘B’汇编语言程序设计3指令系统和寻址方式18存储器2435…65…DS:SICXDF即:①字节操作:([SI])→AL,字操作:([SI])→AX。②修改指针SI,使它指向串中的下一个元素当DF=0时,(SI)增量。当DF=1时,(SI)减量。014.串中取数指令LODSB——从字节串中取数LODSW——从字串中取数功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。AC汇编语言程序设计3指令系统和寻址方式19存储器0000……ES:DICXDF即:字节操作:(AL)→[DI],字操作:(AX)→[DI]。修改指针DI,使之指向串中的下一个元素当DF=0时,(DI)增量。当DF=1时,(DI)减量。015.往目的串中存数指令STOSSTOSB——往字节串中存数STOSW——往字串中存数功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。AC汇编语言程序设计3指令系统和寻址方式206.重复前缀指令REPREPZREPNZ(1)REPREP前缀用在MOVS、STOS、LODS指令前。存储器AB…FDS:SIES:DI15DF01功能:每执行一次串指令(CX)-1,直到(CX)=0,重复执行结束。AB…FDS:SIES:DIDS:SIDS:SICX0例:REPMOVSB汇编语言程序设计3指令系统和寻址方式216.重复前缀指令REPREPZREPNZ(2)REPZ/REPE该指令一般用在CMP、SCAS指令前存储器ABCFABEFDS:SIES:DI4DF01功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,只要(CX)≠0且ZF=1,则重复执行DS:SIES:DIDS:SIDS:SICX1例:REPZCMPSBZF=0汇编语言程序设计3指令系统和寻址方式226.重复前缀指令REPREPZREPNZ(3)REPNZ/REPNE该指令一般用在CMPS、SCAS指令前存储器COCFES:DI4DF01功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,退出条件:(CX)=0或ZF=1,否则,重复执行ES:DIDS:SICX1例:REPNZSCASB;(AL)=“C”ZF=1汇编语言程序设计3指令系统和寻址方式233.3.5控制转移指令1条件转移指令2无条件转移指令3条件设置指令3循环指令4子程序调用指令5中断指令存储器OPXXJMP15MOVXXIPCSIP汇编语言程序设计3指令系统和寻址方式241无条件转移指令JMPshortquest(8位位移)短跳JMPnearptrprog(16位位移)1).段内直接寻址(Intrasegmentdirectaddssring)转向的有效地址是当前IP寄存器中内容和指定的位移量之和,是一种相对寻址方法,可以使程序在不同的区域运行。存储器OPOPXXOPXXXXOPXXOP位移量++段寄存器IP寄存器EA汇编语言程序设计3指令系统和寻址方式251无条件转移指令2)段内间接寻址(intraindirectiveaddressing)转向的有效地址是一个寄存器或是一个存储单元的内容。这个寄存器或存储单元的内容用除立即数以外的任何一种寻址方式获得。例:JMPbxJMP[bx]CS段寄存器+IP寄存器EA寄存器①②段寄存器+寄存器EA存储器XXXXXXXXXXXXOPXXXXOP汇编语言程序设计3指令系统和寻址方式26存储器XXXXXXXXXXXXOPXXXXOPCS段寄存器+IP寄存器EA寄存器①例:JMPwordptr[bp+table]②段寄存器+寄存器EAwordptr为字操作符,用以指出其后的寻址方式所取得的转向地址是一个字的有效地址,是一个段内转移。byteptr为字节操作符,表示寻址时按字节取数据物理地址=16D*(CS)+EA汇编语言程序设计3指令系统和寻址方式27例:JMPwordptr[BX+SI+table]存储器XXXXXXXXXXXXOPXXXXOP变址值段地址基地址++段DS基址寄存器变址寄存器指令位移量CS段寄存器+IP寄存器汇编语言程序设计3指令系统和寻址方式28设:(DS)=2000H,(BX)=1256H,(SI)=528FHtable=20A1H,(232F7H)=3280H,(264E5H)=2450HJMPbx(IP)=1256hJMPtable[BX](ip)=(16D×(DS)+(BX)+位移量)=(20000H+1256H+20A1H)=(232F7H)=3280h存储器XXXXXXXXXXXXXXXX8032232F7H段寄存器20000H1256H++20A1H基址寄存位移量EAIP8032H汇编语言程序设计3指令系统和寻址方式293.段间直接寻址(Intersegmentdirectaddressing)指令中直接提供了转向段地址和偏移量。JMPfarptrnextroutinfarptr表示段间转移存储器OPXXJMP(IP)(CS2)XXXXXXXXOPXXXXCS2段寄存器+IP寄存器段地址偏移量指令中直接提供CS1段寄存器IP汇编语言程序设计3指令系统和寻址方式304).段间间接寻址(Intersegmentindexedaddressing)用存储器中的两个相继字的内容来取代IP和CS寄存器种的内容。存储器OPXXOPXXXXXXXXXXOPXXXXOPXXOPCS段寄存器+IP寄存器DS段寄存器+EAJMPDwordptr[lab+BX]其中[lab+BX]说明数据为间接寻址方式。dwordptr为双字操作符,说明转向地址需要取双字为段间转移指
本文标题:第3章-4-移位-串-转移-G
链接地址:https://www.777doc.com/doc-3788157 .html