PattPatel-“Introduction to Computing Systems“(3)期末样卷题目解析:C语言与汇编语言转化

上接(1)basic ideas和与解析(1)

核心思路还是借具体题目来理解书中的两条basic ideas——abstraction of layers与think both softwarely and hardwarely。

C语言与汇编语言的转化

题目的要求是将下面的这段代码用LC-3改写。 这里相比起解析(1)写stack frame的难度又提高了一点,因为之前写stack frame我们只用知道local variable是如何存储的就可以了。

我们先分析这段C程序:首先是把新定义的dl_t的指针head作为参数传入到dl_length函数里,下一步是初始化count为0,然后就是进入循环,将head.next赋给elt,作为dl_t的指针,如果elt指针与head指针不相等,循环不结束,然后elt指针更新为elt.next,count的值加1。这样最终的count就就可以作为dl_length。

第一个很自然的问题就是为什么这段C程序能够算出cyclic,doubly-linked lists的长度,我的理解是,作为一个环,那么最后一个元素的next一定是指向最初的head,所以上述的循环可以算出这个环里有多少个元素。

第二个问题是要求我们的将上述的这段C语言转化为Assembly语言。其实有答案肯定可以看明白,但关键的问题是我们得独立想出来。思路就是拆分为几个步骤,逐步击破。具体来说在这段程序里有这么几步,第一步是初始化,第二步是运行循环,第三步是结束这段程序。

首先初始化,count=0与elt=head.next,一般来说用R0作为计数的register,然后根据题目条件我们知道M[R6]=head,需要专门用一个register来存head(因为后面有elt与head的比较),也需要专门用一个register来存elt,因此使用了R1和R2。

接着是循环,判断循环是否结束的办法是看head与elt是否相等,办法是通过相减来判断是否为0,所以就有了NOT R1,R1和ADD R1,R1,#1(取反加一),用R3作为判断的register。在循环里R0+1,然后下一个elt。

最后就是因为R6always on the top of stack,将R6-1上移一位,count->M[R6-1]。

待完善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/322047.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL备忘--集合运算

前言 本文讨论的是两个子查询结果的合并问题, 是行维度下的合并处理 例如子查询A查出5条记录、子查询B查出3条记录,那么将两个结果合并,则共返回8条记录 行维度上要能进行合并,前置要求是:子查询的列字段是相同的&…

erlang/OTP 平台(学习笔记)(一)

OTP 我们在OPT概述里曾简单的了解过,现在让我们来进行进一步了解 理解并发和erlang的进程 1.理解并发 并发就是并行吗?不完全是,至少在讨论计算机和编程时二者并不等同。 有个常用的半正式定义是这么说的:“并发,用于形容那些无须以特定…

数据库——DAY1(Linux上安装MySQL8.0.35(网络仓库安装))

一、环境部署 1、Red Hat Enterprise Linux 9.3 64 位 2、删除之前安装过本地镜像版本的MySQL软件(以前未安装过,请跳过此步骤) [rootlocalhost ~]# dnf remove mysql-server -y [rootlocalhost ~]# rm -rf /var/lib/mysql [rootlocalhost …

十一、three场景实现太阳光晕

今天讲的太阳光不是three自带的DirectionalLight这个灯光,而是在场景里面能真实看到的光线特效,也可以叫做光晕。 先看实现效果图 现在讲讲实现步骤 安装maath,这是一个由数学助手、随机生成器、bits和bobs的集合。引入这个的目的是LensFlare.js文件要用这个来做太阳的旋转…

odoo 一日一技 odoo去除业务模块的基础框架

基础介绍​​​ 为了单纯使用odoo基础框架,我将源码整理成四个版本,分为社区版、企业版、社区基础版(去除非必要的业务模块)、企业基础版(去除非必要的业务模块)。如图还可以这样创建四个对应配置文件。 这边以社区基础版为例 下面简单介绍一下这些模…

SSL证书怎么选?

首先,我们需要理解不同类型的SSL证书及其费用差异。通常情况下,SSL证书分为域名验证型(DV)、组织验证型(OV)和企业验证型(EV)三种。其中,DV证书是最常见的类型&#xff0…

Vue2-Vuex中State、Mutation及mapState辅助函数、mapMutations的基本用法

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。 个人笔记,仅供参考。 state:全局共享的响应式数据 mutation:声明修改全局响应式数据…

纯跟踪横向控制和算法仿真实现

文章目录 1. Pure Pursuit2. 算法原理3. 算法和仿真实现 1. Pure Pursuit Pure Pursuit是一种几何跟踪控制算法,也被称为纯跟踪控制算法。他的思想就是基于当前车辆的后轮中心的位置,在参考路径上寻找一个预瞄点,假设车辆可按照一定转弯半径…

odoo16 销售订单中数量与单价,手机录入不方便

odoo16 销售订单中数量与单价,手机录入不方便 在销售订单中,服装批发,数量与单价均是整数,系统默认的为保留两位小数的float类型,输入起来很不方便,如何修改 电脑版,输入时,自动选取…

Linux:NTP校时、PTP校时

目录 前言一、NTP校时1、简介2、ubuntu使用 NTP3、嵌入式设备使用 NTP 校时4、NTP 服务器的校时精度 二、PTP校时1、简介2、ubuntu使用 PTP3、嵌入式设备使用 PTP 校时 三、PTP 校时和 NTP 校时那个精度高一些 前言 在进行网络协议通信时,我们有时候需要计算通信的延…

桌面显示器type-c接口方案

在当今时代,TYPE-C接口桌面显示器已经成为了我们生活和工作中不可或缺的重要设备之一。与传统显示器相比,新型的TYPE-C接口桌面显示器具有更多的功能和优势,其中最显著的特点就是支持视频传输和充电功能。 首先,TYPE-C接口桌面显示…

mybatis在resultmap的子查询中使用传到mapper中的参数

1.将要传递的参数作为虚拟列加入到select语句中 2.使用column进行虚拟列的数据传递,在子查询中就能直接使用了,等于号两边名字一样免得区分,只要是出现在夫查询select语句中的都能传递 3.在子查询中使用参数 上图 上述的方法只限单值变量 …

NLP论文阅读记录 - 2021 | WOS 智能树提取文本摘要深度学习

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 An Intelligent Tree Extractive Text Summarization Deep Learning …

优优聚美团代运营服务:实现业务增长的不二之选

随着互联网的普及和电商行业的快速发展,越来越多的商家选择在美团等电商平台开展业务。然而,很多商家由于缺乏专业的电商运营知识和经验,难以在激烈的市场竞争中脱颖而出。此时,美团代运营服务应运而生,成为商家实现业…

Machine Trap Delegation Registers

默认情况下,所有的trap都是在machine mode中处理的;虽然machine-mode可以通过调用MRET指令,来重新将traps给到其他的mode来执行,但是性能上并不好;因此增加如下两个寄存器:mideleg/medeleg,分别…

Sentinel 降级、限流、熔断

前言 在现代分布式系统中,如何有效地保护系统免受突发流量和故障的影响,是每个开发人员和架构师都需要思考的重要问题。在这样的背景下,Sentinel作为一个强大的系统保护和控制组件,为我们提供了降级、限流、熔断等多种策略&#…

边缘数据采集网关无法上传数据是什么原因?如何解决?

边缘数据采集网关是物联网系统中的常见设备,主要用途包括数据采集、协议转换、边缘数据处理、数据传输分发等,实现多设备和多系统的互联互通和数据协同应用,对于提高物联网感知和响应效率、加强物联网联动协同能力、提升数据安全性等方面都具…

MATLAB实验Simulink的应用

本文MATLAB源码,下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740734 一、实验目的 1.熟悉Simulink操作环境。 2.掌握建立系统仿真模型以及系统仿真分析的方法。 二、实验内容 1.利用Simulink仿真下列曲…

怎样实现安全便捷的网间数据安全交换?

数据安全交换是指在数据传输过程中采取一系列措施来保护数据的完整性、机密性和可用性。网间数据安全交换,则是需要进行跨网络、跨网段甚至跨组织地进行数据交互,对于数据的传输要求会更高。 大部分企业都是通过网闸、DMZ区、VLAN、双网云桌面等方式实现…

【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介 UC的关键特性 之所以DataBricks要用UC, 很大程度是对安全的管控。从上文可以了解到它的四大特性&#…