了解LDR和STR吗?

2023-12-09

我正在使用 ARMSim,我猜它是一个 ARM 模拟器,并且我有这个演示程序。它基本上读取一个文本文件并打印文本文件中的整数(仅第一行)。

Start:
@Open file for input.
LDR R0, =InputFileName
MOV R1, #0
SWI SWI_Open
BCS FileError

@Save file handle to memory.
LDR R1, =InputFileHandle
STR R0, [R1]

@Read integers.
LDR R0, =InputFileHandle
LDR R0, [R0]
SWI SWI_RdInt

@Print to ARMSIM console.
MOV R1, R0
MOV R0, #Stdout
SWI SWI_PrInt

BAL End

FileError:
MOV R0, #Stdout
LDR R1, =FileErrorMess
SWI SWI_PrStr
BAL Quit

End:
SWI SWI_Exit

.data
.align
InputFileHandle: .skip 4
InputFileName: .asciz "integers.txt"
FileErrorMess: .asciz "Can't open file."

它运行良好,但我不太明白 LDR 或 STR 指令是如何工作的。尤其是那些看起来像 LDR R0、[R0] 或 STR R0、[R1] 的。任何人都可以澄清这些是如何工作的吗?


The LDR and STR指令使用后变址寻址来更新其地址寄存器。

STR指令将一个字存储到内存中。

LDR指令从内存中加载一个字。

阅读更多

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解LDR和STR吗? 的相关文章

  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • 设备树不匹配:.probe 从未被调用

    我无法理解设备树的工作原理 或者具体来说为什么该驱动程序无法初始化 这是在 android 版本 3 10 的 rockchip 供应商内核中 驱动程序 看门狗 rk29 wdt c 为了可读性而减少 static const struct
  • 将字段中的位扩展到掩码中所有(重叠+相邻)集位的最快方法?

    假设我有 2 个名为 IN 和 MASK 的二进制输入 实际字段大小可能是 32 到 256 位 具体取决于用于完成任务的指令集 每次调用时两个输入都会改变 Inputs IN 1100010010010100 MASK 000111101
  • Intel:序列化指令和分支预测

    英特尔架构开发人员手册 http www intel com content www us en architecture and technology 64 ia 32 architectures software developer v
  • 使用 Gas 生成与位置无关的代码 (-fPIC)

    我尝试在 x86 64 上创建共享库但失败 问题归结为以下代码 请不要介意 它没有多大意义 section data newline ascii n section text globl write newline type write n
  • CISC 机器 - 它们不只是将复杂指令转换为 RISC 吗?

    也许我在架构上存在误解 但如果机器有 比如说 乘法指令 该指令是否未转换为更小的指令 或者过于复杂以至于最终与等效的 RISC 指令具有相同的速度 乘法是一个不好的例子 它在两种体系结构中都是一条指令 将上面的 乘法 替换为 CISC 中更
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • 在 x86 程序集中打印寄存器值的简单方法

    我需要在 8086 Assembly 中编写一个程序 接收来自用户的数据 进行一些数学计算并在屏幕上打印答案 我已经编写了程序的所有部分并且一切正常 但我不知道如何打印号码显示到屏幕上 在我所有计算结束时 答案是 AX 它被视为无符号 16
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • 难以理解汇编命令“加载有效地址”[重复]

    这个问题在这里已经有答案了 可能的重复 LEA 指令的目的是什么 https stackoverflow com questions 1658294 whats the purpose of the lea instruction LEA指
  • 如何计算汇编中的内存位移?

    我一直在研究 yasm 汇编语言 并生成了一个包含以下内容的列表文件 我需要帮助理解第一列中的内存位移是如何计算的 提前致谢 1 line 1 1 memory asm 2 section data 3 00000000 04000000
  • 将 XMM 寄存器压入堆栈

    有没有办法将打包双字整数从 XMM 寄存器推送到堆栈 然后在需要时将其弹出 理想情况下 我正在寻找通用寄存器的 PUSH 或 POP 之类的东西 我已经检查了英特尔手册 但我要么错过了命令 要么没有 或者我是否必须将值解压到通用寄存器然后推
  • 为什么 LED 保持亮起而不是闪烁?

    这是使用 pic16f676 中的 TIMER0 中断使 LED 闪烁的 MPASM 代码 端口 A 的引脚 0 RA0 未切换至关闭位置 请帮忙 我是图片组装的新手 我想掌握图片 有没有高手帮我学习一下 我需要以 1 秒的间隔眨眼 代码是
  • 错误:无法识别的指令 [ORG]

    我试图编写一个引导加载程序以在 dos box 中使用 我写了下面的代码 BITS 16 tell the assembler that its a 16 bit code ORG 0x7C00 Origin tell the assemb
  • 将以下机器语言代码(0x2237FFF1)翻译成MIPS汇编

    到目前为止我已经翻译了这段代码 但我不明白的是如何计算 计算 16 位立即地址的数量 0x2237FFF1 转为二进制 0010 0010 0011 0111 1111 1111 1111 0001 现在我正在读取操作码 001000 并知
  • 在 qemu 中将扇区加载到 RAM

    我编写了一个简单的程序 将扇区 扇区编号 2 加载到 RAM 但什么也没打印 首先 我尝试了以下引导扇区代码 org 0x7c00 mov ax 0x1000 ES BX 1000 0000 mov es ax mov bx 0x00 Lo
  • 如何在 AVX/AVX2 中递增向量

    我想使用内在函数来增加 SIMD 向量的元素 最简单的方法似乎是为每个元素加 1 如下所示 note vec inc之前已设置为1 vec mm256 add epi16 vec vec inc 但是是否有任何特殊指令来增加向量 类似于in
  • 如何使 gcc 为 -fpatchable-function-entry 发出多字节 NOP?

    gcc确实有能力使用多字节用于对齐循环和函数的 NOP 然而当我尝试 fpatchable function entry option https gcc gnu org onlinedocs gcc Instrumentation Opt
  • 微软怎么能说WinAPI中一个字的大小是16位呢?

    我刚刚开始学习WinAPI 在MSDN中 对WORD数据类型提供了以下解释 WORD16 位无符号整数 范围是十进制 0 到 65535 该类型在 WinDef h 中声明如下 typedef 无符号短 WORD 很简单 而且它与我一直在使

随机推荐

  • 我有两个错误:“UIWebview”没有可见的@interface

    我有两个错误 UIWebView 没有可见的 interface 声明选择器 highlightAllOccurencesOfString 另一个 UIWebView 没有可见的 interface声明选择器 removeAllHighli
  • 如何:后退按钮支持“Ajax”

    我有一个asp net ajax网站 它充满了在同一页面上发生的事情 无需重新加载页面 例如排序记录 分页 当用户转到同一站点中的另一个页面并按浏览器后退按钮时 如何使浏览器保存页面状态以使用预选选项 例如排序选项 分页中的页码 返回到该页
  • 我可以从 Graphics 对象中获取矢量数据吗?

    在 Flash 10 播放器中 假设我加载了一个只有十几条随机线的 Sprite 有什么方法可以检查 Sprite 的图形对象并找出这些线的位置吗 目前 我有一个疯狂的工作 我将线条绘制到位图并检查位图 但这是粗糙且昂贵的 不 又是 没有特
  • 伪造 Entity Framework 4.1 的 DbContext 来测试我的存储库

    我有一个基本存储库 所有实体存储库都继承自该存储库 在我的睾丸中 我创建了一个 Fake DbContext 和 Fake DbSet 来测试我的存储库 但是在我的 FakeDbContext 中实现一些方法时 我无法实现IDbContex
  • Oracle针对不同条件的order by

    我有一个查询 我想根据条件进行两种订单 例如 如果一个字段为 NULL 我需要下一个订单 如果不是 我必须下一个订单 我怎样才能做到呢 select from table 1 t order by if t field1 is null t
  • 单子、组成和计算顺序

    所有 monad 文章经常指出 monad 允许您按顺序对效果进行排序 但是简单的构图又如何呢 不是 f x x 1 g x x 2 result f g x 需要g x之前要计算f 单子是否做同样的事情 但处理效果 免责声明 单子有很多东
  • 修改表中的列

    我有下表test iD Name ParentId GroupID 1 1 Null 2 1 Null 3 1 Null 4 7 Null 5 7 Null 6 7 Null 7 9 Null 我怎样才能修改它来获取列GroupID像这样
  • JQUERY ajax 将值从 MVC 视图传递到控制器

    我想要的是将 txt Comments 的值从视图 使用 jquery ajax 传递到控制器 问题是 ajax jquery 不接受脚本标签作为字符串 意思是 当我在 txtComments 中输入任何 script html 标签时 a
  • LINQ Any 与 FirstOrDefault 的性能 != null

    我贡献的开源项目 OSP 代码中有多个地方必须确定集合中的元素是否满足特定条件 我见过LINQ表达式的使用Any lambda expression 在某些情况下和FirstOrDefault lambda expression null在
  • Ionic 隐藏导航栏而不是按钮

    我正在尝试寻找一种可能的方法来隐藏离子ion nav bar不隐藏ion nav barbuttons 我努力了 hide nav bar true 但它也隐藏了按钮 我已经搜索过并且也参考过this 但没有解决我的问题 问候 你只需要指定
  • 用于编辑源代码的 Docker 安装卷

    我的 Windows 系统上有 docker 设置 该应用程序的源代码位于C Application source地点 我希望这些信息在 docker 容器中可用 以便在开发过程中轻松更改代码 而无需重建映像 这就是我尝试过的 docker
  • 玩笑测试为 eventemitter 对象发出事件(express)

    试图从中获得灵感玩笑测试为 eventemitter 对象发出事件 http 没有解决我的痛苦express 假设有以下nodejs代码 server js const express require express const app e
  • 迁移到 Firebase Cloud Messaging:导入现有 Google 项目会对项目产生什么影响?

    In 设置 FCM它说 如果没有 请在 Firebase 控制台中创建一个 Firebase 项目 已经有一个了 如果您已经有一个现有的 Google 项目 与您的移动应用程序关联 单击导入 Google 项目 否则 单击 创建新项目 我有
  • 如何在 Spring Security 登录表单中进行额外验证?

    我想知道如何在 Spring Security 处理登录表单之前对其进行额外的验证 我正在考虑一些 LoginController LoginForm bean 但我不知道如何将它们组合在一起 如何配置它来工作 下面是我的 愿景 我搜索了一
  • 错误:rails 中的“不兼容的库版本”sqlite3-1.3.11

    我在 Ubuntu 系统 16 04 上工作 我的问题是每当我设置任何 Rails 项目并尝试运行rails s然后我收到 sqlite3 的 库版本不兼容 错误 如下所示 home jiggs rvm gems ruby 2 3 1 al
  • 字节中的位数是否等于 char 类型中的位数?

    C 标准有强制要求吗 是否存在一个字节中的位数不等于类型中的位数的平台char Yes Both are equal to CHAR BIT C标准定义CHAR BIT as 不是位字段 字节 的最小对象的位数 c99 明确表示 一个字节包
  • 如何获取Windows中当前交互式用户会话的数量?

    我正在编写一个 Windows 服务 它需要知道当前是否有任何用户登录在计算机上 到目前为止我已经尝试过Win32 LogonSession WMI 以及LsaEnumerateLogonSessions LsaGetLogonSessio
  • 在Python中通过strptime解析不带前导零的小时

    假设您有以下格式的时间 a 800 0 830 0 900 0 930 0 1000 0 1030 0 问题是缺少小时的前导零 例如00 30表示为30 08 00表示为800 and 00 00表示为2400 是否可以将此数据解析为tim
  • 如何计算并仅打印重复项?

    我知道如何遍历整个数组 但我只需要重复出现的次数 我处于初学者水平 所以只是循环和数组的基本使用 int array 12 23 22 0 43 545 4 55 43 12 0 999 87 for int i 0 i lt array
  • 了解LDR和STR吗?

    我正在使用 ARMSim 我猜它是一个 ARM 模拟器 并且我有这个演示程序 它基本上读取一个文本文件并打印文本文件中的整数 仅第一行 Start Open file for input LDR R0 InputFileName MOV R