汇编语言程序设计06整数运算指令与高级过程.ppt
《汇编语言程序设计06整数运算指令与高级过程.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计06整数运算指令与高级过程.ppt(36页珍藏版)》请在三一办公上搜索。
1、汇编语言程序设计,_06_整数运算指令与高级过程大连理工大学软件学院_朱明2009年5月31日_ V1.1,提问与回顾,第五章内容中我们介绍并练习了外部链接库中的一些常用过程 调用这些过程使用什么指令?在逻辑运算部分内容中 AND指令用于进行逻辑与运算,但他在改变标志位的同时也改变了目的操作数,什么指令能够实现逻辑与运算功能但只改变标志位而不改变操作数?同样,哪条指令与SUB类似但只改变标志位?该条指令比较后,如相等则跳转,应使用什么指令?尝试将下面的为指令转化成为汇编代码和决策伪指令,汇编语言程序设计-朱明,2,if(bx cx)X=1;,提问与回顾,SHL(Shift Left),逻辑左移
2、操作 最低位以0填充,最高位传送到CF中 SHR(Shift Right),逻辑右移操作 最高位以0填充,最低位传送到CF中 左移和右移的意义:乘法和除法,逻辑移位,汇编语言程序设计-朱明,3,SHL/SHRreg,imm8mem,imm8reg,CLmem,CL,moval,0D0h,AL=1101 0000b,shral,1,AL=0110 1000b,CF=1,Section 1,逻辑移位,课堂练习题目位串分离 如果需要从一个字或者字节中的特定区域提取一系列位,这些位称为位串 例如文件的时间戳(文件最后访问时间)的分离,汇编语言程序设计-朱明,4,Section 1,DH,DL,year
3、,month,day,moval,dlandal,01Fhmovday,al,movax,dxshrax,5andal,0Fhmovmonth,al,moval,dhshral,1andah,0haddax,1980movyear,ax,SAL(Shift Arithmetic Left),算术左移操作 最低位以0填充,最高位传送到CF中,同SHL SAR(Shift Arithmetic Right),算术右移操作 最高位以自身填充,最低位传送到CF中 右移的算术意义:有符号数除法,算术移位,汇编语言程序设计-朱明,5,SAL/SARreg,imm8mem,imm8reg,CLmem,CL,
4、moval,-128,AL=1000 0000b,saral,4,AL=1111 1000b,Section 1,ROL(Rotate Left),循环左移操作 最低位以最高位填充,最高位传送到CF中 ROR(Rotate Right),循环右移操作 最高位以最低位填充,最低位传送到CF中 循环移位不丢弃数据 可用来将特定的位移入CF中,循环移位,汇编语言程序设计-朱明,6,ROL/RORreg,imm8mem,imm8reg,CLmem,CL,Section 1,SHLD(Shift Left Double),双精度左移操作 目的操作数向左移指定位数 空位用源操作数的高位填充 源操作数不会有
5、任何改变 SHRD(Shift Right Double)目的操作数向右移指定位数 空位用源操作数的低位填充 源操作数不会有任何改变,双精度移位,汇编语言程序设计-朱明,7,SHLD/SHLRreg16,reg16,CL/imm8mem16,reg16,CL/imm8reg32,reg32,CL/imm8mem32,reg32,CL/imm8,Section 1,bx,ax,movbx,9BA6hmovax,0AC36hshldbx,ax,4,乘法指令,MUL无符号数乘法指令 8位、16位或32位被乘数依次为AL、AX或EAX 对应的乘数可以是尺寸相等的寄存器或内存 对应结果保存在AX、DX:
6、AX、EDX:EAX中 CF标值位的影响高半部分如果不为0则CF位置位,汇编语言程序设计-朱明,8,MULreg/mem8reg/mem16reg/mem32,Section 2,moveax,12345hmovebx,10000hmulebx,EDX:EAX=0000 0001 2345 0000hCF=1,乘法指令,IMUL有符号数乘法指令IMUL有单操作数、双操作数和三操作数三种格式 单操作数的情况与MUL相同 此时如果高半部分是结果的符号位扩展则OF=0,汇编语言程序设计-朱明,9,moval,48movbl,4imulbl,AX=00C0hOF=1,IMULreg/mem8reg/m
7、em16reg/mem32,moval,-4movbl,4imulbl,AX=FFF0hOF=0,movax,48movbx,4imulbx,DX=0000hAX=00C0hOF=0,Section 2,乘法指令,IMUL有符号数乘法指令 IMUL有单操作数、双操作数和三操作数三种格式 双操作数的乘积存储在第一个操作数中,但只能是寄存器,第二个操作数可以是寄存器、内存操作数或者立即数 三操作数的乘积存储在第一个操作数中,但只能是寄存器,第二操作数可以是寄存器或内存,第三操作数是立即数 要特别注意运算结果的尺寸问题:超出则CF和OF置位,汇编语言程序设计-朱明,10,Section 2,IMUL
8、,双操作数reg16,reg/mem16reg16,imm8/16reg32,reg/mem32reg32,imm8/32,IMUL,三操作数reg16,reg/mem16,imm8reg16,reg/mem16,imm16reg32,reg/mem32,imm8reg32,reg/mem32,imm32,乘法指令,关于MUL和IMUL乘法的问题 传统意义上对于乘法运算是能少用就尽量少用 乘法的执行效率要低于移位操作的速度 理论上后一种方法的执行效率要远高于前一种方法 但是对于某些处理器则可能有所不同 老式的体系结构上,如Pentium4,比较会很明显 在嵌入式系统上,比较同样会很明显 在Co
9、re以上的体系结构上,比较结果不明显,汇编语言程序设计-朱明,11,Section 2,movebx,eaxshleax,5shlebx,2addeax,ebx,movebx,36mulebx,除法指令,DIV无符号数除法指令,汇编语言程序设计-朱明,12,DIVreg/mem8reg/mem16reg/mem32,Section 3,movax,83hmovbl,2divbl,AL=41hAH=1,movdx,0movax,8003movcx,100divcx,AX=80DX=3,除法指令,IDIV有符号数除法指令 在进行除法指令前,应首先进行符号位扩展 符号位扩展用于将AL、AX和EAX的
10、符号分别扩展至AH、DX和EDX中,以保证运算结果的符号正确,汇编语言程序设计-朱明,13,IDIVreg/mem8reg/mem16reg/mem32,Section 3,moval,-48cbwmovbl,5idivbl,AL=-9AH=-3,除法指令,除法的溢出问题(超出寄存器范围)除法的商过大导致目的操作数无法装载 使用更大的寄存器可以减少溢出的问题,汇编语言程序设计-朱明,14,DIV/IDIVreg/mem8reg/mem16reg/mem32,Section 3,movax,1000hmovbl,10hdivbl,AL=100h?,乘法和除法运算,使用汇编语言完成以下算术运算,汇
11、编语言程序设计-朱明,15,Section 3,val4=(val1+val2)*val3,val4=(val1*5)/(val2-3),val4=(val1*(-5)/(-val2%3),moveax,val1addeax,val2mulval3jctooBigmovval4,eaxjmp;后面程序tooBig:;数据过大的处理,加法扩展,如何实现两个64位整数的加法运算?64位模式下的RAX 加法扩展指令ADC ADC(Add with Carry)指令将源操作数、目的操作数以及进位标志位相加 0FFh+0FFh=AL?可以保存?0FFh+0FFh=DL:AL,汇编语言程序设计-朱明,16
12、,ADCreg,regmem,regreg,memmem,immreg,imm,Section 4,moval,0FFhaddal,0FFh,AL=FEh,CF=1,adcdl,0,DL=DL+1,加法扩展,0FFFF FFFFh+0FFFF FFFFh=EDX:EAX ADC指令在进行加法运算时,会将CF标志位也作为一个加数参与加法运算 通过加法扩展指令实现64位的加法运算?结果保存在DWORD数组中,汇编语言程序设计-朱明,17,movedx,0moveax,0FFFFFFFFhaddeax,0FFFFFFFFh,EAX=FFFF FFFEhCF=1,adcedx,0,EDX=0000 0
13、001hCF=0,Section 4,加法扩展,两个64位数的定义 数据在内存中的存储与阶段运算,汇编语言程序设计-朱明,18,val1QWORD0A2B2 A406 7498 1234hval2QWORD08010 8700 0023 4502hsumDWORD3 DUP(?),34,12,98,74,B2,A2,02,45,23,00,10,+,80,val1ESI,val2EDI,L1:moveax,esiadceax,edipushfdmovebx,eaxaddesi,4addedi,4addebx,4popfdloopL1adcebx,0popad,sumEBX,+,Section
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 06 整数 运算 指令 高级 过程
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6399788.html