前言

感觉这方面的计算参考书上也讲的比较模糊,在这里分享一下计算的方法

立即数寻址有效数的计算

(一)ARM立即数寻址的指令格式

(二)例1

汇编指令:mov R0, #0x00110000
转为机器码就是
机器码:0xe3a03811,其中0x811是ARM在机器码中用来表示立即数的部分
其中8对应上图的rot11对应上图的Immed_8

rot是循环右移位数的1/2,Immed_8是用于被右移的“基数”

一个有效的立即数 = immed_8 进行 循环右移(2 * rot)

比如本例中,0x00110000这个立即数,它等于0x11循环右移16位

我们将它转换成二进制来仔细看移位操作:
0x11转为二进制
0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0001 | 0001
之后循环右移16位,
0000 | 0000 | 0001 | 0001 | 0000 | 0000 | 0000 | 0000
可以看到,循环右移后的结果,正好=0x00110000

(三)例2

给定立即数0x00012800,求立即寻址时,指令的低12位是什么?

可以看到,这个题目是例1的反向求解,已知立即数求指令

首先,将立即数转换为二进制0000 | 0000 | 0000 | 0001 | 0010 | 1000 | 0000 | 0000

第二步,将二进制中的关键8位提取出来,因为循环移位必定是移动偶数位的,所以我们提取的时候要保证我们找的关键8位在原二进制中是处于偶数位的

因此在这里我们提取的是01 | 0010 | 10,而不是1 | 0010 | 100(这里的|对应原二进制|的位置,便于读者观察),关键8位的16进制表示为0x4a

第三步,将提取出来的关键8位放到二进制的最右边,构成一个待移动二进制串
0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0100 | 1010

第四步,对第三步的待移动二进制串进行循环右移操作,使得循环右移后的结果与原二进制串一致,记录移动的位数,即
0000 | 0000 | 0000 | 0000 | 0000 | 0000 | 0100 | 1010 循环右移 => 0000 | 0000 | 0000 | 0001 | 0010 | 1000 | 0000 | 0000

得移动位数为22位,等于0xb * 2

第五步,合并第二步得到的关键8位和第四步的移动位数,为0xb4a

ARM立即寻址中有效立即数的计算相关推荐

  1. oracle中sql行数的计算,Oracle技术网—如何利用DBMS_SQL包和游标计算当前用户下所有表的行数...

    实现方法: SQL> conn scott/tiger SQL> set serveroutput on size 1000000 SQL> SQL> DECLARE 2 t_ ...

  2. 基于传染病模型中的再生数R0的讨论【基于matlab的动力学模型学习笔记_2】

    /*仅当作学习笔记,若有纰漏欢迎友好交流指正,此外若能提供一点帮助将会十分荣幸*/ 在上一篇博文中介绍了病毒模型的基本计算思路方法,而本文将会重点讨论基本再生数R0-这个决定病毒是继续发展还是衰减的关 ...

  3. 劈尖干涉公式_劈尖干涉条纹数的计算

    © 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.    http://www.c ...

  4. ARM 立即寻址之立即数的形成 —— 如何判断有效立即数

    依据指令中给出的操作数的不同格式,ARM 指令系统具有 8 种常见的寻址方式.我们这次就来讨论一下立即寻址. 文章目录 立即寻址的特点 立即数形式 合法立即数 立即寻址机器指令格式 指令解析 判断方法 ...

  5. ir指令、立即数的作用_ARM指令中使用立即数详解

    arm 指令 立即数 (二) 在 ARM 数据处理指令中 , 当参与操作的第二操作数为立即数时 , 每个立即数都 是采用一个 8 位的常数循环右移偶数位而间接得到 , 其中循环右移的位数有一 个 4 ...

  6. ARM官方汇编与ARM GNU汇编中的伪操作

    以下内容源于网络资源的学习与整理,如有侵权请告知删除. 参考博客 (1)嵌入式Linux ARM汇编 (2)GNU ARM 汇编基础 - wanli1024 - 博客园 (3)GNU ARM 汇编简介 ...

  7. 分类问题中的“维数灾难” - robotMax

    分类问题中的"维数灾难" - robotMax 在看机器学习的论文时,经常会看到有作者提到"curse of dimensionality",中文译为" ...

  8. oracle取得表中总记录数最快的方法

    查询表中的记录总数的语法就是SELECT COUNT(*) FROM TABLE_NAME.这可能是最经常使用的一类SQL语句. 本文讨论怎样才能最快的得到这个记录数.本文纯粹主要是理论上的讨论,文章 ...

  9. python统计字符串汉字个数_Python使用递归计算字符串中的字符数

    第一步是把这个问题分解成碎片: 1.如何确定字符是否在字符串中? 如果是递归地执行此操作,则需要检查字符串的是否是第一个字符. 2.如何比较两个字符? Python有一个==运算符,用于确定两个事物是 ...

最新文章

  1. MySQL批量SQL插入性能优化
  2. [c++] - 简单的冒泡
  3. Java 动态加载类
  4. 如何学习matlab 知乎,知乎日报
  5. 在Wireshark中过滤数据包
  6. java web 邮件_JavaWeb -- 邮件收发
  7. word2vec词向量训练及中文文本类似度计算
  8. Golang实践录:调用C++函数的优化
  9. 网页上无缝滚动的实现
  10. Android-Universal-Image-Loader学习笔记(4)--download
  11. 什么是人工智能?人工智能如何系统的学习
  12. IOS 使用TestFlight 详解
  13. php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...
  14. 斗鱼直播地址抓取——转载
  15. jquery自带的赋值函数html
  16. 金蝶BOS是什么,能给您带来什么价值?
  17. 持续集成(三)- hudson插件入门
  18. mysql列转行统计查询_Mysql 列转行统计查询 、行转列统计查询
  19. 直播源列表转换php,TeleList(直播源列表转换软件)V2.3.11 正式版
  20. GPL/wide-dhcpv6/dhcp6c源代码分析

热门文章

  1. 利用word宏命令来自动化缩写期刊名称
  2. [转]Visual C++ 和 C++ 有什么区别?
  3. c++实现北京地铁线路查询系统
  4. SA387GR11CL2钢板密度
  5. DataV(对象类)展示8 ~ 20 °C
  6. 法规标准-UN R158标准解读
  7. GRPC、WCF、WebAPI性能比较
  8. 判断三个String是否相等
  9. 小云讲可视化 | 雷达图Radar
  10. word文档打开密码解密怎么解