ARM立即寻址中有效立即数的计算
前言
感觉这方面的计算参考书上也讲的比较模糊,在这里分享一下计算的方法
立即数寻址有效数的计算
(一)ARM立即数寻址的指令格式
(二)例1
汇编指令:mov R0, #0x00110000
转为机器码就是
机器码:0xe3a03811
,其中0x811
是ARM在机器码中用来表示立即数的部分
其中8
对应上图的rot
,11
对应上图的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立即寻址中有效立即数的计算相关推荐
- oracle中sql行数的计算,Oracle技术网—如何利用DBMS_SQL包和游标计算当前用户下所有表的行数...
实现方法: SQL> conn scott/tiger SQL> set serveroutput on size 1000000 SQL> SQL> DECLARE 2 t_ ...
- 基于传染病模型中的再生数R0的讨论【基于matlab的动力学模型学习笔记_2】
/*仅当作学习笔记,若有纰漏欢迎友好交流指正,此外若能提供一点帮助将会十分荣幸*/ 在上一篇博文中介绍了病毒模型的基本计算思路方法,而本文将会重点讨论基本再生数R0-这个决定病毒是继续发展还是衰减的关 ...
- 劈尖干涉公式_劈尖干涉条纹数的计算
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.c ...
- ARM 立即寻址之立即数的形成 —— 如何判断有效立即数
依据指令中给出的操作数的不同格式,ARM 指令系统具有 8 种常见的寻址方式.我们这次就来讨论一下立即寻址. 文章目录 立即寻址的特点 立即数形式 合法立即数 立即寻址机器指令格式 指令解析 判断方法 ...
- ir指令、立即数的作用_ARM指令中使用立即数详解
arm 指令 立即数 (二) 在 ARM 数据处理指令中 , 当参与操作的第二操作数为立即数时 , 每个立即数都 是采用一个 8 位的常数循环右移偶数位而间接得到 , 其中循环右移的位数有一 个 4 ...
- ARM官方汇编与ARM GNU汇编中的伪操作
以下内容源于网络资源的学习与整理,如有侵权请告知删除. 参考博客 (1)嵌入式Linux ARM汇编 (2)GNU ARM 汇编基础 - wanli1024 - 博客园 (3)GNU ARM 汇编简介 ...
- 分类问题中的“维数灾难” - robotMax
分类问题中的"维数灾难" - robotMax 在看机器学习的论文时,经常会看到有作者提到"curse of dimensionality",中文译为" ...
- oracle取得表中总记录数最快的方法
查询表中的记录总数的语法就是SELECT COUNT(*) FROM TABLE_NAME.这可能是最经常使用的一类SQL语句. 本文讨论怎样才能最快的得到这个记录数.本文纯粹主要是理论上的讨论,文章 ...
- python统计字符串汉字个数_Python使用递归计算字符串中的字符数
第一步是把这个问题分解成碎片: 1.如何确定字符是否在字符串中? 如果是递归地执行此操作,则需要检查字符串的是否是第一个字符. 2.如何比较两个字符? Python有一个==运算符,用于确定两个事物是 ...
最新文章
- MySQL批量SQL插入性能优化
- [c++] - 简单的冒泡
- Java 动态加载类
- 如何学习matlab 知乎,知乎日报
- 在Wireshark中过滤数据包
- java web 邮件_JavaWeb -- 邮件收发
- word2vec词向量训练及中文文本类似度计算
- Golang实践录:调用C++函数的优化
- 网页上无缝滚动的实现
- Android-Universal-Image-Loader学习笔记(4)--download
- 什么是人工智能?人工智能如何系统的学习
- IOS 使用TestFlight 详解
- php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...
- 斗鱼直播地址抓取——转载
- jquery自带的赋值函数html
- 金蝶BOS是什么,能给您带来什么价值?
- 持续集成(三)- hudson插件入门
- mysql列转行统计查询_Mysql 列转行统计查询 、行转列统计查询
- 直播源列表转换php,TeleList(直播源列表转换软件)V2.3.11 正式版
- GPL/wide-dhcpv6/dhcp6c源代码分析