ARM汇编的内存操作详解

内存操作-读取内存:

跟内存相关的指令无非是把内存中读取到计算机里面或者把计算机的内容读取到内存里面。存储器和计算机之间的一个互换。这些指令也可以在我们之前的相关文档里去查询。ARM汇编去官网下载相关的文档就行。

内存操作指令分为:单寄存器读写指令、多寄存器内存访问指令(连续的进行操作一段时间内存,把它读到计算机里面)和数据交换指令

内存操作结构:

LDR:把我们内存中的数据读取到计算器里面。内存是分块的,内存最小的单位是字节(byte),到为了便于管理,所以存储器会分页,分页的时候它会用到另一个单位:word字长。一个word就是4个字节,以32位为一个单位。所以默认单位是字长来进行一个读取。同理,STR就是按字长把计算器里面的值放到内存里面。现在详细地讲一下:LDR后面跟上Rn Add

例:我们打开这样一个项目,在这里我们开始做一下我们今天这一块。我先把我们的内存里的一个值读到某个计算器里面,我们就用LDR

比如我读到R0吧,我把0x12这个地址给它读进来,这个地方要注意一点,这个地方可不是我们的move,所以这个地方不能直接用立即数。不直接用立即数有两种方法。把R1的值所指向的(这个地方有中括号,中括号表示计算机间接寻址,它的值所指向的内存的地址空间的值读出来复到R0里面。再看下一块,0x12就是找12

2就是对应的FF,但是要读32位,也就是4个字节。现在把值给赋过去

现在读出的地址是0010E7FF,我们找到的这个起始位是FF,然后是E7。FF是起点,却被放在后面,这就是小端模式(低位放低地址,高位放高地址)。为什么会是这样?实际上,是这样读的

它会根据地址先判断哪个是最小的字空间,然后把字空间的内容读出来。同样,如果往后读,会不会挨着往后走呢?我们来验证下:先改一下,不是0012了,改成0014。R1最开始就是0,给它加上立即数。

还可以用微指令。现在值已经赋过来了

E800E800,新的字单元。从第9个开始,10E7FF00,可以看出,内存要分页,最小的也是分了断的。所以内存操作往往是按照字长来的。


原文链接:http://www.maiziedu.com/wiki/arm/memory/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,877评论 8 114
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,069评论 6 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,714评论 18 399
  • D3 大家好,我是来自上海的正面管教讲师,Leo妈妈。 今天我们来说说鼓励。下面这三句话,如果是对您说的,你如何看...
    楚丹丹阅读 1,792评论 0 0
  • 1.NSHome.... 2.NSSearchPathForDirectoriesInDomains() NSAr...
    nalis风阅读 2,920评论 0 0

友情链接更多精彩内容