7_整数运算.ppt

  1. 1、本文档共61页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7_整数运算

双操作数 格式: IMUL r16, r/m16 IMUL r16, imm8 IMUL r16, imm16 IMUL r32, r/m32 IMUL r32, imm8 IMUL r32, imm32 功能:两个操作数相乘,结果存到第一个操作数中 如果第一个操作数存不下结果,OF、CF置位。 三操作数 格式: IMUL r16 , r/m16,imm8 IMUL r16 , r/m16,imm16 IMUL r32 , r/m32,imm8 IMUL r32 , r/m32,imm32 功能:第二、三两个操作数相乘,结果存到第一个操作数中 如果第一个操作数存不下结果,OF、CF置位。 IMUL 应用举例 Mov al, -4 Mov bl, 4 IMUL bl ;AX=0FFF0H,CF=0 Mov ax, 30h Mov bx, 4h IMul bx ;DX:AX =0C0H,CF=0 7.3.3 乘法操作性能测试 书上提供了两种实现乘法的子程序(一种是通过移位来实现乘法,另一种是通过标准的MUL和IMUL指令来实现乘法),并测试两个子程序的运行时间,测试结果表明两个子程序运行时间(在较老的CPU上)有较大差异 学习汇编语言,需要关注这类差异。 自己阅读教材上的源程序 7.3.4 无符号除法指令DIV 实现整除运算,结果包括两项:一项为商,一项为余数。 格式 DIV r/m8 AX / op8 = AL(商) …AH(余数) DIV r/m16 DX:AX/op16 = AX…DX DIV r/m32 EDX:EAX/op32=EAX…EDX DIV 应用举例 Mov ax,83h Mov bl ,2h DIV bl ;AL =41H,AH=1 Mov dx , 0 Mov ax ,8003h Mov cx , 100h DIV cx ;AX=080H,DX=3h 7.3.5 有符号整数除法IDIV 有符号除法和无符号除法的用法基本相似。但要注意的是在进行除法操作前往往要进行符号扩展 符号扩展指令 共有三条符号扩展指令,其操作数在指令中不给出,均为隐含的寄存器 CBW 将AL符号扩展到AX CWD 将AX符号扩展到DX:AX CDQ 将EAX符号扩展到EDX:EAX IDIV 应用举例 Mov AL,-48 Mov bl ,5 cbw IDIV bl ;AL =-9,AH=-3 Mov ax ,-5000 Mov cx , 256 cwd IDIV cx ;AX=-19,DX=-136 除法溢出 在做除法时,如果商太大,目的操作数无法容纳,则会置位溢出位(OF) 当溢出发生时会引发一个中断 当除数为0时,也会引发中断,通常在做除法操作前,需要判断除数是否为0 除法应用举例 任意进制的码制转换 .data ASCIICHAR BYTE 0123456789ABCDEFGHIJKLMNOPQRSTUVWZYX .code ToASC PROC uses eax ebx ecx esi ;将EAX中的数按BL中的值为进制数,转换成ASCII字符串放到ESI指向的数组中 mov ecx , 0 mov cl , bl add esi , 32 nxt_ta: mov edx , 0 div ecx mov bl,ASCIICHAR[edx] mov [esi],bl dec esi cmp eax , 0 jnz nxt_ta ret ToASC ENDP “高级语言的算术表达式生成的汇编代码”例子见教材 7.4 扩展加法和减法 问题:要实现两个1024位的整数相加减,如何实现? IA-32中有两条方便实现上述功能的指令 ADC 带进位加(Add With Cary) SBB 带借位减(Subtract With Borrow) 7.4.1 ADC 功能:将两个操作数与进位位一起相加,结果存放到目的操作数中。与ADD指令的差别就是在加的时候,包含了进位位(CF)的值一起相加。 格式与ADD相同 扩展加法的例子 ExtAdd PROC pushad clc L1: mov eax,[esi] adc eax ,[edi] pushfd mov [ebx], eax add esi ,4 add edi ,4 add ebx , 4 popfd l

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档