




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,3.3.3 逻辑运算和移位指令,逻辑运算指令 运算规则:按位操作,无进/借位 对标志位的影响(除NOT指令外):,CF OF SF ZF PF AF 0 0 * * * 无定义,根据运算结果设置,2,(1) 逻辑”与” AND,对两个操作数进行按位逻辑“与”操作。 格式:AND dest, src 用途:保留操作数的某几位,清零其他位。 例1:保留AL中低4位,高4位清0。 AND AL, 0FH 例2:AL中有字符az, 将其转换成大写。 AND AL, 01011111B,3,例3:测试AL的bit7,bit5,bit2是否都是1。 AND AL, 10100100B CMP AL, 10100100B JZ YES ; if match, go to YES ; if not match YES: ; goes here if all 1,4,对两个操作数进行按位逻辑”或”操作。 格式:OR dest, src 用途:对操作数的某几位置1;对两操作数 进行组合。 例1:把AL中的非压缩BCD码变成相应十进制 数的ASCII码。 OR AL, 30H,(2) 逻辑”或” OR,5,例2:把AH和AL中的非压缩BCD码组合成压 缩的BCD码, 放到AL中。 MOV CL, 4 SHL AH, CL OR AL, AH 例3:把AL的第5位置为1 OR AL, 00100000B,6,对操作数进行按位逻辑”非”操作。 格式:NOT mem/reg 例:NOT CX NOT BYTE PTRDI,(3) 逻辑“非”(取反) NOT,7,对两个操作数按位进行”异或”操作。 格式:XOR dest, src 用途:对reg清零(自身异或) 把reg/mem的某几位变反(与1异或) 例1:把AX寄存器清零。 例2:把DH的bit4,3变反 MOV AX,0 XOR DH,18H XOR AX,AX AND AX,0 SUB AX,AX,(4) 逻辑”异或” XOR,8,操作与AND指令类似,但不将”与”的结果送回,只影响标志位。 TEST指令常用于位测试,与条件转移指令一起用。 例:测试AL的内容是否为负数。 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS ;否则(正数)不转移 MINUS: ,(5) 测试指令TEST,9,2.移位指令,(1)非循环移位指令 算术左移指令 SAL(Shift Arithmetic Left) 算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Left) 逻辑右移指令 SHR(Shift Right) 这4条指令的格式相同,以SAL为例: SAL mem/reg,CL ;移位位数大于1时 1 ;移位位数等于1时,10,移位指令执行的操作如下图所示:,最低位,最高位,CF,0,(a)算术/逻辑左移 SAL/SHL,最低位,最高位,CF,(b)算术右移 SAR,最低位,最高位,CF,(c)逻辑右移 SHR,0,非循环移位指令功能示意图,11,算术移位把操作数看做有符号数; 逻辑移位把操作数看做无符号数。 移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中。例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位 影响C,P,S,Z,O标志。 结果未溢出时: 左移1位操作数*2 右移1位操作数/2,12,例:把AL中的数x乘10 因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下: SAL AL,1 ; 2x MOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10x,13,不含进位位的循环左移指令 ROL 不含进位位的循环右移指令 ROR 含进位位的循环左移指令 RCL 含进位位的循环右移指令 RCR 格式同非循环移位指令。 移位位数放在CL寄存器中,如果只移1位, 也可以直接写在指令中。 循环移位指令只影响标志位CF和OF。,(2)循环移位指令,14,这4条指令的功能如下图示:,最低位,最高位,CF,(a) ROL,最低位,最高位,CF,(c) RCL,最低位,最高位,CF,(b) ROR,最低位,最高位,CF,(d) RCR,循环移位指令功能示意图,15,用移位操作代替乘除法可提高运算速度 例:前例中计算 x10。 (1)采用乘法指令: MOV BL,10 MUL BL 共需7077个T周期。 (2)采用移位和加法指令: SAL AL,1 ; 2T MOV AH,AL ; 2T SAL AL,1 ; 2T SAL AL,1 ; 2T ADD AL,AH ; 3T 只需11个T周期,仅相当于乘法的1/7。,16,循环移位举例:,例1:将AL的高4位与低4位互换。 MOV CL,4 ROL AL,CL 例2:将1A00H内存单元中的双字循环左移1位。 CMP 1A00H,8000H CMC RCL WORD PTR1A02H,1 RCL WORD PTR1A00H,1,17,例:设在1000H开始存有四个压缩的BCD码12、34、56、78。要求把它们转换为ASCII码存放在3000H开始的单元中。 假定DS、ES都已设置为 数据段的段基址。 程序见下页。,1000H,3000H,12,34,56,78,32H,31H,34H,33H,36H,35H,38H,37H,18,MOV SI,1000H ;SIBCD首址 MOV DI,3000H ;DIASCII首址 MOV BX,4 ;置计数器初值 BBB: MOV AL,SI ;ALBCD码,第一次取12H AND AL,0FH ;屏蔽高4位02H OR AL,30H ;转换为ASCII码32H STOSB ;保存结果 LODSB MOV CL,4 SHR AL,CL ;逻辑右移4位 OR AL,30H ;得到高4位ASCII码 STOSB ;保存结果 DEC BX ;(BX)(BX)-1 JNZ BBB ;(BX)0,则继续循环,19,作业,P152-P153 3.1、 3.2、 3.7、 3.9、 3.13 、3.16,20,3.3.4 串操作指令,串:顺序放在内存中的一组相同类型的数据。 串操作:对串中的元素进行相同的操作。 串操作的寻址方式: 源操作数指针DS:SI(DS可超越) 目的操作数指针ES:DI 每次串操作后: 串操作指令自动修改SI和DI字节1,字2。DF标志决定。(注意:退出串操作后,指针指向最后操作的元素的下一个元素) 可完成两个存储单元之间的传送和比较操作(也仅是串指令可以),21,重复前缀 有的串操作指令前面可加上重复前缀REP。当使用REP前缀时,该指令重复执行,重复执行次数由CX决定(带有REP前缀的串操作指令每执行一次,CX自动减1)。 重复前缀包括: REP CX0 时重复执行 REPE/REPZ CX0ZF=1时重复执行 REPNE/REPNZ CX0ZF=0时重复执行,22,串指令使用的一般方法,设置源串地址,设置目标串地址,设置串长度,设置操作方向DF,串指令,MOV SI, 源串首地址 (或LEA SI, 源串),MOV DI, 目的串首地址 (或LEA DI, 目的串),MOV CX, 串长度,CLD(或STD),串指令,23,指令执行的操作为: MOVSB: (ES):(DI)(DS):(SI) SI1, DI1 MOVSW: (ES):(DI+1)(DI)(DS):(SI+1)(SI) SI2, DI2 指令也可写成:MOVS dest,src 但要求: src用DS:SI寻址,dest用ES:DI寻址 传送是字节还是字,由操作数的类型决定,串传送指令MOVSB / MOVSW,24,串传送指令使用举例,用串传送指令实现200个字节的数据传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,25,串比较指令CMPSB / CMPSW,指令执行的操作为: CMPSB: (DS):(SI)-(ES):(DI) SI1, DI1 CMPSW: (DS):(SI+1)(SI)-(ES):(DI+1)(DI) SI2, DI2 指令也可写成:CMPS dest, src 比较的结果只反映在标志位上,串本身无变化。 本指令可用来检查两个串是否相等。,26,串扫描SCASB / SCASW,执行的操作: 对字节:(AL)(ES):(DI) DI1 对字: (AX)(ES):(DI1)(DI) DI2 搜索指令执行的仍是比较(减法)操作,结果只影响标志位。 要搜索的关键字放在AL(字节)或AX(字)中。 本指令用于在串中查找指定的信息。,27,SCAS指令加上重复前缀后,可对串进行连续扫描比较: 若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。 若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。,28,例:在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图) 在屏幕上显示一个字符的 指令段如下:(参见附录C.3) MOV DL, MOV AH,2 INT 21H 实现题目要求的程序段见下页:,1000H,41,42,43,44,45,46,A,B,C,D,F,. . .,ES段,E,29,MOV DI, 1000H ;(DI)串偏移地址 MOV CX, 0AH ;(CX)串长度 MOV AL, E ;搜索关键字=E CLD ;从低地址到高地址进行搜索 REPNZ SCASB ;若未找到, 继续搜索 JZ FOUND ;找到, 转至FOUND MOV DL, N ;串中无E,(DL)N JMP DONE ;转至DONE FOUND:DEC DI ;指针回退 MOV ADDR, DI ;ADDRE的地址 SUB DI, 1000H MOV NUM, DI ;NUM搜索次数 MOV DL, Y ;(DL)Y DONE: MOV AH, 2 INT 21H ;显示字符 HLT,30,执行的操作为: 对字节:(AL)(DS):(SI) SI1 对字:(AX)(DS):(SI+1)(SI) SI2 串装入指令通常不加重复前缀。 LODSB等价于: LODSW等价于: MOV AL,SI MOV AX,SI INC SI INC SI INC SI,串装入指令LODSB / LODSW,31,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,被加数,加数,数据段,8,5,6,2,9,1,6,3,SUM,结果,.,.,07H,07H,02H,06H,32,下面要求将和的结果送显示,为此,要先化成ASCII码再送显示,程序段如下: LEA SI,SUM+3 ;(SI)SUM+3 MOV CX,4 ;(CX)和长度 STD ;置DF=1,减量修改SI MOV AH,02 ;(AH)功能号 LP: LODSB ;取BCD码至AL,且(SI)(SI)-1 ADD AL,30H ;转换为ASCII码 MOV DL,AL ;(DL)字符 INT 21H ;显示字符 DEC CX JNZ LP ,33,指令的操作为: 对字节:(ES):(DI)(AL) DI1 对字:(ES):(DI+1)(DI)(AX) DI2 本指令用于把一块存储区域填充成某一初始值(即对存储区进行初始化)。 存储区域的首地址要预先设置到ES:DI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届云南省曲靖市会泽县茚旺高级中学化学高二上期末学业水平测试试题含答案
- 高级职位面试经验分享:专业序列面试题目的应对策略
- 学习2022庆祝新中国成立73周年祖国颂国庆节日庆典专题解读课件
- 万花筒的科学与艺术
- 奶酪技术与文化
- 投资项目评审指南解读
- 食品掺假检测技术
- 目的状语从句讲解
- 项目成果展示汇报
- 随性穿搭讲解
- 《医学影像检查技术学》课件-跟骨X线摄影
- 行测5000题电子版2025
- 大功率电器用电安全
- 《如何做好公益传播》课件
- 2024年中国VHB泡棉胶带市场调查研究报告
- PRS-700-312技术使用说明书
- 安全委员会汇报
- 工程例会管理制度
- 企业员工职业道德考核制度
- 产品方案设计模板
- 产科手术麻醉
评论
0/150
提交评论