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

下载本文档

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

文档简介

1、第3章 80 x86指令系统3.4 8086/8088指令系统3.4.3 逻辑运算与移位类指令(续)2. 移位类指令名称助记符指令操作数类型操作说明Shift Logical leftSHL src,1 SHL src,CLB,W B,Wsrc逻辑左移一位,填0 src逻辑左移CL位,填0Shift Ari-thmetic leftSAL src,1 SAL src,CLB,W B,Wsrc算术左移一位,填0 src算术左移CL位,填0Shift Lo-gical RightSHR src,1 SHR src,CLB,W B,Wsrc 逻辑右移一位,填0src 逻辑右移CL位,填0Shift

2、Arith-metic RightSAR src,1 SAR src,ALB,W B,Wsrc算术右移一位,填符号src算术右移CL位,填符号移位指令操作示意图CF最高位src0CF最高位src0SAL SHL 由图可见,算术左移指令与逻辑左移指令的功能完全相同。左移一次,末位补0,相当于乘以2。利用移位指令可实现快速乘法。如:SAL AL,1;相当于(AL)(AL)2MOV CL,4SAL AX,CL;相当于(AX)(AX)24移位指令操作示意图CF最高位srcCF最高位src0SARSHR SHR与SAR功能不同,SHR移动一次相当于无符号数除2运算,而SAR移动一次相当于带符号数除2运算

3、。因而,可用右移指令实现快速除法运算。3. 循环移位指令名称助记符指令操作数类型操作说明Rotate leftROL src,1 ROL src,CLB,W B,W循环左/右移位不通过CFRotate RightROR src,1 ROR src,CLB,W B,WRotate left though carryRCL src,1 RCL src,CLB,W B,W循环左/右移位通过CFRotate right though carryRCR src,1 RCR src,ALB,W B,W循环移位指令操作示意图CF最高位srcCF最高位srcCF最高位srcCF最高位src0ROLRCLROR

4、RCR 不含进位循环移位指令又称小循环,含进位循环移位指令又称大循环。例:SALAX,1RCL DX,1;实现(DX),(AX)(DX),(AX)2运算。例:SALFIRSTWORD,1RCL SECONDWORD,1;可实现存于连续两个存储单元的32位数据2。 从示意图,可以看出所有移位指令对CF直接有影响,对其余标志位也有影响。但对AF的影响无实际意义。3.4.4 串操作(String Manipulation)类指令操作类型串传送指令MOVS dst,src MOVSB MOVSW(ES:DI) (DS:SI) ,DF=0:+ (SI)(SI), (SI)(SI) 字节传送 1,字传送

5、2串比较指令CMPS dst,src CMPSB CMPSW(DS:SI)(ES:DI) 建立标志(其余同上)串搜索指令SCANS dst SCANSB SCANSW(AX)(ES:DI) 建立标志(其余同上)取字符串指令LODS src LODSB LODSW(AX)(DS:SI) 建立标志(其余同上)存字符串指令STOS dst STOSB STOSW((ES:D I)) (AX) 建立标志(其余同上)助记符指令名称B,W B WB,W B WB,W B WB,W B WB,W B W操作说明重复前缀助记符与功能助记符格式功能说明REP MOVS 或REP STOS 当(CX)0时,重复执

6、行MOVS(或STOS),(CX)(CX)1REPE CMPS 或REPZ CMPS REPE SCAS 或REPZ SCAS 当(CX)0,且ZF1时,重复执行CMPS(或SCAS),(CX)(CX)1。REPNE CMPS 或REPNZ CMPS REPNE SCAS 或REPNZ SCAS当(CX)0,且ZF0时,重复执行CMPS(或SCAS),(CX)(CX)1。串传送指令应用例:将DS:AREA1开始存放的100个字节搬到ES:AREA2为首趾的区域中。MOVSI,OFFSET AREA1MOVDI,OFFSET AREA2MOVCX,100AGAIN:MOVSAREA2,AREA1

7、DECCXJNZAGAIN 方框中的3条指令可用一条带前缀的指令完成:REPMOVSAREA2,AREA1例:比较DS段和ES段中的两个字节串。它们分别存放在DS:FLAGS和ES:STATUS开始的单元中。长度5,试比较二者是否相同,如不同,把不同时位置,记入DS:POINT单元。LEA SI,FLAGSLEA DI,STATUSMOV CX,5REPE CMPSBJNEFOUTDSAME:RETFOUTD:INCCXMOV WORD PTR POINT,CXRET串比较指令应用串搜索指令应用例:AL存放收到字符,DS:COMMAND开始的16个单元,存放“012DEF”16个ASCCII字

8、符命令串。若AL收到的字符与其中的某个相同则显示,否则出错处理。MOVDI,OFFSET COMMANDMOVBX,DSMOVES,BXCLDMOVCX,10HREPNZSANSBJNZERROR显示子程序ERROR:RET 存字符串指令应用例:将ES段中04000500H单元清0 。;LEADI,0400HMOVCX,0080HCLDXORAX,AXREPSTRSW 取字符串指令应用 因为AL(或AX)中的内容会被最后取入的字符覆盖,所以 LODS 指令不能加重复前缀。3.4.5 控制转移(Contronl Jump)类指令无条件转移(Jump)调用(CALL)和返回(RETURN)类指令条

9、件转移指令循环控制指令中断及中断返回指令1.无条件转移调用和返回指令(1)无条件转移指令(JMP) 段内直接寻址(Intrasegment Direct Addressing) 近程转移: JMP NEAR PTR TAGET;位移量位16位带符号数,寻址范围3276832767。 短程转移:JMP SHORT OBJECT;位移量8位的带符号数,寻址范围128127 注:无论是近程转移,还是短程转移,都不能全部寻址段内全部64KB目的地址可省略 段内间接寻址(Intrasegment Indirect Addressing)JMPBX;EA(BX)JMPWORD PTRSI 如果(DS)=2

10、000H,(BX)=1200H,(SI)=5230H,存储单元(25230H)=2450H。 则JMP BX 执行后,EA(IP)(BX)=1200H,JMP WORD PTRSI 执行后,EA(IP)(16(DS)+(SI))=(20000H5230H)(25230H)2540H 地址的内容 段间直接寻址(Intersegment Direct Addressing )又称远程转移指令,指令格式为:JMP FAR PTR LABEL操作是:(IP)LABEL距另一段首地址偏移量, (CS)转向地址的段地址。 段间间接寻址(Intersegment Indirect Addressing)例如

11、:JMP DWORD PTRBXSI操作:(IP)(BX)(SI), (CS)(BX)(SI)2)。转移地址的符号段间转移运算符(2)调用指令 CALL指令格式为:CALLdst 操作包括: (SP)(SP)2(SP+1),(SP)(CS) (CS)SEG (SP)(SP)2(SP+1),(SP)(IP) (IP) dst段间调用段内调用各种调用指令的格式CALL NEAR PTR ROUTCALL 1000HCALL BXCALL 2500H:1400HCALL FAR PTR SUBRCALL DWORD PTRDI段内直接调用段内间接调用段间直接调用段间间接调用(3)返回指令 RET格式

12、:RET Optionalpopvalue操作: (IP)(SP1),(SP) (SP)(SP)+2 (CS)(SP1),(SP) (SP)(SP)+2RET 指令还可以带立即数n,如RET 4。作用是在返回地址出栈后,(SP)(SP)4。用途:带参数过程(子程序)完成后,释放栈空间。段内返回段间返回由与之相配的CALL 中的属性决定例:MOV SP,01FEH04F0CALL MYPROG04F3 NEXT:MOVAX,BX0500 MYPROG PROC0500 MOV CL,6 051ERET051F MYPROG ENDP01FE04F3M01F801FA01FC01FESPIP执行调

13、用前例:MOV SP,01FEH04F0CALL MYPROG04F3 NEXT:MOVAX,BX0500 MYPROG PROC0500 MOV CL,6 051ERET051F MYPROG ENDP01FC0500M01F801FA01FC01FESPIPF304执行调用之后例:MOV SP,01FEH04F0CALL MYPROG04F3 NEXT:MOVAX,BX0500 MYPROG PROC0500 MOV CL,6 051ERET051F MYPROG ENDP01FE04F3M01F801FA01FC01FESPIP执行返回后2. 条件转移指令 格式:JCC TargetCC

14、成立?(IP)Target(IP)(IP)2JCC TargetNY条件转移指令的分类(1)根据单个标志条件进行测试,作为转移的依据:(2)根据标志间的组合条件进行测试,转移的依据:(3)根据CX寄存器值进行测试,作为转移的依据。(1)单个标志为条件测试转移指令指令助记符格式条件说明测试标志JZ/JE Target结果为0ZF=1JNZ/JNE Target结果不为0ZF=0JS Target结果为负SF=1JNS Target结果为正SF=0JP/JPE Target结果低8位1个数为偶数PF=1JNP/JPO Target结果低8位1个数为奇数PF=0JO Target结果溢出OF=1JN

15、O Target 结果未溢出OF=0JB/JNAE/JC Target结果低于(无符号)CF=1JNB/JAE/JNC Target结果不低于(无符号)CF=0(2)根据标志间组合条件测试转移指令条件说明测试标志CFZF1(CF0)(ZF0)结果小于(带符号)指令助记符格式JBE/JNA TargetJNBE/JA TargetJL/JNGE TargetJNL/JGE TargetJLE/JNG TargetJNLE/JG Target结果不高于(无符号)结果高于(无符号)教科书有错误结果不小于(带符号)结果不大于(带符号)结果大于(带符号)(SF OF)=1(SF OF)=0(SF OF)

16、ZF=1(SF OF)ZF=0(3)根据对CX寄存器值进行测试为转移依据指令指令格式:JCXZTarget(IP)Target(IP)(IP)2(CX)=0?N Y3. 循环控制指令(1)LOOP 指令格式:LOOPSHORTlabel功能:(CX)(CX)1,(CX)0时转到label,否则执行下一条指令。(2)LOOPZ/LOOPE 指令格式: LOOPZ/LOOPE SHORTlabel功能:(CX)(CX)1, (CX)0且ZF1时,转到label,否则执行下一条指令。注:(CX)=0不影响ZF。(3)LOOPNZ/LOOPNE 指令格式: LOOPNZ/LOOPNE SHORTlab

17、el功能:(CX)(CX)1, (CX)0且ZF0时,转到label,否则执行下一条指令。注:(CX)=0不影响ZF。例:计算两个字节数组ARRAY1和ARRAY2之和,若遇到两个数组中的项同时为0,结束,并把非0数组长度存于NO单元。MOVAL,0MOVSI,1MOVCX,8NONZERO:INCSIMOVAL,ARRAY1SIADDAL,ARRAY2SIMOVSUMSI,ALLOOPNZNONZEROJZORENTRYZERO:RETORENTRY:INCCXMOVWORD PTRNO,CXJMPZERO3.4.6 处理器控制(Processor Control)指令名称助记符指令功能进位标志清0CLCCF0进位

温馨提示

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

评论

0/150

提交评论