第 6 讲 高级语言和机器指令中的运算.pptxVIP

第 6 讲 高级语言和机器指令中的运算.pptx

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第 6 讲高级语言和机器指令中的运算学习内容C程序涉及的运算(回顾)整数算术运算、浮点数算术运算按位、逻辑、移位、位扩展和位截断MIPS指令涉及的运算涉及到的定点数运算算术运算带符号整数运算:取负 / 符号扩展 / 加 / 减 / 乘 / 除 / 算术移位无符号整数运算:0扩展 / 加 / 减 / 乘 / 除 逻辑运算逻辑操作:与 / 或 / 非 / …移位操作:逻辑左移 / 逻辑右移涉及到的浮点数运算:加、减、乘、除C程序涉及的运算学习目标能描述C程序涉及的运算是如何进行的能将C程序中的运算及其操作数同机器的寄存器、存储器结合起来,分析运算结果的机内表示C程序涉及的运算算术运算(最基本的运算)无符号数、带符号整数、浮点数的+、-、*、/ 运算等按位运算操作按位或:“|” 按位与:“”按位取反:“~”按位异或:“^”问题:如何从16位采样数据y中提取高位字节,并使低字节为0?可用“”实现“掩码”操作:y 0xFF00例如,当y=0x2C0B时,得到结果为:0x2C00用途对位串实现“掩码”(mask)操作或相应的其他处理(主要用于对多媒体数据或状态/控制信息进行处理)C程序涉及的运算逻辑运算操作“‖”表示“OR”运算“”表示“AND”运算 例如, if ((xy) (i100)) then ……“!”表示“NOT”运算 与按位运算的差别符号表示不同: ~ ;| ~ ‖; ……运算过程不同:按位 ~ 整体结果类型不同:位串 ~ 逻辑值用途用于关系表达式的运算例如,if (xy and i100)then ……中的“and”运算C程序涉及的运算移位运算操作左移::xk;右移: xk不区分是逻辑移位还是算术移位,由x的类型确定无符号数:逻辑左移、逻辑右移高(低)位移出,低(高)位补0,可能溢出!问题:何时可能发生溢出?如何判断溢出? 若高位移出的是1,则左移时发生溢出带符号整数:算术左移、算术右移左移:高位移出,低位补0。可能溢出! 溢出判断:若移出的位不等于新的符号位,则溢出。右移:低位移出,高位补符,可能发生有效数据丢失。用途提取部分信息扩大或缩小数值的2、4、8…倍从16位采样数据y中提取高位字节某字长为8的机器中,x、y和z都是8位带符号整数,已知x=-81,则y=x/2=?z=2x=?[x]补=1 0101111y=-40? z=-162 ? xC程序涉及的运算位扩展和位截断运算用途类型转换时可能需要数据扩展或截断操作没有专门操作运算符,根据类型转换前后数据长短确定是扩展还是截断扩展:短转长 无符号数:0扩展,前面补0 带符号整数:符号扩展,前面补符截断:长转短 强行将高位丢弃,故可能发生“溢出”例1(扩展操作):在大端机上输出si, usi, i, ui的十进制和十六进制值是什么?short si = -32768;unsigned short usi = si;int i = si;unsingned ui = usi ;例2(截断操作):i和j是否相等?int i = 32768;short si = (short) i;int j = si;不相等!i = 32768 00 00 80 00si = -32768 80 00 j = -32768 FF FF 80 00原因:对i截断时发生了“溢出”,即:32768截断为16位数时,因其超出16位能表示的最大值,故无法截断为正确的16位数!si = -32768 80 00usi = 32768 80 00i = -32768 FF FF 80 00 ui = 32768 00 00 80 00C程序涉及的运算计算机如何实现高级语言程序中的运算?将各类表达式编译(转换)为指令序列计算机直接执行指令来完成运算例:C语言赋值语句“f = (g+h) – (i+j);”中变量i、j、f、g、h由编译器分别分配给MIPS寄存器$t0~$t4。寄存器$t0~$t7的编号对应8~15,上述程序段对应的MIPS机器代码和汇编表示(#后为注释)如下:add $t5, $t3, $t4# g+hadd $t6, $t0, $t1# i+jsub $t2, $t5, $t6# f =(g+h)–(i+j)000000 01011 01100 01101 00000 100000000000 01000 01001 01110 00000 100000 000000 01101 01110 01010 00000 100010下面以MIPS为例,看指令中会提供哪些运算?能否完全支持高级语言需求?回顾与练习描述C程序涉及的位运算、移位运算、位扩展和截断运算是如何进行P104:习题3学习内容C程序涉及的运算(回顾)整数算术运算、浮点数算

文档评论(0)

today-is-pqsczlx + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档