【文档说明】汇编语言第3章指令系统和寻址方式课件.ppt,共(81)页,227.872 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44791.html
以下为本文档部分文字说明:
汇编语言第3章指令系统和寻址方式课件第3章指令系统和寻址方式(InstructionsystemandAddressingmode)•指令简介:操作码操作数1.操作码2.操作数:无操作数,单操作数,双操作数,三操作数3.1寻址方式(Ad
dressingmode)•有效地址(EA):即上章的偏移地址•段超越•寻址方式(一)与数据有关的寻址方式1.立即数寻址(Immediateaddressing)例:movAL,5(AL)=5用途:初始化2.寄存器寻址(Registeraddressing)例:mov
AL,DH(AL)=(DH)movBX,SI(BX)=(SI)寄存器有:AX,BX,CX,DX,SP,BP,SI,DIAH,AL,BH,BL,CH,CL,DH,DL用途:单个数据传送以下五种寻址方式均对内存进行的物理地址=
段首地址x16+EAEA=基址(base)+变址(index)+偏移量(displacement)3.直接寻址方式(Directaddressing)EA=displacement注:默认段是数据段物理地址=(DS)*16+EA例:movA
L,[1200H](DS)=1000HEA=1200H物理地址=DS*16+1200=11200H若:(11200)=3AH则,(AL)=3AH允许段超越。例:movAL,ES:[1200H]用途:处理单个数据4.寄存
器间接寻址方式(registerindirectaddressing)EA=基址(base)或变址(index)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段(SI)物理地址=(DS)*16+(BX)(DI)=(SS)*16+(BP)
例:movAX,[BX](DS)=1000H(BX)=1200H物理地址=DS*16+(BX)=DS*16+1200=11200H若:(11200)=34H,(11201)=12H则,(AX)=1234H允许段超越。例:movAL,E
S:[BX]用途:处理成组数据(举例说明)5.寄存器相对寻址方式(registerrelativeaddressing)EA=基址(base)或变址(index)+偏移量(displacement)基址寄存器有:BX,BP变址寄存器有:S
I,DI注:默认段是数据段和堆栈段(SI)物理地址=(DS)*16+(BX)+displacement(DI)=(SS)*16+(BP)+displacement例:movAX,VAR[BX](DS)=1000H,(BX)=1200H,VAR=1000H物理地址=DS*16+(BX)+
VAR=DS*16+1200+1000=12200H若:(12200)=34H,(12201)=12H则,(AX)=1234H允许段超越。例:movAL,ES:VAR[BX]用途:处理成组数据(举例说明)6.基址变址寻址方式(basedindexedaddressing)EA=基址(base
)+变址(index)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段物理地址=(DS)*16+(BX)+(SI)(DI)=(SS)*16+(BP)+(SI)(DI)例:movAX,[BX][DI](DS)=1000H,(BX
)=1200H,(DI)=1000H物理地址=DS*16+(BX)+(DI)=DS*16+1200+1000=12200H若:(12200)=34H,(12201)=12H则,(AX)=1234H允许段超越。例:movAL,ES
:[BX][DI]用途:处理成组数据(举例说明)7.相对基址变址寻址方式(relativebasedindexedaddressing)EA=基址(base)+变址(index)+偏移量(displac
ement)基址寄存器有:BX,BP变址寄存器有:SI,DI注:默认段是数据段和堆栈段物理地址=(DS)*16+(BX)+(SI)+displacement(DI)=(SS)*16+(BP)+(SI)+displacement(
DI)例:movAX,ARRAY[BX][DI](DS)=1000H,(BX)=1200H,(DI)=1000H,ARRAY=1000H物理地址=DS*16+(BX)+(DI)+ARRAY=DS*16+1200+1000+1000=13200H若:(13200)=34H,(13201)=12H
则,(AX)=1234H允许段超越。例:movAL,ES:ARRAY[BX][DI]用途:处理成组数据(举例说明)(二)与转移地址有关的寻址方式----寻找指令位置物理地址=CS*16+IP段内寻址:修改IP段间寻址:修改CS,IP1.段内直接寻址(intra
segmentdirectaddressing)(IP)新=EA=(IP)旧+D8或16分类:•短跳转D8例:JMPSHORTnext•近跳转D16例:JMPNEARPTRAGAIN2.段内间接寻址(intrasegmentindirectaddress
ing)(IP)新=EA=寄存器或存储单元的内容寄存器:所有寄存器寻址方式可用的寄存器存储单元:所有存储单元寻址方式均适用例:JMPSI(IP)=(SI)JMPWORDPTRVAR或简写JMPVAR(DS
)=1000H,VAR=2000H存储单元的物理地址=(DS)*16+VAR=12000H(12000H)=1234H则,(IP)新=1234H3.段间直接寻址(intersegmentdirectaddressing)(IP)新和(CS)新来源当前指令
例:JMPFARPTRNEXT4.段间间接寻址(intersegmentindirectaddressing)(IP)新和(CS)新来源存储单元的内容存储单元:所有存储单元寻址方式均适用例:JMPDWO
RDPTRVAR(DS)=1000H,VAR=2000H存储单元的物理地址=(DS)*16+VAR=12000H(12000H)=1234H,(12002H)=2000H则,(IP)新=1234H(CS)
新=2000H3.2程序占用的空间和执行时间3.380X86的指令系统一、数据传送指令1.通用数据传送指令•MOV传送(move)格式:MOVDST,SRC;B/W/DW操作:(DST)←(SRC)①MOVmem/r
eg1,mem/reg2②MOVreg/mem,data③MOVsegreg,mem/reg④MOVmem/reg,segreg*双操作数要求:除源操作数是立即数以外,两个操作数中必须有一个是寄存器。①不允许向CS传送数据②立即数不能向段寄存器传送数据③不允许在两个段寄存器之间传送数据④立
即数不能作目的操作数⑤双操作数,类型要匹配1.指出下列指令源操作数的寻址方式:(1)MOVSI,10(2)MOVSI,[DI+2](3)MOVSI,[DI](4)MOVSI,[10](5)MOVSI,BX(6)MOVSI,5[BX+DI](7)MO
VSI,[BP+DI](8)2.判断下列指令对错:(9)(1)MOVSS,1000H(2)MOVDS,ES(10)(3)MOVCS,AX(4)MOV5,AL(11)(5)MOVAX,BL(6)MOV[BX],[SI]•PUSH入栈指令(pushontothestack)格式:PUSHSRC;W*单
操作数:除立即数以外的其他寻址方式pushax•POP出栈(popfromthestack)格式:POPDST;W*CS不能作操作数POPwordptr[BX]•XCHG交换指令格式:XCHGOPR1,OPR2*不能用于段寄存器,立即
数或存储单元之间1.下列寄存器组中在段内寻址时可以提供偏移地址的是()A.AX,BX,CX,DXC.SP,IP,BP,DXB.BX,BP,SI,DID.CS,DS,ES,SS2.8086/8088确定下一条执行指令物理地址的计算表达式是()A.
(DS)×16+EAB.(ES)×16+EAC.(SS)×16+EAD.(CS)×16+EA3.下列pop指令中错误的是()A.POPCSB.POPBETA[BX]C.POPAXD.POPCX第3章指令2.累加器专用传送指令•IN输入(input)长格式:(00H~FFH)
INAL,PORT;BINAX,PORT;W短格式:(0000H~FFFFH)INAL,DX;BINAX,DX;W•OUT输出(output)长格式:(00H~FFH)OUTPORT,AL;BOUTPORT,AX;W短格式:(0000H~FFFFH)OUTDX,AL;BOUTDX,AX
;W例:某接口的命令寄存器(port=126)的D7位控制成组数据传送。发送成组传送命令。MOVDX,126HINAL,DXORAL,80HOUTDX,AL•XLAT换码指令(translate)*专用AL,BX表长不超过256例:LEABX,TABLE;(BX)=0040HMOVAL,3XLAT
指令执行后(AL)=33H(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H3.地址传送指令•LEA有效地址送寄存器(loadeffectiveaddress)格是:LEAREG,SR
C*REG不能用段寄存器(以下两个指令均是)例:LEABX,LISTMOVBX,LISTLEAAX,[BX]AHFLAGS•LDSREG,SRC指针送寄存器和DS(loadDSwithpointer)•LESREG,
SRC指针送寄存器和ES(loadESwithpointer)例:LDSBX,VAR以上指令均不影响标志位4.标志寄存器传送指令•SAHFAH送标志寄存器(storeAHintoflags)•LAHF标志送AH
(loadAHwithflags)AHFLAGS•PUSHFpushtheflags•POPFpoptheflags例:令flags中的TF=1PUSHFPOPAXORAX,0100HPUSHAXPOPF5.类型转换•CBW字节→字(convertbytetoword)
ALAX•CWD字→双字(convertwordtodoubleword)(AX)→(DX,AX)*以上指令除SAHF和POPF其他指令均不影响标志位m1010100mmmmmmmmm1010100第4章伪指令一、程序开始和结束开始:NAME模块名或title结
束:END[标号]二、段的定义1.格式:段名segment2.…..3.段名ends2.ASSUME段名与段寄存器的关系3.格式:4.ASSUME段寄存器:段名,段寄存器:段名…..3.取消段与段寄存器的关系4.ASSUMENOTHING5.或ASSUME段
寄存器:nothing,段寄存器:nothing….6.4.给段寄存器赋值三、数据定义与存储单元分配格式:[变量名]操作码操作数,操作数,…操作码:DB,DW,DD,DQ,DT操作数:1.可以是常数,表达式或地址2
.例:VAR1DW1234H,5678H3.VAR2DB12*4+54.VAR3DWVAR15.VAR4DDVAR12.是字符串例:STR1DB‘A’,‘B’STR2DW‘AB’STR3DB‘ABCDEF’3.是空单元?例:
arraydw?,?4.复制操作符DUP格式:重复次数dup(内容)例:DW100DUP(?)DW10DUP(1,2,3DUP(4,5),6)允许嵌套5.操作数类型匹配例:VAR1DB12H,34HVAR2DW5678HMOVAX,VAR1+1(错)MOVAL,VA
R2+1(错)MOVAX,WORDPTRVAR1+1(AX)=7834HMOVAL,BYTEPTRVAR2+1(AL)=56H1.将数据37H定义为字节变量X1的是();将其定义为字变量X2的是()。2.A.X1DB37B.X2DB37C
.X1DW37H3.D.X2DW37HE.X1DB37HF.X2DB37H4.2.若要求不产生汇编错误,则字符串“ABC”只能出现在伪指令()中。A.DBB.DWC.DDD.DQ3.用一条指令实现(AX)←(BX)+(SI)的方法是()A.XCHGBX,[BX][SI]B
.MOVAX,[BX][SI]C.MOVAX,[BX+SI]D.LEAAX,[BX][SI]二、算术指令1.加法指令•ADD加法(add)格式:ADDDST,SRC;B/W(DST)←(SRC)+(DST)•ADC带进位加法(
addwithcarry)格式:ADCDST,SRC;B/W(DST)←(SRC)+(DST)+CF*ADD,ADC影响所有条件标志位CF,OF的表示含义0~255-128~127二进制看作无符号看作有符号(1)000001004+4+00001011+11+(+11)000011111
515CF=0OF=0(2)000001117+7+11111011+251+(-5)1←00000010258+2CF=1OF=0(3)000010019+9+01111100+124+(+124)10000101133+133CF=0OF
=1(-123)(4)10000111135(-121)+11110101+245+(-11)1←01111100380-132CF=1(124)OF=1(124)结论:CF用来表示无符号溢出;OF用来表示有符号
溢出例:双字加(DX,AX)+(BX,CX)(DX,AX)=0001804FH(BX,CX)=0002D123HADDAX,CXADCDX,BX10000000010011110001H+11010001001000110002H1←01
01000101110010+CFSF=0,OF=1,CF=1,ZF=04HSF=0,OF=0,CF=0,ZF=0•INC加1指令(increment)格式:INCOPR;B/W(OPR)←(OPR)+1*该指令除CF标志位外,影响其他所有标志位2.减法指令•SUB减法(sub
tract)格式:SUBDST,SRC;B/W(DST)←(DST)-(SRC)•SBB带借位减法(subtractwithborrow)格式:SBBDST,SRC;B/W(DST)←(DST)-(SRC)-CFSub,sbb影响所有条件标志位•DEC减1指令(decrement)格式:DEC
OPR;B/W(OPR)←(OPR)-1*该指令除CF标志位外,影响其他所有标志位•NEG求补指令格式:NEGOPR;B/W(OPR)←0-(OPR)•CMP比较(compare)格式:CMPOPR1,OPR2;B/W(OPR1)-(OPR2)neg,cm
p影响所有条件标志位例:双字减(DX,AX)-(BX,CX)(DX,AX)=0005404FH(BX,CX)=00029123HSUBAX,CXSBBDX,BX1↘01000000010011110005H-10010001001000110002H10101111001
01100-CFSF=1,OF=1,CF=1,ZF=02HSF=0,OF=0,CF=0,ZF=0例:编程X-Y+Z-80→W,其中X,Y,Z,W均为双字存于数据段DATASEGMENTXDW34H,12H
YDW78H,56HZDW11H,77HWDW2DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXMOVAX,XSUBAX,YMOVDX,X+2SBBDX,Y
+2;(DX,AX)←X-YADDAX,ZADCDX,Z+2;(DX,AX)←X-Y+ZSUBAX,80SBBDX,0;(DX,AX)←X-Y+Z-80MOVW,AXMOVW+2,DXMOVAH,4CHINT21HCODEENDSEND3.乘法指令•MUL无符号乘(uns
ignedmultiple)格式:MULSRC;B/W(AX)←(AL)*(SRC)B(DX,AX)←(AX)*(SRC)WIMUL带符号乘(signedmultiple)格式:IMULSRC;B/W(AX)←(A
L)*(SRC)B(DX,AX)←(AX)*(SRC)W*只影响of和cf,其他标志位无定义4.除法指令•DIV无符号除(unsigneddivide)格式:DIVSRC;B/W(AL)←(AX)/(SRC)B的商(AH)←(AX)/(SRC)B的余数(AX)←(DX,AX)/
(SRC)W的商(DX)←(DX,AX)/(SRC)W的余数IDIV带符号除(signeddivide)格式:IDIVSRC;B/W(AL)←(AX)/(SRC)B的商(AH)←(AX)/(SRC)B的余数(AX)←(DX,AX)
/(SRC)W的商(DX)←(DX,AX)/(SRC)W的余数*对所有标志位无定义,余数符号与被除数相同例:编程(W-(X*Y-Z+40))/X,其中W,X,Y,Z为带符号字数据MOVAX,XIMULY;(DX,AX)←X*Y
MOVCX,DXMOVBX,AX;(CX,BX)←X*YMOVAX,ZCWD;(DX,AX)←Z(32位)SUBBX,AXSBBCX,DX;(CX,BX)←X*Y-ZADDBX,40ADCCX,0;(C
X,BX)←X*Y-Z+40MOVAX,WCWD;(DX,AX)←W(32位)SUBAX,BXSBBDX,CX;(DX,AX)←W-(X*Y-Z+40)IDIVX5.十进制调整指令概念:压缩BCD码(packedBCDformat)非压缩BCD码(unpacked
BCDformat)调整原理:①A~F之间的数据②最高位有进位原值+(-)6进行调整(1)压缩BCD码调整指令•DAA加法调整指令(decimaladjustafteraddition)操作:先做加法,和放在AL;对AL调整后把结果放回AL。例:(BCD1)
+(BCD2)=(BCD3)MOVAL,BCD1ADDAL,BCD2DAAMOVBCD3,AL•DAS减法调整指令(decimaladjustaftersubstraction)操作:先做减法,差放在AL;
对AL调整后把结果放回AL。*以上两个指令除对OF无定义以外,影响所有其他标志位(2)非压缩BCD码调整指令•AAA加法调整指令(ASCIIadjustafteraddition)操作:先做加法,和放在AL;对AL调整后把结果放回AL。•AAS减法调整指令(ASCIIadjustafte
rsubstraction)操作:先做减法,差放在AL;对AL调整后把结果放回AL。*以上两个指令只对AF和CF有影响例:MOVAH,0MOVAL,‘8’ADDAL,‘2’AAA;(AX)=0100H•AAM乘法调整指令(ASCIIadjustafte
rmultiplication)操作:先做乘法,积放在AL;对AL调整后把结果放回AX。调整过程:AL/10,商放在AH中,余数放在AL中。要求:乘之前,BCD码高四位清零例:VARDB05,06MOVBL,VARMOVAL,VAR+1MULBLAAM•AAD除
法调整指令(ASCIIadjustafterdivision)操作:先调整,后做除法。调整过程:(AL)←10*(AH)+(AL),AH←0。例:MOVAX,0307HAAD;(AX)=0025HMOVBL,5DIVB
L*以上两个指令,对CF、OF和AF均无定义1.执行下面指令序列后,结果是()Moval,82hcbwA.(AX)=0FF82HB.(AX)=8082HC.(AX)=0082HC.(AX)=0F82H2.下列指令
中错误的是()A.ADDBX,AB.MUL24C.INAL,DXD.SUBAX,05H3.下列4条指令MULBXDIVBLINAX,20HOUT21H,AL中,有()条指令需要使用DX寄存器。A.1B.2C.3
D.4三、逻辑指令1.逻辑运算指令(BooleanandComparisonInstructions)•AND逻辑与(and)格式:ANDDST,SRC;B/W操作:(DST)←(DST)∧(SRC)用于:屏蔽某些位•OR逻辑或(or)格式:ORDST,SRC;B/W操作:(D
ST)←(DST)∨(SRC)用于:某些位置1或数据组合•XOR逻辑异或(xor)格式:XORDST,SRC;B/W操作:(DST)←(DST)⊕(SRC)用于:某些位取反;初始化寄存器•TEST测试(test)格式:TESTOPR1,OPR2;B/W操作:(OPR1)∧(OPR2)用于:用于条件
转移的判定条件*以上所有指令,除对AF无定义外,影响所有标志位,且CF=OF=0•NOTOPR非操作:(OPR)←(OPR)*该指令不影响标志位例:屏蔽AL的0、1两位ANDAL,0FCH例:置AL的D
5位为1ORAL,20H例:使AL的0、1位变反XORAL,3例:测试某些位是0是1TESTAL,1JZEVEN********AND11111100******00********OR00100000**1*************X
OR00000011********2.移位指令(shiftandrotateInstructions)•SHL逻辑左移(shiftlogicalleft)格式:SHLOPR,CNT;B/W0•SHR逻辑右移(shiftlogicalright)格式:SHROPR,CNT;B/W0
•SAL算术左移(shiftarithmeticleft)格式:SALOPR,CNT;B/W(同SHL)•SAR算术右移(shiftarithmeticright)格式:SAROPR,CNT;B/WCFCFCF*以上四个指令,除AF无定义,影响所有标志位例:编程实现Z=X*10分
析:X*10=X*23+X*2DATASEGMENTXDW30ZDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XSH
LAX,1MOVBX,AX;BX=AX=X*2MOVCL,2SHLBX,CL;BX=X*8ADDAX,BXMOVZ,AXMOVAH,4CHINT21HCODEENDSENDSTART•ROLOPR,CNT循环左移(rotateleft)•R
OROPR,CNT循环右移(rotateright)•RCLOPR,CNT带进位循环左移(rotateleftthroughcarry)•RCROPR,CNT(带进位循环右移rotaterightthroughc
arry)*以上四个指令,除CF和OF外,不影响其他标志位CFCFCFCF指出下列指令中哪些是非法的,并说明原因1.MOVSS,2000H2.PUSHCS3.XCHGAL,1004.SHLAH,45.INAL,21H6.OUT300H,AX7.ORAX,[CS]8.SUB[SI],
[BP]9.CMP20[BX],VAR[SI]10.MUL10011.IDV[BX]12.LEAVAR,AX四、串操作指令1.与REP配合工作的MOVS/STOS/LODS•REP重复(repeat)格式
:REPMOVS/STOS/LODS操作:(1)如(CX)=0则退出REP,否则转(2)(2)(CX)(CX)-1(3)执行MOVS/STOS/LODS(4)重复(1)~(3)•MOVS串传送指令(movestring)格式:MOVSDST,SRCMOVSB(字节)MOV
SW(字)操作:(1)((DI))←((SI))(2)字节操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2方向标志DF=0时用+,DF=1时用
-。DF=0DF=1(SI)低地址高地址数据段附加段(SI)(DI)(DI)执行REPMOVS之前,应先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串长度→CX(4)建立方向标志(CLD使D
F=0,STD使DF=1)例:datareasegmentmess1db‘personal_computer’datareaendsextrasegmentmess2db17dup(?)extraendscodesegment…leadi,mess2leasi,mess1movcx,17c
ldrepmovsb…codeendsleasi,mess1+16leadi,mess2+16movcx,17stdrepmovsb•STOS存入串指令(storeintostring)格式:STOSDSTSTOSB
(字节)STOSW(字)操作:字节操作:((DI))←(AL),(DI)←(DI)±1字操作:((DI))←(AX),(DI)←(DI)±2例:把附加段中的5个字节缓冲区置为20Hleadi,mess2moval,20Hmovcx,5cldrepstosb•LODS从串取指令(loadfromst
ring)格式:LODSSRCLODSB(字节)LODSW(字)操作:字节操作:(AL)←((SI)),(SI)←(SI)±1字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不与REP联用*源串必须在数据段中,目的串必须在附加段中,但源串允许使用段跨越前缀来修改。
*串长度送到CX中*不影响条件标志位2.与REPE/REPZ和REPNE/REPNZ配合工作的CMPS和SCAS•REPE/REPZ(REPNE/REPNZ)格式:REPE/REPZ(REPNE/REPNZ)CMPS/SCAS操作:(1)如(CX)=0
或ZF=0(ZF=1)则退出,否则转(2)(2)(CX)←(CX)-1(3)执行CMPS/SCAS(4)重复(1)~(3)•CMPS串比较指令(comparestring)格式:CMPSSRC,DSTCMPSB(字节)CMPSW(字)操作:(1)((SI))-
((DI))根据比较结果设置条件标志位:相等ZF=1,不等ZF=0(2)字节操作:(SI)←(SI)±1,(DI)←(DI)±1字操作:(SI)←(SI)±2,(DI)←(DI)±2例:比较两个字符串,找出它们不相匹配的位置leasi,mess1leadi,m
ess2movcx,8cldrepecmpsb•SCAS串扫描指令(scanstring)格式:SCASDSTSCASB(字节)SCASW(字)操作:字节操作:(AL)-((DI)),(DI)←(DI)±1字操作:(AX)-((DI)),(DI)←(DI)±2例:从一个字符串中查找一个指定的字符,
找出它的位置messdb‘COMPUTER’leadi,messmoval,‘T’movcx,8cldrepnescasb(DI):相匹配字符的下一个地址(CX):剩下还未比较的字符个数*这两条指令影响
所有标志位COMPUTER(di)COMPUTER(di)1.串操作指令中,目的串操作数一定放在()段中。2.在串操作指令前使用REPE,终止串的重复操作条件是()3.A.CX=0且ZF=0B.C
X=0且ZF=14.C.CX=0或ZF=0D.CX=0或ZF=15.3.说明下列程序段的功能:6.SHLDX,17.SHLAX,18.ADCDX,09.SHLBX,110.ADCAX,0五、控制转移指令(都不影响标志位)1.无条件转移指令(unconditionaljumpinstru
ction)•JMP(与转移地址有关的寻址方式相同)2.条件转移指令(conditionaljumpinstructions)(1)根据单个条件标志的设置情况转移:格式测试条件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=
0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1JNCOPRCF=0*只能使用段内直接寻址的8位位移量(-128~127)(2)两个无符号数
比较,并根据比较结果转移:A-B格式测试条件<JB(JNAE,JC)OPRCF=1≥JNB(JAE,JNC)OPRCF=0≤JBE(JNA)OPRCF∨ZF=1>JNBE(JA)OPRCF∨ZF=0(3)两个带符号数比较,并根据比较结果转移:*A-B格
式测试条件<JL(JNGE)OPRSFOF=1≥JNL(JGE)OPRSFOF=0≤JLE(JNG)OPR(SFOF)∨ZF=1>JNLE(JG)OPR(SFOF)∨ZF=0•测试CX的值为0则转移:格式:JCXZOPR测试条件
:(CX)=0例:X>50,转到TOO_HIGH;计算X-Y,溢出转到OVERFLOW,否则|X-Y|→RESULT,X、Y为字。MOVAX,XCMPAX,50JGTOO_HIGHSUBAX,YJOO
VERFLOWJNSNONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:…例:、是双精度数,分别存于(DX,AX)及(BX,CX)中,>时转X,否则转Y。CMPDX,BXJGXJLY
CMPAX,CXJAXY:…...X:…...4.循环指令•LOOP指令格式:LOOPOPR操作:在进行循环次数的计数,即CX<=(CX)-1后,若(CX)≠0,则转移到OPR,否则顺序执行。该指令相当于:DECCXJNE短标号•LOOPE/LOOPZ指令格式:LOO
PEOPR或者LOOPZOPR操作:在进行循环次数的计数,即CX<=(CX)-1后,若(CX)≠0且ZF=1,则转移到目标单元,否则顺序执行。•LOOPNE/LOOPNZ指令格式:LOOPNEOPR或者LOO
PNZOPR操作:在进行循环次数的计数,即CX<=(CX)-1后,如(CX)≠0且ZF=0,则转移到目标单元,否则顺序执行。例:在L个字符的字符串(ASCII_STR)中,查找“空格”,没找到转到NOT_FOUND。MOVCX,LMOVSI,0MOVAL,20HNEXT:
CMPAL,ASCII_STR[SI]INCSILOOPNENEXTJNZNOT_FOUND…..NOT_FOUND:……例:在L个字符的字符串(ASCII_STR)中,查找“空格”,没找到转到NOT_FOUND。MO
VCX,LMOVSI,-1MOVAL,20HNEXT:INCSICMPAL,ASCII_STR[SI]LOOPNENEXTJNZNOT_FOUND…..NOT_FOUND:……六、处理机控制指令CLCCF←0CMCCF←CFSTCCF←1CLDDF←
0STDDF←1CLIIF←0STIIF←1•本章小结:主要掌握六大类指令以及它们对标志位影响的实际意义