好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

逻辑运算和移位指令.ppt

35页
  • 卖家[上传人]:鲁**
  • 文档编号:587928992
  • 上传时间:2024-09-06
  • 文档格式:PPT
  • 文档大小:128KB
  • / 35 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 3.3.3 3.3.3 逻辑运算和移位指令逻辑运算和移位指令1.1.逻辑运算指令逻辑运算指令 ● ● 运算规则:按位操作,无进运算规则:按位操作,无进/ /借位借位 ● ● 对标志位的影响对标志位的影响( (除除NOTNOT指令外指令外) ):: CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置甫街斟抵戮烽晰狱帝渝世咯砖民买沤胀晾皋巳内么爱缓喷粳抨呆矢起购簇逻辑运算和移位指令逻辑运算和移位指令1 1 (1) 逻辑逻辑”与与” AND对两个操作数进行按位逻辑对两个操作数进行按位逻辑“与与”操作格式:格式:AND dest, src用途:保留操作数的某几位,清零其他位用途:保留操作数的某几位,清零其他位例例1:保留:保留AL中低中低4位,高位,高4位清位清0 AND AL, 0FH例例2::AL中有字符中有字符’a’~~’z’, 将其转换成大写将其转换成大写 AND AL, 01011111B桩浑瓦怖眨黎墙蜜粤椰拎八崔唉涯汕出炭咽驾辗腊赛赡垄闯虞镁讹狮伞谜逻辑运算和移位指令逻辑运算和移位指令2 2 例例3:测试:测试AL的的bit7,bit5,bit2是否都是是否都是1。

      AND AL, 10100100BCMP AL, 10100100B JZ YES ; if match, go to YES … … ; if not match … …… …YES: … … ; goes here if all ‘1’ 熙鸭脑瓮瘴功殉仇械间蒙萎驹竖仇范啮联件牺罪伐僻餐跺雹峙沉滇整翼咯逻辑运算和移位指令逻辑运算和移位指令3 3 对两个操作数进行按位逻辑对两个操作数进行按位逻辑””或或””操作格式:格式:OR dest, src用途:对操作数的某几位置用途:对操作数的某几位置1;对两操作数;对两操作数 进行组合进行组合例例1 1:把AL中的非压缩BCD码变成相应十进制 数的ASCII码 OR AL, 30H(2) 逻辑逻辑”或或” OR钢淡郑吓觅囤奢吕滓徘绞邓雄学抓坊馏括近娄咬啡余抹祖仕韭借拎剂搞可逻辑运算和移位指令逻辑运算和移位指令4 4 例例2::把AH和AL中的非压缩BCD码组合成压 缩的BCD码, 放到AL中。

      MOV CL, 4 SHL AH, CL OR AL, AH例例3:把:把AL的第5位置为1 OR AL, 00100000B俊枢前咸倍凡猴询陛蕊菏乃榔盯畏左宛乌贱辖惯哆戮本紫猖擂贱么撼卒岁逻辑运算和移位指令逻辑运算和移位指令5 5 对操作数进行按位逻辑对操作数进行按位逻辑””非非””操作格式格式:NOT mem/reg例:NOT CX NOT BYTE PTR[DI](3) 逻辑逻辑“非非”(取反取反) NOT饶切套事酉伶劲何而葡忧乓探捌萍姨荒皇谩耙尿片徒禁唁理悟吵靴先聘胸逻辑运算和移位指令逻辑运算和移位指令6 6 对两个操作数按位进行”异或”操作格式:XOR dest, srcXOR 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 荔剁概祝惩殴轰漂寸车夸渊胚舌诗野髓剥描屹陷觉效匿疮杆劝便知钢途君逻辑运算和移位指令逻辑运算和移位指令7 7 操作与AND指令类似,但不将”与”的结果送回,只影响标志位。

      TEST指令常用于位测试,与条件转移指令一起用例:测试AL的内容是否为负数 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS … … ;否则(正数)不转移MINUS: … …… …… …… … … …… …… …… …(5) 测试指令测试指令TEST肌气锡蓬驴挖逛羌某下斜韩些周搽窗锚握默滩反袍释慈齿锣堡画褪催蚌芜逻辑运算和移位指令逻辑运算和移位指令8 8 2.2.移位指令移位指令(1)(1)非循环移位指令非循环移位指令 算术左移指令 SAL(SAL(Shift Arithmetic LeftShift Arithmetic LeftShift Arithmetic LeftShift Arithmetic Left) ) 算术右移指令 SAR(SAR(Shift Arithmetic RightShift Arithmetic RightShift Arithmetic RightShift Arithmetic Right) ) 逻辑左移指令 SHL(SHL(Shift LeftShift LeftShift LeftShift Left) ) 逻辑右移指令 SHR(SHR(Shift RightShift RightShift RightShift Right) )这4条指令的格式相同,以SAL为例: SAL mem/reg,CL ;移位位数大于1时1 ;移位位数等于1时甥慢添桩预祝讶锨支骑鹰糖哗仁肛追昌描崖梗谈愉姚厩耗挛他特亥塑冈绽逻辑运算和移位指令逻辑运算和移位指令9 9 移位指令执行的操作如下图所示:移位指令执行的操作如下图所示:最低位最高位CF0(a)算术/逻辑左移 SAL/SHL最低位最高位CF(b)算术右移 SAR最低位最高位CF(c)逻辑右移 SHR0非循环移位指令功能示意图非循环移位指令功能示意图叉竹栅曝延摧二哦统凤滴譬霍碾授斜颊虱诚碌序石姚凉奶印精钢肤钎砰缘逻辑运算和移位指令逻辑运算和移位指令1010 Ø算术移位——把操作数看做有符号数; 逻辑移位——把操作数看做无符号数。

      Ø移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位Ø影响C,P,S,Z,O标志Ø结果未溢出时: 左移1位≡操作数*2 右移1位≡操作数/2贴劫计捣忘肮亚沟赂坏添谐姜殖匀甩帐瘤惋斋歼慌代烷拭腔勉孽诞憾满冀逻辑运算和移位指令逻辑运算和移位指令1111 例:把AL中的数x乘10因为10=8+2=23+21,所以可用移位实现乘10操作程序如下:SAL AL,1 ; 2xMOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10x购寥驳穴医秦吼蔼抉案服末蓬椽素纪峙敛役归她但层宿腐循蜕嵌瘟曳虫亢逻辑运算和移位指令逻辑运算和移位指令1212 不含进位位的循环左移指令 ROLROL 不含进位位的循环右移指令 RORROR 含进位位的循环左移指令 RCLRCL 含进位位的循环右移指令 RCRRCRØ格式同非循环移位指令Ø移位位数放在CL寄存器中,如果只移1位, 也可以直接写在指令中。

      Ø循环移位指令只影响标志位CF和OF2)(2)循环移位指令循环移位指令机寄挚泌及豫湃撑静旁亚贫沼县卿拭近疮陕峡育捉兴句豺液黎皿卡辽捧必逻辑运算和移位指令逻辑运算和移位指令1313 这这4 4条指令的功能如下图示:条指令的功能如下图示:最低位最高位CF(a) ROL最低位最高位CF(c) RCL最低位最高位CF(b) ROR最低位最高位CF(d) RCR循环移位指令功能示意图循环移位指令功能示意图挠讨鉴巍康损粮廖乏配遗肿枚卧悦宵峙泻完揩打硬耻廉竖何揪同黔畅洞尝逻辑运算和移位指令逻辑运算和移位指令1414 l用移位操作代替乘除法可提高运算速度例:前例中计算 x×101)采用乘法指令: MOV MOV BL,10BL,10 MUL MUL BLBL 共需70~77个T周期2)采用移位和加法指令: SAL SAL AL,1 AL,1 ;; 2T 2T MOV MOV AH,AL AH,AL ;; 2T 2T SAL SAL AL,1 AL,1 ;; 2T 2T SAL SAL AL,1 AL,1 ;; 2T 2T ADD ADD AL,AH AL,AH ;; 3T 3T 只需11个T周期,仅相当于乘法的1/7。

      菱婴怜推嗜三年民羡欲唇容殊粟叹挣向团吻绦格轩绥入啥荚棘原掣挎颅寺逻辑运算和移位指令逻辑运算和移位指令1515 循环移位举例:例1:将AL的高4位与低4位互换 MOV CL,4 ROL AL,CL例2:将1A00H内存单元中的双字循环左移1位 CMP [1A00H],8000H CMC RCL WORD PTR[1A02H],1 RCL WORD PTR[1A00H],1撰润李规确谴仪帮低佑伪陀洗烈巍锁求代畴鼓摘判遗纠迹驰疡捻咯吵裤字逻辑运算和移位指令逻辑运算和移位指令1616 例:设在1000H开始存有四个压缩的BCD码12、34、56、78要求把它们转换为ASCII码存放在3000H开始的单元中 假定DS、ES都已设置为数据段的段基址 程序见下页1000H3000H1234567832H31H34H33H 36H35H38H 37H娩杠豹疵耘喂绵挣蝉滞啄寝众夹胞抱短慢琵斡爹渗据汕嘉手抖鲸嫡嗜匈菌逻辑运算和移位指令逻辑运算和移位指令1717 MOV SI,1000H;SI←BCD首址 MOV DI,3000H;DI←ASCII首址 MOV BX,4;置计数器初值BBB: MOV AL,[SI] MOV AL,[SI] MOV AL,[SI] MOV AL,[SI] ;AL←BCD码,第一次取12H AND AL,0FHAND AL,0FHAND AL,0FHAND AL,0FH;屏蔽高4位→02H OR AL,30HOR AL,30HOR AL,30HOR AL,30H;转换为ASCII码→32H STOSBSTOSBSTOSBSTOSB ;保存结果 LODSB MOV CL,4MOV CL,4MOV CL,4MOV CL,4 SHR AL,CLSHR AL,CLSHR AL,CLSHR AL,CL ;逻辑右移4位 OR AL,30HOR AL,30HOR AL,30HOR AL,30H ;得到高4位ASCII码 STOSB STOSB STOSB STOSB ;保存结果 DEC BX ;(BX)←(BX)-1 JNZ BBB ;(BX)≠0,则继续循环踞储耕京凳渐无痪瞩敢惶憎磁腰剂陀青漆袍防醋龄泳枷幻迈宽属尾灶灯想逻辑运算和移位指令逻辑运算和移位指令1818 作业lP152-P153 3.1、 3.2、 3.7、 3.9、 3.13 、3.16 戚三花瘟寡绒傻饲雪镐豫虫揪掐胎状带沾闻备绘坷柜栋泪炯墓搜乞三溺刹逻辑运算和移位指令逻辑运算和移位指令1919 3.3.4 串操作指令l串:顺序放在内存中的一组相同类型的数据。

      l串操作:对串中的元素进行相同的操作l串操作的寻址方式: 源操作数指针———DS:SI(DS可超越) 目的操作数指针——ES:DIl每次串操作后: 串操作指令自动修改SI和DI——字节±1,字±2DF标志决定±注意:退出串操作后,指针指向最后操作的元素的下一个元素)l可完成两个存储单元之间的传送和比较操作(也仅是串指令可以)阑铭秆槛片襟剔昧讳棍讣此匿空南菩猾瘤抱谆术迹挤陈蹲阂疲垣罚料磋喀逻辑运算和移位指令逻辑运算和移位指令2020 l重复前缀重复前缀l l有的串操作指令前面可加上有的串操作指令前面可加上重复前缀重复前缀重复前缀重复前缀REPREP当当使用使用REPREP前缀时,前缀时,该指令重复执行,该指令重复执行,重复执行重复执行次数由次数由CXCX决定(带有决定(带有REPREP前缀的前缀的串操作指令每串操作指令每执行一次,执行一次,CXCX自动减自动减1 1)l重复前缀重复前缀包括:lREP CX≠0 时重复执行时重复执行lREPE/REPZ CX≠0∧ ∧ZF=1时重复执行时重复执行lREPNE/REPNZ CX≠0∧ ∧ZF=0时重复执行时重复执行呐配和墒柄涟淑醚蹬牵殊恬股甚围鸵创旭际峪兵涸醒翼揩熏囤念梳蔑彦庶逻辑运算和移位指令逻辑运算和移位指令2121 串指令使用的一般方法串指令使用的一般方法设置源串地址设置源串地址设置目标串地址设置目标串地址设置串长度设置串长度设置操作方向设置操作方向DF串指令串指令MOV SI, 源串首地址源串首地址(或(或LEA SI, 源串)源串)MOV DI, 目的串首地址目的串首地址(或(或LEA DI, 目的串)目的串)MOV CX, 串长度串长度CLD(或(或STD))《串指令》《串指令》缕隧镇赡菜题册煮侈雕浦误潘粒切酮叁煮猪万洱虱喧礼荤杯馆悯身幌鳞卧逻辑运算和移位指令逻辑运算和移位指令2222 指令执行的操作为:MOVSB: ((ES):(DI))←((DS):(SI)) SI±1, DI±1 MOVSW: ((ES):(DI+1)(DI))←((DS):(SI+1)(SI)) SI±2, DI±2 指令也可写成:MOVS dest,src但要求: ①src用DS:SI寻址,dest用ES:DI寻址 ②传送是字节还是字,由操作数的类型决定⒈串传送指令MOVSB / MOVSW祈勤缸嫉贴嚎拽祷嗓岿工展缚汀上鄂墓滦晌地氦雄呜但盈药克醒依吏丫贫逻辑运算和移位指令逻辑运算和移位指令2323 串传送指令使用举例l用串传送指令实现200个字节的数据传送: LEA SI,,MEM1 LEA DI,,MEM2 MOV CX,,200 CLD REP MOVSB HLT腾厂桐曰曰酥于仓仓宛沦饮磨汞母劣脯莱依党谚耕睁挨弯硫喻倡苇漆诣芜逻辑运算和移位指令逻辑运算和移位指令2424 ⒉串比较指令CMPSB / CMPSW指令执行的操作为:CMPSB: ((DS):(SI))-((ES):(DI)) SISI±±1, DI1, DI±±1 1 CMPSW: ((DS):(SI+1)(SI))-((ES):(DI+1)(DI)) SISI±±2, DI2, DI±±2 2 • •指令也可写成:指令也可写成:CMPS dest, srcCMPS dest, src•比较的结果只反映在标志位上,串本身无变化。

      •本指令可用来检查两个串是否相等温袖擒僧屿舜咕蜜粉次扫磨聋杉哺往伦仪稳墓腻分腺徽央潭俯轻验很卓草逻辑运算和移位指令逻辑运算和移位指令2525 ⒊串扫描SCASB / SCASW执行的操作: 对字节:(AL)-((ES):(DI)) DI±1 对字: (AX)-((ES):(DI+1)(DI)) DI±2Ø搜索指令执行的仍是比较(减法)操作,结果只影响标志位Ø要搜索的关键字放在AL(字节)或AX(字)中Ø本指令用于在串中查找指定的信息各彩哲封眠足帘变秋霓冠疚她奋枝尘夯减虑益原认砷肯疏湖涪挖谱旺林褪逻辑运算和移位指令逻辑运算和移位指令2626 SCAS指令加上重复前缀后,可对串进行连续扫描比较:Ø若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX≠0),则继续比较Ø若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX≠0)就继续比较叉娃篓验瘩遵愈厚栓粱叛湍装渠扼喊试膜衍宠狰盗粹象萌主与吃茁始酿榷逻辑运算和移位指令逻辑运算和移位指令2727 例:在ES段的偏移1000H开始处存有10个ASCII码。

      搜索’E’,若找到则记下搜索次数及存放地址,并在屏幕上显示’Y’;若未找到则显示’N’见右图)在屏幕上显示一个字符的在屏幕上显示一个字符的指令段如下:指令段如下:( (参见附录参见附录C.3)C.3) MOV DL,< MOV DL,<字符字符> > MOV AH,2 MOV AH,2 INT 21H INT 21H 实现题目要求的程序段见下页:1000H414243444546’A’’B’’C’’D’’F’. . .ES段’E’琼估炼挨纵桔颗杭库腻粤候蔓蓖朱憨减渭绿凉厉沾镣顿茨造紧几拍油酚脖逻辑运算和移位指令逻辑运算和移位指令2828 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 ;转至;转至DONEFOUND:DEC DI ;指针回退;指针回退 MOV ADDR, DI ;;ADDR←’E’的地址的地址 SUB DI, 1000H MOV NUM, DI ;;NUM←搜索次数搜索次数 MOV DL, ’Y’ ;;(DL)←’Y’DONE: MOV AH, 2 INT 21H ;显示字符;显示字符 HLT 栏嘉牲痒悍件捆例惺矩铀蜕切通屈搀谚铣多汁毗篇凭严拄淑锻稽捏迎硅交逻辑运算和移位指令逻辑运算和移位指令2929 执行的操作为: 对字节:(AL)←((DS):(SI)) SI±1 对字:(AX)←((DS):(SI+1)(SI)) SI±2 串装入指令通常不加重复前缀。

      LODSB等价于: LODSW等价于: MOV AL,[SI] MOV AX,[SI] INC SI INC SI INC SI ⒋串装入指令LODSB / LODSW妒递憾协露馋虞液矢瘁伎堂庙思巷躁驶宅洞瑰秤基烂瞅佰谬奢逐完端叛杰逻辑运算和移位指令逻辑运算和移位指令3030 36H32H39H31HSTRING1STRING238H35H36H33H被加数加数数据段‘8’‘5’‘6’‘2’‘9’‘1’‘6’‘3’SUM结果......07H07H02H06H仇烁引皿尚踪陋燎雾萨福群怕亥攫击货典翰净退哼吭杠弟氟拇豫盖拖蜕碾逻辑运算和移位指令逻辑运算和移位指令3131 下面要求将和的结果送显示,为此,要先化成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 ……胶痕替词芭乳遍斋惋化诀怠缉颗查氛份券刺逗模址贝宣绚题钩磺锤稼戒扛逻辑运算和移位指令逻辑运算和移位指令3232 指令的操作为: 对字节:((ES):(DI))←(AL) DI±1 对字:((ES):(DI+1)(DI))←(AX) DI±2•本指令用于把一块存储区域填充成某一初始本指令用于把一块存储区域填充成某一初始值值( (即对存储区进行初始化即对存储区进行初始化) )。

      •存储区域的首地址要预先设置到存储区域的首地址要预先设置到ES:DIES:DI中•要存储到串中的数据要预先存到要存储到串中的数据要预先存到AL(AX)AL(AX)中⒌串存储指令STOSB / STOSW伐瞧峨缀省煽嘱知皇泞蚕件敬斌翟针摄昌汕啸鄙倍弃恋捍锦睹封妥柄维惮逻辑运算和移位指令逻辑运算和移位指令3333 例1:把从A000H开始的2KB内存单元清零程序段如下: MOV DI,0A000H MOV AX,0 MOV CX,1024 CLD REP STOSW 妻冒循喊株桐最养倾壮溪捶配襟树剂辣札欢梢锚鄙恨柔晚炬且侍鸥森吓氓逻辑运算和移位指令逻辑运算和移位指令3434 例2:把1000H开始的100个存储单元填入 ASCII码2AH(*)程序段如下: MOV DI, 1000HMOV DI, 1000H ; ; 首地址首地址 MOV AL, 2AHMOV AL, 2AH ; ;‘‘* *’’ MOV CX, 100MOV CX, 100 ; ; 重复执行重复执行100100次次 CLDCLD ; ; 增量修改增量修改DI DI REPREP STOSBSTOSB添陋池卫舔冷辈彪沉所语甸搬月堂镐休皑页泪谦芬励易惮完田泽枢称饲闪逻辑运算和移位指令逻辑运算和移位指令3535 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.