常见x86汇编指令解释

例题:已知 f(n)=n! =nX(n-1)X··X2X1,计算 f(n)的 C 语言函数 f(n) 的源程序(圈住的地方)及其在 32 位计算机 M 上的部分机器级代码如下:

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令,计算机 M 按字节编址int 型数据占 32 位。请回答下列问题:

  • (1) 计算 f(10)需要调用函数 f1 多少次? 执行哪条指会递归调用 f1?
  • (2)上述代码中,哪条指令是条件转移指令? 哪几条指令一定会使程序跳转执行?
  • (3) 根据第 16 行 call 指令,第 17 行指的虚拟地址应是多少? 已知第 16 行 call 指今采用相对寻址方式,该指今中的偏移量应是多少(给出计算过程)? 已知第 16 行 call 指的后4字节为偏移量,M 采用大端还是小端方式?
  • (4) f(13)=6227020 800,但 f1(13)的返回值为 1932053 504,为什么两者不相等? 要使 f1(13)能返回正确的结果,应如何修改 f1 源程序?
  • (5) 第19 行 imul eax,ecx 表示有符号数乘法,乘数为 R[eax]和 R[ecx],当乘法器输出的高、低 32 位乘积之间满足什么条件时,溢出标志 OF=1? 要使 CPU 在发生溢出时转异常处理编译器应在 imul 指令后加一条什么指令?

【分析】由题中可以看出是计算n的阶乘的一个C语言代码的机器代码。只有四个代码操作,就是定义函数f1,判断n是否小于1,还有进行f1的递归操作,最后返回1.

【解答】

1.f1(10)结合题意可以知道是10 的阶乘,而且c语言代码是通过递归进行的,故需要调用f1函数10次。而查阅汇编表可以知道调用函数是call指令,故是第16条指令会递归调用f1.

2.根据汇编指令表可以知道,条件跳转指令为jle指令,故机器代码中第12行的jle指令是条件转移指令,jle f1+35H即如果n<=1时,就跳转到地址为00401035H。

第16行的call指令为函数调用指令第20行的jmp指令为无条件转移指令,第30行的ret指令为子程序的返回指令,故这三条指令一定会使得程序跳转执行

3.计算机M是按字节编址的,故第16行call指令的虚拟地址为0040 1025H,长度为E8 D6 FF FF FF占了五个字节,故第17行的虚拟地址为 0040 1025H+5=0040 102AH

采用相对寻址,则 偏移量=目标地址 - (PC) = 0040 1000H - 0040 102AH=FFFF FFD6H。

根据第16行的call指令偏移量字段为D6 FF FF FF,可以确定M采用小端方式。

4.f(13)=6227020800超出了int型32位表示的最大范围,因此返回值是发生了溢出的错误结果

为了使得f1(13)能够表示正确的结果,可以将返回类型改为double(或者long long,long double,float)类型。

5.若32乘积的高33位为非全0或者非全1,则OF=1。(第33位为乘积的符号位,如果第33位以后出现不一样的二进制位,则表示32位不够表示乘积,因此溢出。)

要想发生溢出时转为异常处理,常见的内部异常指令为“trap指令”,因此要在imul指令后加入一条“溢出自陷指令”,使得CPU自动查询溢出标志OF,当OF=1时调出“溢出异常处理程序”

计算机组成大题分析(五)相关推荐

  1. 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议

    今天小马给大家整理了近10年高考数学"导数大题"分析,以及2021高考备考建议 相关推荐(点击跳转)???▶语文干货 | 高中必修1-5古代文化常识大汇总!▶高中数学 | 知识点结 ...

  2. 计算机组成原理位移量,计算机组成原理大题解析.doc

    计算机组成原理大题解析 三.1.(10分)使用原码一位乘法计算X×Y.X=0.11101,Y=0.01111 2.(5分)用变形补码计算X+Y和X-Y,并指出运算结果是否溢出.X=0.11011,Y= ...

  3. 计算机考试大题电脑阅卷吗,注意|电脑阅卷流程介绍及答题注意点

    原标题:注意|电脑阅卷流程介绍及答题注意点 上海李大伟教育•专注中小学课程辅导22年 www.lidaweijiajiao.com 大型考试电脑阅卷流程介绍及答题注意点 初三一模和高三春考之重要性不言 ...

  4. 计算机考试大题电脑阅卷吗,看完电脑阅卷的“内幕”,你还会让这样答卷吗?认真看完最少多考20分!...

    原标题:看完电脑阅卷的"内幕",你还会让这样答卷吗?认真看完最少多考20分! 在小编的印象中,每年高考成绩出来那天,总有人觉得委屈,感觉实际分数不如自己考完对答案得出的分数高. 那 ...

  5. 编译原理考试大题分析【太原理工大学】

    有些基本公式可以看这里,大题内容请以本篇为准!https://blog.csdn.net/m0_52861684/article/details/130071191?spm=1001.2014.300 ...

  6. 计算机三级网络技术IP地址大题分析

    IP地址 主要是A,B,C三类 A类地址第一位是0,剩下的全0,全1; 8个0作为特定主机地址进行使用,0+7个1是作为特殊地址当中的环回地址进行使用. 1-126:A;128-191:B;192-2 ...

  7. Python计算机二级大题

    1. 键盘输入字符串s,按要求把s输出到屏幕,格式要求:宽度为30个字符,星号字符*填充,居中对齐.如果输入字符串超过30位,则全部输出. 例如:键盘输入字符串s为"Congratulati ...

  8. 计算机二级大题知识点汇总,计算机二级Excel考点与做题技巧汇总。

    #计算机二级# NO.1.开始选项卡 一.单击右键可以设置的内容 1.新建表.删除表.移动复制工作表.选择性粘贴.断开链接 2.重命名工作表.隐藏工作表.设置工作表标签颜色 3.行和列的插入.删除.移 ...

  9. 计算机网络大题分析(一)

    题目:某主机的MAC地址为00-15-C5-C1-5E-28,IP地址为10.2.128.100(私有地址).图47a为网络拓扑,题47b是该主机进行Web请求的一个以太网数据帧前80字节的十六进制及 ...

  10. 计算机一级大题知识点,全国计算机等级考试一级基本操作题考点

    全国计算机等级考试一级基本操作题考什么内容呢?下面是小编为大家收集的关于全国计算机等级考试一级基本操作题考点,希望能够帮到大家! 基本操作题(10分) 1.新建不同类型的文件.文件夹.(点右键,新建) ...

最新文章

  1. R语言主成分分析PCA和因子分析EFA、主成分(因子)个数、主成分(因子)得分、主成分(因子)旋转(正交旋转、斜交旋转)、主成分(因子)解释
  2. php加载外部html,VUE页面加载外部HTML实例详解
  3. 混合编程黑科技:跨语言编程问题迎刃而解的3个要点
  4. fail2ban安全设置
  5. RabbitMq如何确保消息不丢失
  6. JLupin Next Server乍一看
  7. Java面试通关要点汇总集答案(七)——equals 与 == 的区别 List 和 Set 区别
  8. 关联规则应用场景实例十则
  9. ubuntu live cd制作
  10. U盘文件被隐藏是怎么回事?怎样恢复被隐藏文件?
  11. 郭盛华技术有多牛?外媒:稳坐亚洲第一
  12. Accton Technology and Wedge Networks Partnership Launches Orchestrated Secure SD-WAN
  13. R语言七天入门教程二:认识变量与运算符
  14. 用于音频信号去噪的谱相减和陷波滤波的比较(Matlab代码实现)
  15. asp 支付宝 企业版 接口 支持网银接口 ,网银直接支付
  16. vuex使用方法(详细实用)
  17. 非计算机专业跨计算机,非计算机专业跨考考研计算机难度如何?
  18. 计算机成下一个土木了??
  19. 新海诚画集[秒速5センチメートル:樱花抄·遠野家]
  20. 读书笔记|《微积分的力量》引言

热门文章

  1. Windows Server 2008 R2 WSUS服务器的详细配置和部署
  2. 数据流处理之乒乓操作
  3. 程序的时间和空间复杂度
  4. 微信小程序跳转其他外部网站上
  5. 2021年熔化焊接与热切割考试题库与解析
  6. ubuntu桌面图标不显示问题
  7. [跑步] 跑步者的力量训练
  8. net_speeder发双倍包加速
  9. 使用Jib构建Java镜像
  10. 服务器 多显卡 显示器,一台主机接多个显示器,居然有三种方法实现,提高工作效率的神器...