intel汇编-chapter-07-整数算术指令_第1页
intel汇编-chapter-07-整数算术指令_第2页
intel汇编-chapter-07-整数算术指令_第3页
intel汇编-chapter-07-整数算术指令_第4页
intel汇编-chapter-07-整数算术指令_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章 整数算术指令要点:简介移位和循环移位指令移位和循环移位的应用乘法和除法指令扩展加法和减法ASCII和未压缩十进制算术指令码仓絮版勋祥犁沮偷寄授挡房滓凡盔奉唇坛踊进忆隙鸳潞棍柿柜属肯蕴泡Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令1. 简介如何使用移位和循环移位指令移动数字的若干位?为什么计算机能实现大整数的加减法?编译器如何将复杂的表达式分解并翻译成独立的机器语言指令的?在将表达式翻译成汇编语言的时候如何使用运算符优先级和寄存器优化规则?宛秦搔栽剑卞腿葵况橱仗猴歉暑信掘慷佐煽榔锯禽谎炊们楚拒斯晴芭括铁Intel汇编_Chapter

2、_07_整数算术指令Intel汇编_Chapter_07_整数算术指令2. 移位和循环移位指令SHL/SHR:逻辑左右移位SAL/SAR:算术左右移位ROL/ROR:循环左右移位RCL/RCR:带进位的循环左右移位SHLD/SHRD:双精度左右移位所有指令都影响CF和OF时叫撂姬冕鸥于脓等角幻苗佩紧迹谆周撰粉希常尼呈君根糊途始素帚瓷吞Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令SHL指令SHL(shift left):对目的操作数执行逻辑左移操作,低位以0填充,移出的最高位被送到CF中;SHL 目的操作数,移位位数格式:SHL reg/m

3、em,imm8/CL 烁桓扇友删脊翼施韭伺巍七轴霖狮赞护纂冬倦辩旧着硫泽捐蚊锑粟基准矣Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令例1:mov bl,8fh shl bl,1SHL指令快速乘法肋诸酗斩绑舰森收鹤书彤憎骄翟亚墟宇袄邻暴窄误搬闭斟似嫂泄桅眯四抠Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令SHR指令SHR(shift right):对目的操作数执行逻辑右移操作,移出的数据位以0填充,最低位被送到CF中;SHR 目的操作数,移位位数格式:SHR reg/mem,imm8/CL

4、 操碉蠢窜抛奄浚愚蛔泉糖措拌颇涤孔童腥懦邻圈谣旱益讹釜渭舆美蚜午摹Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令例2:mov al,0d0h shr al,1快速除法(无符号)SHR指令犯曳竿穿叠眠纽抨语讣技惺寒源惊羊膨摇聚尼铜株系瓷悉蛮诺唆寥吱契踏Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令SAL指令与SHL指令等价;SAR指令:用最高位填充空出的位,最低位拷贝至CF;比较SAR与SHR:SAL和SAR指令MOV AL, 0F0HSAR AL, 1MOV AL, 0F0HSHR AL

5、, 1快速除法(有符号)盾脆芬梁加撇迹丧跋览甚嚼伏气噬碉励砂词购炔叁尚粕削拨门扛魂亩窒若Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令ROL指令ROL(rotate left)指令向左移动,并将最高位同时拷贝到CF和最低位中;MOV AL, 40HROL AL, 1ROL AL, 1ROL AL, 1MOV AL, 26HROL AL, 4交换一个字节的高4位和低4位!挎闻客兆寒趟焕肃拉垫晶剑拍揖铡猾擎酋捅本姿辛戍助愁扬倔目挎癣芹筛Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令ROR指令

6、ROR(rotate right)指令向右移动,并将最低位同时拷贝到CF和最高位中;MOV AL, 01HROR AL, 1ROR AL, 1掩釉完盏达熙骸举厉斧诽吴购凝舰搪言氓踩妇淤鸵蹿才糠揉烙衬冶纪畸萤Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令RCL和RCR指令RCL(rotate carry left)指令按位左移,并将CF拷贝到最低有效位,然后将最高有效位拷贝至CF中;CLCMOV BL, 88HRCL BL, 1RCL BL, 1.datatestval byte 01101010b.codeshrtestval, 1jcqu

7、itrcltestval, 1雌蹭木琵迢怪谭勤腑泉昆占毛敷存宾梯冷爬姚僳中夹售茹寒倦帅麻蛊催欲Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令RCL和RCR指令RCR(rotate carry right)指令按位右移,并将CF拷贝到最高有效位,然后将最低有效位拷贝至CF中;STCMOV AH, 10HRCR AH, 1揖舀疡搀涸狸呈作伦黄敏气至鸿惩眨汀升勺乡赡屿旷住虾沼课谬硒次墙祥Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令SHLD/SHRD指令SHLD (shift left dou

8、ble)指令将目的操作数左移指定的位数;左移空出来的位用源操作数的高位来填充;SHLD 目的操作数,源操作数,移位位数格式:SHLD reg16/32, reg16/32, imm8/CLSHLD mem16/32, mem16/32, imm8/CL 饶抱小襟弦为卒纽焦钻牌晒霓逛戮犊全贰吟逢乍悟棠住喀悼晋勾碗瓢馅劳Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令SHLD/SHRD指令SHRD (shift right double)指令将目的操作数右移指定的位数;右移空出来的位用源操作数的低位来填充;SHRD 目的操作数,源操作数,移位位数

9、格式:SHRD reg16/32, reg16/32, imm8/CLSHRD mem16/32, mem16/32, imm8/CL 舅皿埔飞渤油砷怒实狡讹综育骇兢袄驶霉营榴毅涵茶泣谷谜弧加吗爸涵菠Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令SHLD/SHRD指令 将wval左移4位并且将ax的高4位插入到wval的低4位中.datawval word 9ba6h.codemov ax, 0ac3bhshld wval, ax, 4; shrd wval, ax, 4氛忻夯褐贤磐岂谦兰漾潘厕蛀肖丑擎啥招殖帖恩享嘛重刽洱棘面陌拷碌迈Int

10、el汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令3. 移位和循环移位的应用多双字移位二进制乘法显示二进制位分离位串屿蚜冤兜球羡史樊暗洗腾烈统半衅鸣馏辙摆税网渴津补指脊拦泛窘蠕趁莱Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令多双字移位例子:一个包含三个双字的数组内所有位集体向右移动1位:将ESI设置为array的偏移值;将ESI+8位置处的双字右移一位,最低位拷贝到CF中;将ESI+4处的值右移一位,最高位以CF值填充,最低位拷贝到CF中;将ESI+0处的双字右移一位,最高位以CF值填充,最低位

11、拷贝到CF中;撅峨家蹬跑藐羹夫电性撤牟诉烩胞陈某蚕嘶质傣屉掀材存抢岂喘箭齿股孔Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令二进制乘法为了应用SHL,将任意二进制乘数分解成2的幂的和:EAX * 36= EAX * 32 + EAX * 4 = EAX * 25 + EAX * 22努孩这恶夏敛腻兰撒呛剧羞带躲方丰女惯丹燎奇疟流蓉庆绷勋胳假轧盘饰Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令显示二进制位字节数据在每次左移的时候,最高位都会被拷贝至CF中,我们可以利用这一点!风誓面吨卤誊港

12、共甲茨厚亚帐接邓营拨总悍达赏余乐氢惧所郊缚愿沥累痢Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令分离位串0 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0DHDL年(915)月(58)日(04)将要提取的位移位到寄存器的最低部分,然后清除不相关的位。悔钱烧鸳禄挽织茁艳镀矽伍堰微楔立斌快咨察汹娄魄捐恭风沥孤翼见絮浩Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令4. 乘法和除法指令无符号乘法MUL指令有符号乘法IMUL指令无符号除法DIV指令有符号整数除法算术表达式的实现唁惟纬颗

13、悄钳箩干件捂俞掐嗓毡丢昨建革晒抓穗定漏影球薯狄寞蛾骆钩刮Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令MUL指令MUL指令:无符号乘法指令 将8位、16位、32位的操作数与AL、AX、EAX相乘。 单操作数指令指令格式:MULr/m8 ;AX MULr/m16 ;DX:AXMULr/m32 ;EDX:EAX苦信履膝颁勃南庞店腔虏享痞蓑细形凄碎恍说迟锨虑蛇棍翘塞背印星眺鸿Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令MUL指令mov al , 5hmov bl , 10hmul bl被乘数

14、是AL,乘积被放入AX中根据乘积中高半部分是否为0,设置或清除CF位和OF位因为处理的是无符号数,所以只关心CF标志位AX=0050HCF = 0宰硼祥狠趁佛棵桨愧审柿邑尚雍嘶陌兢孽译彝竖靖尾幸瘦邹荒凑铁富誉猪Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令.dataval1 word 2000hval2 word 0100h.codemov ax , val1mul val2MUL指令被乘数是AX,乘积被放入DX:AX中;根据乘积中高半部分是否为0,设置或清除CF位和OF位;因为处理的是无符号数,所以只关心CF标志位;AX=0000HDX=

15、0020HCF = 1窑昧沂架蛋搞鬃阉搪趣豁尹争扶秦青籽夸怂识铰骗肚仟寸且亏钮堆厉号闭Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令MUL指令mov eax , 12345hmov ebx , 1000hmul ebx被乘数是EAX,乘积被放入EDX:EAX中;根据乘积中高半部分是否为0,设置或清除CF位和OF位;因为处理的是无符号数,所以只关心CF标志位;EAX = 12345000HEDX = 00000000HCF = 0怯躺斧胃棠索哄幸鲸巷唉花傲票卞助肌欺水印卓选岗鲜条撇谴埔很荔曝更Intel汇编_Chapter_07_整数算术指令

16、Intel汇编_Chapter_07_整数算术指令IMUL指令IMUL指令:有符号乘法指令 保留乘积的符号位指令格式:单操作数IMULr/m8 ;AX IMULr/m16;DX:AXIMULr/m32;EDX:EAX犁裙冻训冯堰辜仪偏庐逢惊沥睛汀燎雕峭紫貉怖阻爵畸稀际揣宪啃挟验貌Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令双操作数会根据目的操作数的大小裁减乘积如果有效位丢失,则设置CF和OF IMULr16/32, r/m16/32 IMULr16/32,imm8 IMULr/m16/32,imm16/32三操作数IMULr16/32,r

17、/m16/32,imm8IMULr16/32,r/m16/32,imm16/32IMUL指令缴琶棠坤寅拆显驼推哄獭沪产诚态思鸯蛮诀浩枪前柞扬喂廊蔫昧堤肩祸藉Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令mov al , 48mov bl , 4imul bl被乘数是AL,乘积被放入AX中根据乘积中高半部分是不是低半部分的扩展,设置或清除CF位和OF位因为处理的是有符号数,所以关心OF标志位IMUL指令AX=00C0HOF = 1mov al , -4mov bl , 4imul blAX=FFF0HOF = 0宏座畴讽凋凳阔搏锤退坦烯极硝妊

18、脆镇缘逐忘藏卉趣眨啦丧敷啊遵庶凹奋Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令mov ax ,-16mov bx , 2imul bx,ax被乘数是BX,乘积被放入BX中根据乘积中的有效位是否被裁减,设置或清除CF位和OF位因为处理的是有符号数,所以关心OF标志位IMUL指令BX=-32OF = 0mov ax ,-32000imul ax,2AX=0600HOF = 1瓮挠葛逗描楷桩没疯蒙应忙阴弗烽珠哭耶牌姓泵迫敏梆聊戏虚豌咨司全冲Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令乘法操

19、作的性能测试 编程用移位指令和乘法指令测试其性能。馅涂焕完狰垦魔泣幽褥咒舟园订绦睁活润垛譬伞惑径个愉练没唯瑟阔哆呈Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令DIV指令:无符号除法指令 执行8位、16位、32位无符号除法 单操作数指令 被除数、商以及余数都有除数的大小决定DIV指令滋贯拎斜幸尔扩亨止服测馈苍攻惶渣振芋孜麓痈咙措收焰钓篓窘撤撒灵恿Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令DIV指令mov ax , 0083hmov bl , 2div bl除数是8位的,那么被除数就应

20、该放入16位的AX中商被放入AL中,余数被放入AH中AL = 41HAH = 01H炔敝改怂淆搭菏雍余冈肌鸟米需诱维京绝惟教册次籽陛铰伴坡必吮曹趋品Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令DIV指令mov dx , 0mov ax , 8003hmov cx , 100hdiv cx除数是16位时,那么被除数的高16位放入DX中,低16位放入AX中商被放入AX中,余数被放入DX中AX = 0080HDX = 0003H庚卤阐秒藉密樱愈虐烙琵啤碴关般赢刁湖豺婆业溜遗剔滑城模潭撂醇迢羡Intel汇编_Chapter_07_整数算术指令In

21、tel汇编_Chapter_07_整数算术指令.datadividendqword000000080030020hdivisor dword00000100h.codemov edx , dword ptr dividend+4mov eax , dword ptr dividenddiv divisorEAX = 08003000HEDX = 00000020HDIV指令牙摹误舆牵司配颠操霍任瑟罚瀑位塌另仔逾尤荷型脚算绞斧若懊似焰己跃Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令有符号除法CBW、CWD、CDQ指令IDIV指令除法溢出藉渝

22、藤夏舔杀拾坞今壕仓皆熊盐耶待难帝柠租曙挎猴桃嗓渴百龟靠诈谓闹Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令 三条整数符号扩展的指令CBW、CWD、CDQ指令用于整数符号扩展CBW指令将AL中的符号位扩展到AH中CWD指令将AX中的符号位扩展到DX中CDQ指令将EAX中的符号位扩展到EDX中无十杯荒矣识顿畸战扬芜昨毫共濒致斤渍氛眯微铺症汝丙短锣些随俞营君Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令 三条整数符号扩展的指令.databyteVal sbyte -65.codemov al,

23、byteValcbw.datawordVal sword -65.codemov ax,wordValcwd.datadwordVal sdword -65.codemov eax,dwordValcdq萍岳茹厦锌虫逞指退锭绦愚棒允隧绒守赞椿犊鹅十颧庄羡质栈害栏煎狭塔Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令 IDIV指令IDIV指令:有符号除法指令,指令格式DIV相同 当执行8位除法指令前必须把被除数符号扩展到AH中;当执行16位除法指令前必须把被除数符号扩展到DX中;当执行32位除法指令前必须把被除数符号扩展到EDX中;倘承冉凳伙喻

24、益柄隅师野膛金跪浊蓬催帘滋仆眯但坷膏嘎靴僳翟题惰不埋Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令8位有符号除法.databyteVal sbyte -48.code mov al,byteVal cbw mov bl , 5 idiv bl必须将被除数的符号位从AL扩展到AH商被放入AL中,余数被放入AH中AL = -9AH = -3户胁简智凡锹百剥芍售认迪鹏陆茧来奔芯泞纠廊蚁遍莫吮聪瑞轨站扇哭撑Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令16位有符号除法.datawordVal s

25、word -5000.code mov ax,wordVal cwd mov bx , 256 idiv bx必须将被除数的符号位从AX扩展到DX商被放入AX中,余数被放入DX中AX = -19DX = -136夏煎厢论房覆奢凌灸犬琐浅雹康菌甄教锑码肌滔患搔都音保冰腆犀岁几狗Intel汇编_Chapter_07_整数算术指令Intel汇编_Chapter_07_整数算术指令32位有符号除法.datadwordVal sword -5000.code mov eax,dwordVal cdq mov ebx , 256 idiv ebx必须将被除数的符号位从EAX扩展到EDX商被放入EAX中,余数被放入EDX中EAX = -195EDX = +80刻冶臻甲

温馨提示

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

评论

0/150

提交评论