版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.4.2算术运算指令(Arithmetic)
算术运算指令内容:
8086/8088提供加、减、乘、除等六种基本算术操作(一)加法指令(Addition)(二)减法指令(Subtraction)(三)乘法指令(Multiplication)(四)除法指令(Division)(五)符号扩展指令(六)十进制调整指令特点:
大部分都影响标志位,不同指令影响不同:(1)加、减法指令影响SF,ZF,AF,PF,CF,OF;(2)加1和减1指令不影响CF;(3)乘法指令影响CF,OF;(4)除法指令使大部分标志位的状态不确定;(5)对BCD码调整指令对标志位的影响不同;(6)转换指令对标志位无影响
都可以用于字节、字的运算;
双操作数指令除源为立即数外,其余必须有一个操作数 为寄存器;单操作数指令不能为立即数。
8086具有5种加法操作指令:1、ADD(Addition)加法指令2、ADC(Addwithcarry)带进位加法指令3、INC(Incrementby1)加1指令
4、AAA(ASCIIadjustforaddition)加法ASCII调整指令5、DAA(Decimaladjustforaddition)加法十进制调整指令
(一)加法指令(
Addition)指令格式:ADDdst,src;(dst)
(dst)+(src)
Src:立即数,寄存器,存储器。
dst:寄存器,存储器。例:
ADDCL,10 ;寄存器+立即数
ADDDX,SI ;寄存器+寄存器
ADDAX,MEM ;寄存器+存储器
ADDDATA[BX],AL ;存储器+寄存器
ADDBYTEPTRALPHA[DI],30H;存储器+立即数1、ADD(Addition)加法指令格式:ADCdst,src;(dst)←(dst)+(src)+CF
CF:
进位标志CF的现行值(上条指令CF值)特点:与ADD同。用途:主要用于多字节运算中。例:
ADCCX,300 ;寄存器+立即数+CF ADCAL,BL ;寄存器+寄存器+CF ADCDX,COUNT[SI] ;寄存器+存储器+CF ADCBLOCK[DI],BX ;存储器+寄存器+CFADCBYTEPTRMEM,6 ;存储器+立即数+CF2、ADC(Addwithcarry)带进位加法指令应用举例:计算两个多字节数相加3B74AC60F8H+20D59E36C1H=?两个多字节数存放在:DATA1,DATA2开始的单元。流程图多字节数内存存放程序:
MOVCX,5 MOVSI,0 ;清SI
CLC
;清CFLOOPER: MOVAL,DATA2[SI]
ADCDATA1[SI],AL INCSI ;(SI)+1
(SI) DECCX ;(CX)-1(CX) JNZLOOPER ;(CX)0转
HLT ;停机特点:
可以进行8位、16位的无符号数和带符号数的加法运算;
源操作数和目标操作数不能同时为存储器,不能为段寄存器;
指令影响标志位的情况:
OF=1, 8位带符号数相加,和超出范围(-128~+127),16位带符号数相加,和超出范围(-32768~+32767);CF=1,8位无符号数相加,和超过255,16位无符号数相加,和超过65535。其他条件标志(SF,AF,PF,ZF)根据定义设定。例:
MOVAL,7EH ;(AL)=7EH MOVBL,5BH ;(BL)=5BH ADDAL,BL ;(AL)=7EH+5BH=D9H影响标志位的情况:
SF=1 ,结果最高位=1
ZF=0 ,结果不等于0
AF=1 ,D3位向D4有进位
PF=0 ,”1”的个数为奇数
CF=0 ,无进位
OF=1 ,和超过+127
(两个正数相加,结果为负;反之亦是)分析两标志位(1) 什么是溢出标志?什么是进位标志?(2) 有进位就有溢出,没有进位就没有溢出?问题思考:(1)解答:
溢出标志OF------通常反映带符号数的补码溢出。补码运算能表示范围为:-2n-1~+2n-1–1,如果运算结果超出该范围,叫补码溢出,此时OF=1,故用OF标志判断带符号数运算是否超范围(结果溢出)。
进位标志CF------反映运算结果的最高位向更高位的进位。有进位,CF=1;无进位,CF=0,用CF标志判断无符号数运算是否超范围(结果溢出)。(2)有进位就有溢出,没有进位就没有溢出?
结论:有进位不一定有溢出,没有进位不一定没有溢出。以8位二进制数为例分析一下数的溢出与进位情况:下面分4种情况加以讨论:(1) 带符号数和无符号数都不溢出(2) 无符号数溢出(3) 带符号数溢出(4) 带符号数和无符号数都溢出(1) 带符号数和无符号数都不溢出。(2) 无符号数溢出二进制数看作无符号数看作带符号数0000011111111011+000000107251+258+7-5++2相加标志CF=1,OF=0CF=1OF=0溢出无符号数溢出溢出结果应为2,错不溢出异号数相加不可能有溢出CF=1(3) 带符号数溢出(4) 带符号数和无符号数都溢出(1)带符号数相加是否溢出根据OF=1?判断。对于字节运算:OF=C6’
C7’同符号数相加,异号数相减可能产生溢出;(2)无符号数相加是否溢出根据CF=1?判断。(3)对标志的解释,取决于程序员。如带符号数只关心OF、SF;无符号数只关心CF,而OF、SF无意义。结论:格式:INC dst ;(B/W),(dst)←(dst)+1
dst:寄存器、存储器。不能是段寄存器。功能:对指定的目标操作数+1
操作数单元。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响SF,ZF,AF,PF,OF。
不影响CF。3、INC(Incrementby1)加1指令操作数类型:可以是寄存器,存储器,不能是段寄存器。例:
INCDL ;8位寄存器+1
INCSI ;16位寄存器+1
INCBYTEPTR[BX][SI];存储器+1(字节操作)
INCWORDPTR[DI] ;存储器+1(字操作)
INCDS ;错8086有7条减法指令:1、SUB(Subtraction)减法指令2、SBB(Subtractionwithborrow)带借位减法指令
3、DEC(Decrementby1)减1指令4、NEG(Negate)取负(求补)指令5、CMP(Compare)比较指令6、AAS(ASCIIadjustforsubtraction)减法ASCII调整指令7、DAS(Decimaladjustforsubtraction)减法十进制调整指令(二)减法指令(Subtraction)格式:SUBdst,src;(dst)←(dst)-(src)
Src:立即数,寄存器,存储器。
dst:寄存器,存储器。例:
SUBAL,37H ;寄存器-立即数
SUBBX,DX ;寄存器-寄存器
SUBCX,VAR1 ;寄存器-存储器
SUBARRAY[SI],AX ;存储器-寄存器SUBWORDPTR[BX][DI],512H;存储器减立即数这种指令影响标志位:AF、CF、OF、PF、SF、ZF标志。CF=1,无符号数小减大,运算结果溢出;OF=1,带符号数运算溢出。1、SUB(Subtraction)减法指令格式::SBBdst,src;(dst)←(dst)-(src)-CF CF:借位标志CF的现行值(上条指令CF值)
Src:立即数,寄存器,存储器;
dst:寄存器,存储器。指令影响标志位、B/W数运算情况同SUB。用途:用于多字节数相减。例:
SBBBX,100H ;寄存器-立即数-CF SBBCX,DX ;寄存器-寄存器-CF SBBAL,DATA1[SI] ;寄存器-存储器-CF SBBDISP[BP],BL ;存储器-寄存器-CFSBBBYTEPTRALPHA[SI+6],96H;存储器-立即数-CF2、SBB(Subtractionwithborrow)带借位减法指令格式:DECdst ;(B/W) (dst)←(dst)-1
dst:寄存器 、存储器。不能是段寄存器。功能:对指定的目标操作数-1
操作数单元。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响SF,ZF,AF,PF,OF。
不影响CF。3、DEC(Decrementby1)减1指令DEC用途举例: …
MOVAX,0FFFFH CYC:DECAX JNZCYC HLT …用于延时时间。格式:NEGdst;B/W,(dst)←0-(dst)
dst:寄存器 、存储器。操作:把操作数按位求反后末位+1。(dst)←0FFFFH-(dst)+1影响标志:AF、CF、OF、PF、SF、ZF。CF: 操作数为0时求补,CF=0;其他情况均使CF=1.OF:对-128或-32768求补,OF=1;否则OF=0.4、NEG(Negate)
取负(求补)指令应用举例:求绝对值在内存中,从AREA1开始存放100个带符号数。求各数的绝对值存于AREA2的开始单元。流程图程序:
LEASI,AREA1 LEADI,AREA2 MOVCX,100CHECK:MOVAL,[SI] ORAL,AL;(AL)内容不变,置标志
JNSNEXT ;SF=0转NEXT
NEGAL
;负数求补
NEXT:MOV[DI],AL;送目标
INCSI INCDI DECCX JNZCHECK HLT格式:CMPdst,src ;B/W(dst)-(src)
结果不回送,只置标志。影响标志:AF、CF、OF、PF、SF、ZF。
src: 立即数,寄存器,存储器。
dst:寄存器,存储器。例: CMPAL,0AH ;寄存器与立即数比较
CMPCX,DI ;寄存器与寄存器比较
CMPAX,AREA1 ;寄存器与存储器比较
CMP[BX+5],SI ;存储器与寄存器比较CMPWORDPTRAMMA,100H;存储器与立即数比较5、CMP(Compare)比较指令用途:用比较指令来比较两个数之间的关系: 两者是否相等,两个数中哪个大。(1)根据ZF标志,判断两者是否相等;(2) 根据CF标志,判断两个无符号数的大小;(3) 用SF、OF标志,判断二个带符号数的大小。
(1)根据ZF标志,可判断两者是否相等例:CMPAX,BX
ZF=1,(AX)=(BX),两者相等
ZF=0,(AX)=(BX),两者不相等(2) 根据CF标志,判断两个无符号数的大小例:比较AX,BX寄存器,将大数
(AX)
CMPAX,BX JNCNEXT;CF=0转NEXT XCHGAX,BXNEXT:……结论:CF=0,(AX)>(BX);CF=1,(AX)<(BX)(3) 用SF、OF标志,判断二个带符号数的大小(分析略)(三)乘法指令(Multiplication)
可对字节、字进行操作;两个8位数相乘,结果为16位数,两个16位数相乘,结果为32位数;可对无符号整数或有符号整数进行操作;对应有两条乘法指令。1、MUL(Multiply)无符号数乘法指令格式:MULsrc;字节操作(AX)←(AL)×(src)
;字操作(DX),(AX)←(AX)×(src)
2、IMUL(IntegerMultiply)整数乘法指令格式:IMULsrc;执行的操作同MUL,只是处理的数据是带符号的。例:MUL CLIMUL DLMUL BYTEPTR[BX]IMUL NUMR 说明:1、被乘数(即dst)隐含在AL或AX中,乘数(即src)由指令寻址,其寻址方式可以是除立即寻址方式之外的任何数据寻址方式,同时,它也决定了乘法是字运算还是字节运算。2、乘法指令对除CF和OF以外的标志位无定义(即状态不定),如果乘积的高一半为0(或为符号位),则CF和OF均为0,否则均为1。(四)除法指令(Division)除法与乘法指令一样可对字节、字进行操作;但字节除法是用16位数除以8位数,字除法是用32位数除以16位数。可对无符号整数或有符号整数进行操作;对应有两条除法指令。1、DIV(Division)无符号数除法指令格式:DIVsrc;字节操作(AL)←(AX)/(src)的商(AH)←(AX)/(src)的余数
;字操作(AX)←(DX,AX)/(src)的商(DX)←(DX,AX)/(src)的余数2、IDIV(IntegerDivision)整数除法指令格式:IDIVsrc;执行的操作同DIV,只是处理的数据是带符号的,商和余数均为有符号数,余数符号同被除数符号。例:DIV CLIDIV DLDIV BYTEPTR[BP]IDIV WORDPTR[BX] 说明:1、被除数(即dst)隐含在AX
或(DX,AX)中,除数(即src)由指令寻址,其寻址方式可以是除立即寻址方式之外的任何数据寻址方式,同时,它也决定了除法是字运算还是字节运算。2、除法指令对所有标志位无定义(即状态不定)。3、执行除法指令时如果产生商溢出,微处理器就会产生除法错中断。(五)符号扩展指令功能:将带符号的字节类型(8位)数据扩展为字类型(16位);将带符号的字类型(16位)数据扩展为双字类型(32位)。1、CBW(ConvertBytetoWord)字节转换为字指令格式:CBW;将(AL)的符号扩展到(AH)中去。0••••••00AHALD7D0D7D0正数1••••••11AHALD7D0D7D0负数*指令执行后不影响标志位2、CWD(ConvertWordtoDoubleWord)字转换为双字指令格式:CWD;将(AX)的符号扩展到(DX)中去。0••••••00DXAXD15D0D15D0正数1••••••11DXAXD15D0D15D0负数*指令执行后不影响标志位例:
使NUMB2字节存储单元的内容除以NUMB1字节存储单元的内容,将商存于ANSQ字节单元中,余数存于ANSR字节单元中。
MOVAL,NUMB2 CBW IDIVNUMB1 MOVANSQ,AL;商 MOVANSR,AH;余数1、AND(Logicaland)逻辑“与”指令2、TEST(Testornon-dstructivelogicaland)测试指令3、OR(Logicalinclusiveor)逻辑“或”指令4、XOR(Logicalexclusiveor)逻辑“异或”指令5、NOT(Logicalnot)逻辑“非”指令特点:8086可以对8位,或16位操作数执行逻辑操作。逻辑运算是按位操作的。影响标志位:(NOT指令除外,其他指令同)
CF=OF=0,AF未定义,SFZFPF(根据运算结果设置)
↕↕↕3.4.3逻辑运算和移位指令
(一)逻辑运算指令格式:ANDdst,src;B/W,(dst)
(dst)∧(src)
src:立即数、寄存器、存储器。
dst:寄存器、存储器。注意:“与”指令中操作数不能同时为存储器。两位中有一位为0(或二位都为0),则结果为0,否则为1。举例:
ANDAL,0FH;寄存器∧
立即数
ANDCX,DI;寄存器∧寄存器
ANDSI,MEM_NAME;寄存器∧存储器
ANDALPHA[DI],AX;存储器∧寄存器
ANDwordptr[BX][SI],0FFFEH;存储器∧立即数1、AND(Logicaland)逻辑“与”指令“与”指令的用途:(1) 清CF,自己“与”自己,操作数不变,CF=0
例:ANDAL,AL;结果:操作数不变,CF=0。
(2)使操作数中若干位保持不变,若干位清“0“;保持不变的位与“1”相与;清“0“的位与“0”相与。
例:
若(AL)=43H ANDAL,0FH ;(AL)=03H,(AL)0~3不变; ;(AL)4~7=0H,屏蔽高4位。 01100001010000011101111161H41HDFH“与”指令应用举例例:将英文小写字母ASCII转换成大写。小写英文字母ASCII为:‘a’~’z’61H~7AH大写英文字母ASCII为:‘A’~’Z’41H~5AH程序:
MOVAL,’z’ANDAL,0DFH;(AL)=5AH格式:TESTdst,src;B/W,(dst)∧(src)
src:立即数、寄存器、存储器。
dst:寄存器、存储器。执行操作:二个操作数相与的结果不保存,置标志位。操作类型举例:
TESTBH,7 ;寄存器∧立即数
TESTSI,BP ;寄存器∧寄存器
TESTDI,TABLE[BX] ;寄存器∧存储器
TEST[SI],CH ;存储器∧寄存器TESTwordptr[BX][DI],6ACEH;存储器∧立即数2、TEST(Testornon_dstructivelogicaland)测试指令用途:是条件转移指令的先行指令,常用于检测一些条件是否满足,但又不希望改变原有的操作数的情况,检测的位与“1”相与;不检测的位与“0”相与。在此指令后边常加一条条件转移指令。例:判断A单元中数据的奇偶性设:(AL)=0AEH程序:MOVAL,A ;(AL)=0AEH
TESTAL,01H JZEVEN ;ZF=1,为偶数转EVEN …
奇数处理 …
EVEN:偶数处理
检测(AL)的最低位是否为0,若为0转EVEN格式:ORdst,src;B/W,(dst)←(dst)(src)
dst:寄存器、存储器。
src:立即数、寄存器、存储器。注意:“或”指令中操作数不能同时为存储器;两位操作数中任一位为1(或都为1), 则该位(结果)=1, 否则为0。举例:
ORBL,0F6H ;寄存器立即数
ORAH,BL ;寄存器寄存器
OR CL,BETA[BX][DI] ;寄存器
存储器
OR GAMMA[SI],DX ;存储器
寄存器ORBYTEPTRMEM_BYTE,80H ;存储器
立即数∧∧∧∧∧∧3、OR(Logicalinclusiveor)逻辑“或”指令影响标志位:CF=0F=0,AF未定义,SFZFPF
↕↕↕用途:(1)清CF,自己与自己“或”,操作数不变,CF=0
例:ORAL,AL
;(AL)不变,CF=0(2)使某个操作数若干位保持不变,若干位置1;保持不变的位与“0”或;位置1的与“1”或。
(3)将两个操作数信息组合。若(AL)=03H用OR指令组合使(AL)=33H=’3’。ORAL,30H;(AL)=33H格式:XORdst,src;B/W(dst)
(dst)
(src)
dst:寄存器、存储器。
src:立即数、寄存器、存储器。执行的操作:对指令的两个操作数进行按位“异或”运算;二位不相同时为1,相同时为0。注意:“异或”指令中操作数不能同时为存储器。举例:
XORDI,23F6HH ;寄存器
立即数
XORSI,DX ;寄存器
寄存器
XOR CL,BUFFER ;寄存器
存储器
XOR MEM[BX],AX ;存储器
寄存器XOR byteptrTABLE[BP][SI],3DH;存储器
立即数4、XOR(Logicalexclusiveor)逻辑“异或”指令影响标志位:CF=0F=0,AF未定义,SFZFPF ↕↕↕用途:(1)使操作数清0,同时清CF,自己与自己“异或”,操作数清0,CF=0
例:
XORAL,AL
;(AL)=0,CF=0
(2)对某些特定位求反时,这些特定位与“1”
; 让某些位保持不变时,这些位与“0”
。例:将(AL)中的第1、3、5、7位求反,0、2、4、6位保持不变。
MOVAL,0FH XORAL,0AAH(3)异或指令常用于判断两个操作数是否相等。例:测试(AL)中的值是否等于33H。 XOR AL,33H JZMATCH比较三条(AX)清“0”指令:
XORAX,AX ;清AX,清CF,2个字节,3个T。SUBAX,AX ;清AX,清CF,2个字节,3个T。MOVAX,0;清AX,不影响标志位,3个字节,4个T。
格式:NOTdst;B/W
指令操作数只有一个,指令对操作数按位求反。执行操作:字节求反:(dst)
0FFH-(dst)
字求反:(dst)
0FFFFH-(dst)
源操作数:寄存器、存储器。不能是立即数。影响标志位:对标志位无影响。例:
NOTCX ;16位寄存器求反NOTBYTEPTR[BP];8位存储器求反例: NOT AL执行前(AL)=00111100B,执行后(AL)=11000011B5、NOT(Logicalnot)逻辑“非”指令(1)AND指令用来对指令的指定位清“0”。(2)OR指令常用来对某些位置1。(3)XOR指令用在程序开头,使某个寄存器清“0”;还常用来对某些位取反。(4)NOT指令对某个数据取反,+1成补码。(5)TEST指令用来检测指定位为1,还是0。逻辑指令应用小结:综合举例:1.使某些位置“0”。
INAL,61H;(AL)=××××××××B ↑I/O端口地址↑想使此位为0执行指令:ANDAL,0FDH2.使某些位置“1”。
INAL,61H;(AL)=××××××××B
执行指令:ORAL,02↑想使此位为“1”3.使某些位求反。
INAL,61H;(AL)=××××××0×↑想使此位取反XORAL,02H⊕00000010 ××××××1× (8086有8条移位指令)1、算逻移位指令(4条):SHL,SHR, SAL,SAR。(1)、SHL/SAL(Shiftlogicalleft/shiftarithmeticleft)
逻辑左移/算术左移指令(2)、SHR(Shiftlogicalright)逻辑右移指令(3)、SAR(Shiftarithmeticright)算术右移指令2、循环移位(4条):ROL,ROR,RCL,RCR。(1)、ROL(Rotateleft)不含CF循环左移指令(2)、ROR(Rotateright)不含CF循环右移指令(3)、RCL(Rotateleftthroughcarry)含CF循环左移指令(4)、RCR(Rotaterightthroughcarry)含CF循环右移指令(二)移位指令共同点:所有移位指令都可以作B/W操作。
指令中的dst:寄存器、存储器寻址方式。
cnt:表示移位次数
cnt=1,1可写在指令中,不能是1以外的常数。
cnt>1,用CL存放移位次数,不能是其他寄存器。 如: SALAX,1 MOVCL,4 SALAX,CL
利用移位指令编制乘除程序,执行时间比直接用乘除指令快,速度可提高5-6倍。标志位设置:算逻移位指令:执行多次移位指令后对CF、OF的影响:
CF=从目标操作数移出的最后一位;OF不定。执行一次移位指令指令后对CF、OF的影响:
OF用于判断移位后最高有效位是否发生变化. 移位后最高位的值被改变,OF=1;否则,无变化时,OF=0, CF根据各条指令的规定设置。
SF、ZF、PF,AF无定义。↕↕↕循环移位指令:SF、ZF、PF、AF不影响。
OF、CF影响情况在指令中讲:
ROL、RCL影响标志OF、CF情况相同;
ROR、RCR影响标志OF、CF情况相同。4条:SHL,SHR,SAL,SAR
(1)、SHL/SAL(Shiftlogicalleft/shiftarithmeticleft)
逻辑左移/算术左移指令格式:SHLdst,cnt;逻辑左移指令,B/W SALdst,cnt;算术左移指令,B/W
dst:
寄存器、存储器寻址方式。
cnt:
表示移位次数cnt=1,1可写在指令中;
cnt>1,用CL存放移位次数。1、算逻移位指令执行操作:相当于无符号数×2功能。
SHL/SAL指令操作示意图如下图所示:指令格式举例:
SHLAH,1 SALSI,CL SALWORDPTR[BX+5],1 SHLBYTEPTR,CL0CFdst
(2)、SHR(Shiftlogicalright)逻辑右移指令格式:SHRdst,cnt;逻辑右移指令,B/W执行操作:相当于无符号数÷2功能。
SHR指令操作示意图如下图所示:
dst:寄存器、存储器寻址方式。指令格式举例:
SHRBL,1 SHRAX,CL SHRBYTEPTR[DI+BP],1 SHRWORDPTRBLOCK,CLdstCF0(3)、SAR(Shiftarithmeticright)算术右移指令格式:SARdst,cnt;算术右移指令,B/W执行操作:相当于带符号数÷2功能。
SAR指令操作示意图如下图所示dst
dst:寄存器、存储器寻址方式。指令格式举例:SARAL,1 SARDL,CL SARWORDPTRTABLE[SI],1 SARBYTEPTRSTATUS,CL用SAR指令与用IDIV指令做除法的区别:用SAR指令做除法(对负数向下舍入):
MOVAL,81H ;(AL)=-127 SARAL,1 ;(AL)=-64用IDIV指令做除法(IDIV指令对负数向上舍入):
MOVAL,81H ;(AL)=-127 CBW MOVCL,2 IDIVCL ;(AL)=-63,(AH)=-1应用举例:(BX)=84F0H(1)若(BX)无符号数,求(BX)/2SHRBX,1;(BX)=4278CF=0,OF=1,SF=0,ZF=0
(2)若(BX)带符号数,求(BX)/4MOVCL,02H 或SARBX,1SARBX,CL SARBX,1;CF=0,OF无意义,SF=1,ZF=04条:ROL,ROR,RCL,RCR。共同点:
ROL、ROR
不含CF循环移位指令,B操作数移动8次后还原。
RCL、RCR
含CF循环移位指令,B操作数移动9次后还原。
影响标志OF、CFROL、RCL影响标志OF、CF情况相同;
ROR、RCR影响标志OF、CF情况相同。
SF、ZF、PF、AF不影响。2、循环移位(1)、ROL(Rotateleft)不含CF循环(小循环)左移指令格式:ROLdst,cnt;不含CF循环左移指令,B/W执行操作:ROL指令操作示意图如下图所示 字节类型移动8次后操作数还原。CFdst指令格式举例:
ROLBH,1 ROLDX,CL ROLWORDPTRTABLE[DI],1 ROLBYTEPTRALPHA,CL影响标志OF、CF情况:
左循环移动1次后:
移位后,最高有效位(符号位)是否发生变化,如果移位后,最高有效位发生变化则:OF=1,
否则(无变化时)OF=0。CF根据各条指令的规定设置。
左循环移动多次后:
OF值不定。
CF=从目标操作数移出的最后一位。
SF、ZF、PF、AF不影响。(2)、ROR(Rotateright)不含CF循环(小循环)右移指令格式:RORdst,cnt;不含CF循环右移指令,B/W执行操作:ROR指令操作示意图如下图所示 字节类型
右移8次后操作数还原。CFdst指令格式举例:
RORCX,1 RORBH,CL RORBYTEPTRBETA,1 RORWORDPTRCOUNT,CL影响标志OF、CF情况:
右循环移动1次后:
如果移位后,最高有效位发生变化则,OF=1;否则:OF=0。CF根据各条指令的规定设置。
右循环移动多次后:OF值不定。
CF=从目标操作数移出的最后一位。
SF、ZF、PF、AF不影响。(3)、RCL(Rotateleftthroughcarry)含CF循环(大循环)左移指令格式:RCLdst,cnt;含CF循环左移指令,B/W执行操作:RCL指令操作示意图如下图所示,字节类型左移9次后操作数还原。CFdst指令格式举例:
RCLBX,1 RCLDL,CL RCLBYTEPTRARRAY[DI],1 RCLWORDPTR[SI+BP],CL影响标志:RCL与ROL影响标志OF、CF情况相同(4)、RCR(Rotaterightthroughcarry)含CF循环(大循环)右移指令格式:RCRdst,cnt;含CF循环左移指令,B/W执行操作:RCR指令操作示意图如下图所示,字节类型右移9次后操作数还原。CFdst指令格式举例:
RCRDI,1 RCRSI,CL RCRWORDPTR[SI+BX+3],1 RCRBYTEPTRPORT,CL影响标志:RCR与ROR影响标志OF、CF情况相同带进位循环左移移9次还原带进位循环左移移9次还原循环右移(不带CF)移8次还原循环左移(不带CF)移8次还原算术右移(带符号数÷2)逻辑右移(无符号数÷2)执行操作名称指令格式SHLoprd,1CL逻辑左移(无符号数*2)0
CF
0
CF
SALoprd,1CL算术左移CF0
SHRoprd,1CLCF
SARoprd,1CLCF
ROLoprd,1CLCF
RORoprd,1CLCF
RCLoprd,11CL1
CF
RCRoprd,11CL1小结:循环移位指令(Rotate)与移位指令(Shift)不同点:循环移位指令移位后,操作数中原来各位数的信息不会丢失,只是移动了位置,必要时可以恢复。循环移位指令可以对操作数进行测试。例:测试(AL)5=0? MOVCL,3
ROLAL,CL JNCZERO …ZERO: … …
利用带进位循环移位指令将两个寄存器或存储器单元组合起来一起移位。例:将DX、AX组合起来构成32位寄存器向左移一位。 如下图所示:程序:SHLAX,1 RCLDX,132位寄存器向左移一位“串”就是内存中一段地址相连的字节或字。
串操作—对串中各项进行操作,也叫数据块操作。8088有5种基本操作:1、MOVS(Movestring)串传送指令2、LODS(Loadfromstring)从串取指令3、STOS(Storeintostring)存入串指令4、CMPS(Comparestring)串比较指令5、SCAS(Scanstring)串扫描指令3.4.4串操作指令(Stringmanipulation)
共同点:可以只有源操作数,可以只有目标操作数,可能二者都有。源操作数用SI
寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。目的操作数用DI寻址,隐含ES为段地址。每次操作对SI、DI调整:
DF=1,DI、SI自动-1(字节)或-2(字);
DF=0,DI、SI自动+1(字节)或+2(字)。
与上述指令配合使用前缀有:
REP(Repeat)重复。
REPE/REPZ(Repeatwhileequal/zero)相等/为零则重复。
REPNE/REPNZ(Repeatwhilenotequal/notzero)不相等/不为零则重复。分二种情况:(一)与REP相配合工作的MOVS、STOS、LODS指令
REP重复串操作直到(CX)=0为止(二)与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令
REPE/REPZ当相等/为零时重复串操作
REPNE/REPNZ当不相等/不为零时重复串操作
REP重复串操作直到(CX)=0为止格式:REP串指令串指令可为:MOVS、STOS、LODS。MOVS(MoveString)串传送指令LODS(LoadfromString)从串取指令STOS(StoreintoString)存入串指令(一)与REP相配合工作的MOVS、STOS、LODS指令
REP重复串操作执行过程:(1)当(CX)=0,结束REP,
执行REP后的下一条指令。(2)当(CX)≠0,(CX)(CX)-1
,(3)执行REP后的串指令,(4)重复(1)~(3)。REP执行流程图串传送有3种格式:(1) MOVSdst,src;((ES):(DI)←((DS):(SI))MOVSB(字节);(SI)←(SI)±1,(DI)←(DI)±1MOVSW(字);(SI)←(SI)±2,(DI)←(DI)±2
当方向标志CLD,DF=0时用“+”
STD,DF=1时用“-”
该指令不影响标志位。
如:MOVSES:BYTEPTR[DI],DS:[SI]说明:MOV单指令不能完成存储单元之间的数据传送;
MOVS指令解决了存储单元之间的数据传送。1、MOVS(Movestring)串传送例:将内存的数据段中以AREA1为首地址的100个字节的数据,传送到附加段中的AREA2为首地址的区域。用MOVS串操作指令编程:
MOVAX,SEGAREA1 ;SEG:数值返回运算符,返回段地址值 MOVDS,AX MOVAX,SEGAREA2 MOVES,AX
MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2
MOVCX,100
CLD ;DF=0,增址传送REP
MOVSB
;orMOVSES:BYTEPTR[DI],DS:[SI]应用MOV指令编程:
MOVAX,SEGAREA1 MOVDS,AX MOVAX,SEGAREA2 MOVES,AX MOVSI,OFFSETAREA1;将ARE1偏移地址→SI MOVDI,OFFSETAREA2 MOVCX,100LOOP1:MOVAL,[SI] ;(AL)←((DS):(SI))
MOVES:[DI],AL;((ES):(DI))←(AL) INCSI INCDI DECCX JNELOOP1归纳:在执行MOVS指令时,应该先做好以下准备工作数据段中源串首地址(或反向传送末地址)存入DS、SI寄存器中。(2)附加段中目的串首地址(或反向传送末地址)存入ES、DI寄存器中。(3)数据串长度存入CX寄存器。(4)建立方向标志——两条指令· CLD(cleardirectionflag)
功能:DF=0,执行串处理指令时可以使地址自动+1或+2。· STD(setdirectionflag)
功能:DF=1,执行串处理指令时可以使地址自动-1或-2。从串取指令有3种格式:LODSsrc;(字节)(AL)
((DS):(SI)),(SI)
(SI)±1 (字)(AX)
((DS):(SI)),(SI)
(SI)±2LODSB(字节);(AL)
((DS):(SI)),(SI)
(SI)±1LODSW(字);(AX)
((DS):(SI)),(SI)
(SI)±2功能:该指令把由(SI)指定的数据段中某单元内容
(AL)
或(AX)
DF=0,(SI)←(SI)+1或+2
DF=1,(SI)←(SI)-1或-22、LODS(Loadfromstring)从串取指令LODS应用注意:(1)指令允许用段跨越前缀来指定非数据段的存储区。(2)该指令不影响标志位。一般说来,它不与REP联用,每重复一次,累加器的内容就改变一次。(AL)中只能保持最后一个元素。当缓冲区中的一串字符需要多次取出测试时可用本指令。适用于在一个循环中,用基本串操作指令构成复杂串操作时很有用。
将(AL)或(AX)
((ES):(DI)),(DI)±1或±2(DI)存入串指令有3种格式:STOSdst;(字节)((ES):(DI))
(AL),(DI)
(DI)±1 (字)((ES):(DI))
(AX),(DI)
(DI)±2(2)STOSB(字节);((ES):(DI))
(AL),(DI)
(DI)±1(3)STOSW(字);((ES):(DI))
(AX),(DI)
(DI)±2用途:与REP联用时,(CX)←缓冲区长度。用来建立一串相同的值。3、STOS(Storeintostring)存入串指令例:在附加段STORE开始存5个空格程序:
MOVAL,20H;‘’
(AL)MOVCX,5MOVDI,offsetSTORECLD
REPSTOSB;((ES):(DI))
(AL) (DI)
(DI)+1LODS,STOS指令应用例:内存中有一个首地址为BLOCK补码表示的有符号数的数据块。
要求将正、负数分开,分别存于二个缓冲区:
存放正数的缓冲区首址为PLUS-DATA,
存放负数的缓冲区首址为MINUS-DATA。设:源数据块用SI寻址,正数的目的区用DI寻址,负数的目的区用BX寻址。循环次数
(CX)。传送过程:用LODS指令把源数据取入(AL)中,检查其符号,确定正、负,若为正数用STOS指令送至正数缓冲区,若是负数,把(DI)与(BX)交换,仍使用STOS传送,传送完后再将(DI)与(BX)交换,恢复原值。程序:START: MOVSI,OFFSETBLOCK MOVDI,OFFSETPLUS-DATA ;正数缓冲区 MOVBX,OFFSETMINUS-DATA ;负数缓冲区
MOVCX,COUNT
CLD GOON:LODSB
TESTAL,80H JNZMINS;若负数转MINS
STOSB;正数,(DI)←(AL),(DI)←(DI)+1 JMPAGAIN MINS:XCHGBX,DI
STOSB
;负数,(DI)←(AL),(DI)←(DI)+1 XCHGBX,DI AGAIN:DECCX JNZ,GOON HLT
REPE/REPZ当相等/为零时重复串操作
格式:REPE(或REPZ)串指令REPZ前缀:当相等重复
串指令可为:CMPS,SCAS
1、CMPS(Comparestring)串比较指令
2、SCAS(Scanstring)串扫描指令,搜索指令(二)与REPE/REPZ和REPNE/REPNZ联合工作的CMPS和SCAS指令执行过程:当(CX)=0,结束REPZ,
执行REPZ下一条指令;(2)当(CX)≠0,将CX的内容减1, 执行REPZ后的串指令;(3)当ZF=1,返回(1);(4)当ZF≠1,则结束REPZ
执行REPZ下一条指令。注意:◆ (CX)减1操作不影响标志◆ ZF标志由串操作决定◆ 当(CX)=0或ZF=0时退出循环REPZ执行流程REPNE/REPNZ当不相等/不为零时重复串操作格式:REPNE(或REPNZ)stringprimitive
REPNZ前缀:当不相等重复串指令可为:CMPS,SCAS1、CMPS(Comparestring)串比较指令
2、SCAS(Scanstring)串扫描
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 壁画制作工岗前安全生产能力考核试卷含答案
- 生活垃圾焚烧操作工冲突解决测试考核试卷含答案
- 浆纱机操作工冲突管理考核试卷含答案
- 有色金属材热处理工安全理论考核试卷含答案
- 井筒掘砌工安全宣教测试考核试卷含答案
- 煤层气加压工岗位技能综合实践考核试卷含答案
- 罐头调味工基础效率模拟考核试卷含答案
- 地勘钻探工岗前持续改进考核试卷含答案
- 地勘掘进工岗后测试考核试卷含答案
- 豆制品制作工操作安全评优考核试卷含答案
- 养老机构安全管理制度
- 《得体搭配服饰》教学课件 - 2026-2027 学年滇教版初中劳动技术七年级上册
- 湖北省孝感市一中2026-2027年高三上九月月考英语试卷(含解析无听力音频含听力原文)
- 2026广西壮族自治区交通运输厅直属事业单位紧缺高层次人才招聘考试参考试题及答案详解
- 小学三年级综合实践活动《多彩的叶子》教学设计
- 宁夏南华山国家级自然保护区管理处招聘管护人员的笔试参考题库及答案详解
- 医学课件-胰腺癌研究及诊疗新进展
- 2026年苏州轨道交通有限公司人员招聘笔试备考题库及答案详解
- 2026年建筑施工企业安管人员继续教育试题(含答案)
- 2025年通信工程师中级传输与接入(无线)真题及答案解析
- ISOTS 68182024 中药艾条质量试验方法废颗粒浓度标准立项发展报告
评论
0/150
提交评论