使用B或BL跳转时,下一条指令的地址的计算
.text
.global _start
3_start:
b step1
step1:
ldr pc, =step2
step2:
b step2 反汇编代码:
: eaffffff b 0x4
: e59ff000 ldr pc, [pc, #] ; 0xc
: eafffffe b 0x8
c: tsteq r0, # ; 0x8 b跳转指令:它是个相对跳转指令,其机器码格式如下:
[:]位是条件码;
[:]位为""(0xeaffffff为一条指令的二进制机器码)时,表示B跳转指令;
位为""时,表示BL跳转指令;
[: ] 表示一个相对于PC的偏移地址。 >将指令中24位带符号的补码立即数扩展为32(扩展其符号位);
>将此32位数左移两位;
>将得到的值加到pc寄存器中,即得到跳转的目标地址。 我们看看第一条指令“b step1”的机器码0xeaffffff:
>24位带符号的补码为0xffffff,将它扩展为32得到:0xffffffff
>将此32位数左移两位得到:0xfffffffc,其值就是-(0xfffffffc符号位不变,其余位取反再加1得到-);
>pc的值是当前指令的下两条(下一条的下一条)指令的地址,加上步骤2得到的-(PC-,即PC回退4个字节,刚好指向当前指令的下一条指令上),这恰好是第二条指令step1的地址。
不要被被反汇编代码中的“b 0x4”给迷惑了,它可不是说跳到绝对地址0x4处执行,绝对地址得像上述3个步骤那样计算。
使用B或BL跳转时,下一条指令的地址的计算的更多相关文章
- 使用B或BL跳转时,下一条指令的地址是这样计算的
B跳转指令:它是个相对跳转指令,其机器码格式如下: [31:28]位是条件码:[27:24]位为“1010”(0xeaffffff)时,表示B跳转指令,为“1011”时,表示BL跳转指令:[23:0] ...
- LyScript 获取上一条与下一条指令
LyScript 插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在LyScript插 ...
- Linux系统下用C语言获取MAC地址
最近在做一个小程序,需要用到在linux系统里编写C程序从而获取MAC地址,从网上搜了一遍,想总结一下.如果你就只需要单个功能的程序,可以采用方法一,见代码1,一般最好能够封装起来,写成获取MAC地址 ...
- Jquery 实现input回车时跳转到下一个input元素
/** * 回车时跳转到下一个元素 * @Author HTL * @DateTime 2016-12-30T11:33:25+0800 * @param {[type]} $input [INP ...
- Spring MVC 页面跳转时传递参数
页面仍然使用 JSP,在跳转时如果想传递参数则需要用到类 RedirectAttributes. 首先看看如何打开一个普通页面: // 登录页面(每个页面都要独立的 Action 来支持其呈现) @R ...
- MVC RedirectToAction 跳转时传参问题
RedirectToAction方法提供了5个重载方法 1.单纯跳转,不带参数. string redirectUrl = "/List" ; return RedirectToA ...
- Easyui下的点击回车键跳转到下个控件
在Easyui框架下,JavaScript 中的 onKeyDown事件居然失效了.所以使用了另外的函数去实现点击回车键跳转到下个控件. /** * 点击回车键跳转到下个控件; * @param ol ...
- VIM 中 查看{}是否闭合,按%跳转到下个闭合
VIM 中 查看{}是否闭合,按%跳转到下个闭合
- Activity跳转时传递Bitmap对象的实现
前言 相信大家可能都了解Activity跳转时我们是能够传递參数的,比方使用Intent传递或者Bundle来传递,把当前Activity的一些信息传递给将要跳转到的新的Activity.可是不知道大 ...
随机推荐
- 解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决
原因是没有GLIBCXX_3..15版本,或是更高的版本. 一.查看并下载 32位系统: [root@localhost ~]# strings /usr/lib/libstdc++.so. | gr ...
- epoll+socket的简单测试例子
server: #include <sys/socket.h> #include <sys/epoll.h> #include <netinet/in.h> #in ...
- eclipse 创建mavenWeb项目
eclipse 创建mavenWeb项目 CreationTime--2018年6月7日18点46分 Author:Marydon 一.创建MavenWeb项目 1.右键-->New--&g ...
- Java编程思想(十五) —— 类型信息之反射
讲完.class,Class之后,继续. 1)泛化的Class引用 Class也能够增加泛型,增加之后会进行类型检查. 贴一下书上原话,Class<?>优于Class,尽管他们是等价的,C ...
- Java典型应用彻查1000例:图形与网络游戏开发 PDF 扫描版[68M]
<Java典型应用彻查1000例·图形与网络游戏开发>实例丰富,编排合理,可以让有初级Java基础的读者,从陌生到完全熟练地设计网络游戏,进而掌握3D立体绘图方法,适合作为Java网络游戏 ...
- echo “新密码”|passwd --stdin 用户名
--stdin This option is used to indicate that passwd should read the new password from standard input ...
- python3.x 和 python2.x关于 urllib的用法
在python2.x版本中可以直接使用import urllib来进行操作,但是python3.x版本中使用的是import urllib.request来进行操作,下面是简单的例子: python2 ...
- Web在线文件管理器(web os) KODExplorer
KODExplorer是款开源的Web在线文件管理.代码编辑器.它提供了类windows经典用户界面,一整套在线文件管理.文件预览.编辑.上传下载.在线解压缩.音乐播放功能.让你直接在浏览器端实现we ...
- cocos2dx跟eclipse交叉编译“make: * No rule to make target `all' Stop”的解决方案
cocos2dx和eclipse交叉编译“make: *** No rule to make target `all'. Stop”的解决方案 搞cocos2dx在eclipse上的交叉编译. 项目. ...
- SecureCRT 详细使用教程和技巧
SecureCRT 常用技巧 0.在secureCRT里切换不同的窗口:ctrl+tab. 复制:[ctrl] + [shift] + c 粘贴:[ctrl] + [shift] + v ...