LC-3—MIO、MMIO、Caller Save、Callee Save

news2024/9/28 3:19:21

LC-3—MIO、MMIO

  • MMIO
  • MIO
  • Caller Save、Callee Save
    • 举个例子

MMIO

  • MMIO(Memory Mapped I/O)是一种在系统内存中映射I/O端口的技术,它允许设备直接访问内存中的特定地址,从而实现I/O操作。MMIO技术可以提高I/O操作的效率,并减少CPU的负担。
  • LC-3的MMIO技术可以提高I/O操作的效率,并减少CPU的负担。使用MMIO时,可以将特定的I/O端口映射到系统内存的特定地址,从而可以使用LD指令将数据从I/O端口加载到寄存器,或者用ST指令将数据从寄存器存储到I/O端口。
  • 例如,假设我们想要从系统中的I/O端口0xFE00处读取一个字节的数据。我们可以将I/O端口0xFE00映射到系统内存的地址x3000,然后使用LD指令将x3000处的数据加载到R0中:LD R0, x3000。这样,R0中就包含了从I/O端口0xFE00处读取的数据。
  • MIO(Machine I/O)是一种处理机I/O(输入/输出)操作的机制,用于从外部设备输入和输出数据。MIO可以使用专用指令从外部设备中读取和写入数据,这些指令通常是由处理器的硬件控制单元(HCCU)支持的。

MIO

  • MIO和MMIO是不同的处理机I/O技术。MIO是具有专用指令的一种I/O技术,用于从外部设备读取和写入数据,而MMIO是一种使用内存映射I/O(MMIO)技术的I/O技术,它将硬件设备与内存空间映射,使处理器可以使用普通的读写指令来读取和写入硬件设备。
    在LC3中,MIO指令是针对特定的I/O设备的,比如IN和OUT指令,它们可以直接与I/O设备进行交互,而MMIO指令则是将I/O设备映射到内存,以便使用LD和ST指令来读写内存,而不需要使用IN和OUT指令。
  • 下面是一个使用LC-3汇编语言编写的程序,该程序使用MIO和MMIO的技术,用于从外部设备读取数据并将其存储在内存中:
; Program to read data from an I/O device 
; R0 contains the I/O device address 
IN R1, R0 
STR R1, x3000 
; R1 contains the data read from the device, which is stored in memory location x3000
; Program to write data to an I/O device 
; R0 contains the I/O device address 
; R1 contains the data to be written 
MOV R2, R1 
OUT R2, R0 
; Data in R1 is written to the device
  • MIO指令仅用于从外部设备读取数据,不能用于向外部设备写入数据。要向外部设备写入数据,需要使用MMIO指令。
  • MMIO指令允许处理器向外部设备写入数据,而MIO指令则仅允许处理器从外部设备读取数据。MIO指令不支持向外部设备写入数据,因为这样会破坏物理硬件的一致性和稳定性。MMIO指令的设计更加安全,因此才能用于处理器与外部设备之间的数据交换。
  • MIO.EN是一个特殊的LC-3指令,可用于启用/禁用处理器的MIO功能。当MIO.EN指令将MIO功能禁用时,处理器将不能从外部设备读取数据,但可以继续使用MMIO指令向外部设备写入数据

Caller Save、Callee Save

  • 进入子程序前保存,子程序结束后恢复的是调用者保存Caller Save:
  • 进入子程序后先保存,子程序结束前恢复的再返回原位置的,是被调用者保存Callee Save

举个例子

在这里插入图片描述
在这里插入图片描述

  • 把对fib的函数调用看成整体而言的,R7在调用函数的内部总是会被修改为返回地址,所以R7在调用fib之前,需要由调用者保存。而R0和R2在调用过程中也会被修改,但是fib函数最后会还原这两个值
  • 所以R7是Caller Save、R0R2是Callee Save

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql 事务版本链(RR 与 RC 的本质区别)

版本链其实就是CURD的历史记录,回滚的本质也是用版本链中的最近一条历史记录覆盖当前记录。版本链针对的是每个表中的记录,只要表中有任意一条记录被修改,版本链中就会新增一条历史记录。 目录 1、为什么需要版本链? 2、有关版本…

《爆肝整理》保姆级系列教程python接口自动化(二十四)--unittest断言——中(详解)

简介 上一篇通过简单的案例给小伙伴们介绍了一下unittest断言,这篇我们将通过结合和围绕实际的工作来进行unittest的断言。这里以获取城市天气预报的接口为例,设计了 2 个用例,一个是查询北京的天气,一个是查询 南京为例&#xf…

接口幂等性的通用解决方案golang版

文章目录简介幂等性如何实现前端应当处理后端基于 token redis 处理简介 接口的幂等性是指: 用户对同一个操作发起多次请求,系统的设计需要保证其多次请求后结果是一致的。常见的如支付场景,连续快速点击两次支付 10 元,不应该扣…

阶段八:服务框架高级(第三章:分布式缓存Redis)

阶段八:服务框架高级(第三章:分布式缓存Redis)Day-分布式缓存Redis0.学习目标1.Redis持久化1.1.RDB持久化 【重要】1.1.1.执行时机1.1.2.RDB原理1.1.3.小结1.2.AOF持久化【重要】1.2.1.AOF原理1.2.2.AOF配置1.2.3.AOF文件重写1.3.…

搜广推 WideDeep 与 DeepCrossNetwork (DCN) - 记忆+泛化共存

😄 这节来讲讲Wide&Deep与Deep&CrossNetwork (DCN)。从下图可看出WD非常重要,后面衍生出了一堆WD的变体。本节要讲的WD和DCN结构都非常简单,但其设计思想值得学习。 🚀 wide&deep:2016年,谷歌提出。 🚀 Deep&CrossNetwork (DCN):2017年,谷歌和斯坦…

刷题小抄1-2数之和

时间复杂度和空间复杂度 对于一个算法高效性的评估,分为时间复杂度与空间复杂度两种,在算法优化到极致的情况下,只能舍弃时间来换取空间,或者舍弃空间来换取时间,故而两者可以说是互斥关系 时间复杂度衡量的是算法运行的速度,而空间复杂度衡量的是算法运行所需要的额外内存空…

【Ap AutoSAR入门与实战开发03】-【Ap_s2s模块02】:到底什么是基于信号,什么是基于服务,两者的主要区别是什么?

总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 1 基于信号的通信2 基于服务的通信3 面向服务设计举例在【Ap_s2s模块01】中我们大概讲述了,为什么要有s2s模块,并且简单的阐述了基于信号的通信和基于SOME/IP的服务的通信,我们接下来详细分析一下这两个概念。…

Torch单独层赋值

20230227 - 引言 对于torch中的权值初始化方式,以往都是采用默认的方式,或者利用初始化库里面的函数。但是如果想尝试一些自己的想法,那就必须自己来填充这部分数据,例如看到的内容,利用PCA的公式来对权值进行填充。…

CSGO社区服务器搭建架设服务器配置以及环境准备

CSGO社区服务器搭建架设服务器配置以及环境准备 CSGO作为一款射击动作游戏还原场景真实性广受大批玩家的热爱,很多小伙伴也有想过自己搭建的话需要知道那些东西。 我是艾西,今天跟大家聊聊搭建架设前我们需要知道的事情: Windows&#xff1…

【谷歌grc】recaptcha browser-error 错误

grc 谷歌人机验证错误 https://www.google.com/recaptcha/api/siteverif 返回错误信息 browser-error [{"success": false,"error-codes": ["browser-error"] }]之前都是调通能用的,突然之间就不能用了,查了半天也没有找…

前端实现压缩图片的功能(vue-element)

前言: 随着现在手机像素,拍照功能越来越好,随之而来的是本地图片越来越大,那么如何更好的将本地图片上传到后端接口呢?这是后台管理系统常见的场景和头疼的问题,这里分享下个人的方法。 实现效果&#xff…

java多线程(八)线程等待与线程唤醒2

三、wait(long timeout)和notify() wait(long timeout)会让当前线程处于“等待(阻塞)状态”,“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量”,当前线程被唤醒(进入“就绪状态”)。 下面的示例就是演示…

入职数据分析公认的好书|建议收藏

众所周知,数据分析经常出现在我们的日常生活中,各行各业都需要数据分析。可你知道什么是数据分析?它在企业里到底扮演什么角色?以及如果我们自己也想拥有数据分析的能力,以便更好的满足数据分析的需求,我们…

系列六、存储引擎

一、存储引擎介绍 大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。 比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选…

vue脚手架多页自动化生成实践

前言 在前端开发过程中,常常面对多种业务场景。到目前为止,前端对于不同场景的处理通常会采用不同的渲染方案来组合处理,常见的渲染方案包括:CSR(Client Side Rendering)、SSR(Server Side Rendering)、SSG(Static Site Generati…

2023年房地产行业研究报告

第一章 行业发展概况 房地产业是指以土地和建筑物为经营对象,从事房地产开发、建设、经营、管理以及维修、装饰和服务的集多种经济活动为一体的综合性产业,是具有先导性、基础性、带动性和风险性的产业。主要包括:土地开发,房屋的…

Vue3 -- PDF展示、添加签名(带笔锋)、导出

文章目录笔锋签名方案一实现要点实现过程组件引用页面元素添加引用实现代码效果展示缺点方案二修改页面元素替换引用修改代码效果展示完整代码地址实现功能的时候采用了两个方案,主要是第一个方案最后的实现效果并不太理想,但实现起来比较简单&#xff0…

JavaScript手写题

一、防抖 function debounce(fn, delay200) {let timeout null; // 定时器控制return function(...args) {if (timeout) { // 定时器存在,表示某个动作之前触发过了clearTimeout(timeout); // 清除定时器timeout null;} else {// 对第一次输入立即执行fn.apply…

【Leetcode 剑指Offer】第 5 天 查找算法(中等)

查找算法剑指 Offer 04. 二维数组中的查找剑指 Offer 11. 旋转数组的最小数字剑指 Offer 50. 第一个只出现一次的字符Python字典基础哈希表(python中是dict())有序哈希表第一个中等,后两个简单题。剑指 Offer 04. 二维数组中的查找 题&#…

Node.js的研究和应用

首先我们要知道什么是node.js? Node.js采用谷歌的V8引擎,是一个服务器端的、非阻断式I/O的、事件驱动的 JavaScript运行环境。 一、Node.js架构具体包含什么呢?咱们从一个图来看看会更加明白。 natives modules: 1.当前层内容由js实现 。…