微机原理及应用03-3_第1页
微机原理及应用03-3_第2页
微机原理及应用03-3_第3页
微机原理及应用03-3_第4页
微机原理及应用03-3_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章80x86指令系统3.48086/8088指令系统3.4.3逻辑运算与移位类指令(续)2.移位类指令名称助记符指令操作数类型操作说明ShiftLogicalleftSHLsrc,1SHLsrc,CLB,WB,Wsrc逻辑左移一位,填0

src逻辑左移CL位,填0ShiftAri-thmeticleftSALsrc,1SALsrc,CLB,WB,Wsrc算术左移一位,填0src算术左移CL位,填0ShiftLo-gicalRightSHRsrc,1SHRsrc,CLB,WB,Wsrc逻辑右移一位,填0src逻辑右移CL位,填0ShiftArith-meticRightSARsrc,1SARsrc,ALB,WB,Wsrc算术右移一位,填符号src算术右移CL位,填符号移位指令操作示意图CF最高位src0CF最高位src0SALSHL由图可见,算术左移指令与逻辑左移指令的功能完全相同。左移一次,末位补0,相当于乘以2。利用移位指令可实现快速乘法。如: SALAL,1;相当于(AL)←(AL)×2 MOV CL,4 SAL AX,CL;相当于(AX)←(AX)×24移位指令操作示意图CF最高位srcCF最高位src0SARSHRSHR与SAR功能不同,SHR移动一次相当于无符号数除2运算,而SAR移动一次相当于带符号数除2运算。因而,可用右移指令实现快速除法运算。3.循环移位指令名称助记符指令操作数类型操作说明RotateleftROLsrc,1ROLsrc,CLB,WB,W循环左/右移位不通过CFRotateRightRORsrc,1RORsrc,CLB,WB,WRotateleftthoughcarryRCLsrc,1RCLsrc,CLB,WB,W循环左/右移位通过CFRotaterightthoughcarryRCRsrc,1RCRsrc,ALB,WB,W循环移位指令操作示意图CF最高位srcCF最高位srcCF最高位srcCF最高位src0ROLRCLRORRCR不含进位循环移位指令又称小循环,含进位循环移位指令又称大循环。例:SAL AX,1 RCLDX,1;实现(DX),(AX)←(DX),(AX)×2运算。例:SAL FIRST-WORD,1 RCL SECOND-WORD,1;可实现存于连续两个存储单元的32位数据×2。从示意图,可以看出所有移位指令对CF直接有影响,对其余标志位也有影响。但对AF的影响无实际意义。3.4.4串操作(StringManipulation)类指令操作类型串传送指令MOVSdst,srcMOVSBMOVSW((ES:DI))←((DS:SI)),DF=0:+(SI)←(SI)±Δ,(SI)←(SI)±Δ字节传送Δ=1,字传送Δ=2串比较指令CMPSdst,srcCMPSBCMPSW((DS:SI))-((ES:DI))建立标志(其余同上)串搜索指令SCANSdstSCANSBSCANSW(AX)-((ES:DI))建立标志(其余同上)取字符串指令LODSsrcLODSBLODSW(AX)←((DS:SI))建立标志(其余同上)存字符串指令STOSdstSTOSBSTOSW((ES:DI))→(AX)建立标志(其余同上)助记符指令名称B,WBWB,WBWB,WBWB,WBWB,WBW操作说明重复前缀助记符与功能助记符格式功能说明REPMOVS或REPSTOS当(CX)≠0时,重复执行MOVS(或STOS),(CX)←(CX)-1REPECMPS或REPZCMPS

REPESCAS或REPZSCAS

当(CX)≠0,且ZF=1时,重复执行CMPS(或SCAS),(CX)←(CX)-1。REPNECMPS或REPNZCMPS

REPNESCAS或REPNZSCAS当(CX)≠0,且ZF=0时,重复执行CMPS(或SCAS),(CX)←(CX)-1。串传送指令应用例:将DS:AREA1开始存放的100个字节搬到ES:AREA2为首趾的区域中。

MOV SI,OFFSETAREA1 MOV DI,OFFSETAREA2 MOV CX,100AGAIN:MOVS AREA2,AREA1 DEC CX JNZ AGAIN方框中的3条指令可用一条带前缀的指令完成:

REP MOVS AREA2,AREA1例:比较DS段和ES段中的两个字节串。它们分别存放在DS:FLAGS和ES:STATUS开始的单元中。长度=5,试比较二者是否相同,如不同,把不同时位置,记入DS:POINT单元。

LEA SI,FLAGS LEA DI,STATUS MOV CX,5 REPE CMPSB JNE FOUTDSAME: RETFOUTD: INC CX MOV WORDPTRPOINT,CX RET 串比较指令应用串搜索指令应用例:AL存放收到字符,DS:COMMAND开始的16个单元,存放“012┉DEF”16个ASCCII字符命令串。若AL收到的字符与其中的某个相同则显示,否则出错处理。

MOV DI,OFFSETCOMMAND MOV BX,DS MOV ES,BX CLD MOV CX,10H REPNZ SANSB JNZ ERROR

显示子程序ERROR: RET存字符串指令应用例:将ES段中0400~0500H单元清0。;

LEA DI,[0400H] MOV CX,0080H CLD XOR AX,AX REP STRSW取字符串指令应用

因为AL(或AX)中的内容会被最后取入的字符覆盖,所以LODS指令不能加重复前缀。3.4.5控制转移(ContronlJump)类指令无条件转移(Jump)调用(CALL)和返回(RETURN)类指令条件转移指令循环控制指令中断及中断返回指令1.无条件转移调用和返回指令(1)无条件转移指令(JMP)①段内直接寻址(IntrasegmentDirectAddressing)近程转移:

JMPNEARPTR

TAGET;位移量位16位带符号数,寻址范围-32768~+32767。短程转移:JMPSHORTOBJECT;位移量8位的带符号数,寻址范围-128~+127注:无论是近程转移,还是短程转移,都不能全部寻址段内全部64KB目的地址可省略②段内间接寻址(IntrasegmentIndirectAddressing)

JMP BX;EA=(BX)

JMP WORDPTR[SI]如果(DS)=2000H,(BX)=1200H,(SI)=5230H,存储单元(25230H)=2450H。则JMPBX执行后,EA=(IP)=(BX)=1200H,JMPWORDPTR[SI] 执行后,EA=(IP)=(16×(DS)+(SI))=(20000H+5230H)=(25230H)=2540H

地址的内容③段间直接寻址(IntersegmentDirectAddressing)又称远程转移指令,指令格式为:

JMP FAR PTR

LABEL操作是:(IP)←LABEL距另一段首地址偏移量,(CS)←转向地址的段地址。④段间间接寻址(IntersegmentIndirectAddressing)例如:JMPDWORDPTR[BX][SI]操作:(IP)←((BX)+(SI)),(CS)←((BX)+(SI)+2)。转移地址的符号段间转移运算符(2)调用指令CALL指令格式为:

CALL dst操作包括:①(SP)←(SP)-2 ((SP+1),(SP))←(CS)②(CS)←SEG③(SP)←(SP)-2 ((SP+1),(SP))←(IP)④(IP)←dst段间调用段内调用各种调用指令的格式CALLNEARPTRROUTCALL1000HCALLBXCALL2500H:1400HCALLFARPTRSUBRCALLDWORDPTR[DI]段内直接调用段内间接调用段间直接调用段间间接调用(3)返回指令RET格式:RETOptional-pop-value操作:①(IP)←((SP+1),(SP)) ②(SP)←(SP)+2 ③(CS)←((SP+1),(SP)) ④(SP)←(SP)+2RET指令还可以带立即数n,如RET4。作用是在返回地址出栈后,(SP)←(SP)+4。用途:带参数过程(子程序)完成后,释放栈空间。段内返回段间返回由与之相配的CALL中的属性决定例:

MOV SP,01FEH ┋04F0 CALL MY-PROG04F3 NEXT:MOV AX,BX ┋0500 MY-PROG PROC0500 MOV CL,6 ┋051E RET051F MY-PROG ENDP01FE04F3M┋01F801FA01FC01FESPIP执行调用前例:

MOV SP,01FEH ┋04F0 CALL MY-PROG04F3 NEXT:MOV AX,BX ┋0500 MY-PROG PROC0500 MOV CL,6 ┋051E RET051F MY-PROG ENDP01FC0500M┋01F801FA01FC01FESPIPF304执行调用之后例:

MOV SP,01FEH ┋04F0 CALL MY-PROG04F3 NEXT:MOV AX,BX ┋0500 MY-PROG PROC0500 MOV CL,6 ┋051E RET051F MY-PROG ENDP01FE04F3M┋01F801FA01FC01FESPIP执行返回后2.条件转移指令

格式:JCCTargetCC成立?(IP)←Target(IP)←(IP)+2JCCTargetNY条件转移指令的分类(1)根据单个标志条件进行测试,作为转移的依据:(2)根据标志间的组合条件进行测试,转移的依据:(3)根据CX寄存器值进行测试,作为转移的依据。(1)单个标志为条件测试转移指令指令助记符格式条件说明测试标志JZ/JETarget结果为0ZF=1JNZ/JNETarget结果不为0ZF=0JSTarget结果为负SF=1JNSTarget结果为正SF=0JP/JPETarget结果低8位1个数为偶数PF=1JNP/JPOTarget结果低8位1个数为奇数PF=0JOTarget结果溢出OF=1JNOTarget结果未溢出OF=0JB/JNAE/JCTarget结果低于(无符号)CF=1JNB/JAE/JNCTarget结果不低于(无符号)CF=0(2)根据标志间组合条件测试转移指令条件说明测试标志CF∨ZF=1(CF=0)∧(ZF=0)结果小于(带符号)指令助记符格式JBE/JNATargetJNBE/JATargetJL/JNGETargetJNL/JGETargetJLE/JNGTargetJNLE/JGTarget结果不高于(无符号)结果高于(无符号)教科书有错误结果不小于(带符号)结果不大于(带符号)结果大于(带符号)(SF⊕OF)=1(SF⊕OF)=0(SF⊕OF)∨ZF=1(SF⊕OF)∨ZF=0(3)根据对CX寄存器值进行测试为转移依据指令指令格式:JCXZ Target(IP)←Target(IP)←(IP)+2(CX)=0?NY3.循环控制指令(1)LOOP指令格式:LOOP SHORT-label功能:(CX)←(CX)-1,(CX)≠0时转到label,否则执行下一条指令。(2)LOOPZ/LOOPE指令格式:LOOPZ/LOOPE SHORT-label功能:(CX)←(CX)-1,(CX)≠0且ZF=1时,转到label,否则执行下一条指令。注:(CX)=0不影响ZF。(3)LOOPNZ/LOOPNE指令格式:LOOPNZ/LOOPNESHORT-label功能:(CX)←(CX)-1,(CX)≠0且ZF=0时,转到label,否则执行下一条指令。注:(CX)=0不影响ZF。例:计算两个字节数组ARRAY1和ARRAY2之和,若遇到两个数组中的项同时为0,结束,并把非0数组长度存于NO单元。

MOV AL,0 MOV SI,-1 MOV CX,8NONZERO: INC SI MOV AL,ARRAY1[SI] ADD AL,ARRAY

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论