使用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.可是不知道大 ...
随机推荐
- 解决Linux SSH登录慢
出现ssh登录慢一般有两个原因:DNS反向解析的问题和ssh的gssapi认证 :ssh的gssapi认证问题 GSSAPI ( Generic Security Services Applicati ...
- git工具 将源码clone到本地指定目录的三种方式
git工具 将源码clone到本地指定目录的三种方式 CreationTime--2018年7月27日15点34分 Author:Marydon 1.情景展示 运行git-bash.exe,输入命 ...
- 数制转换-栈的应用(C++实现)
本程序实现的是十进制与不同进制之间的的数据转换,利用的数据结构是栈,基本数学方法辗转相除法. conversion.h #include<stack> using namespace st ...
- 链接、ip地址及端口号
# encoding=utf-8 #python 2.7.10 #xiaodeng #链接(即报文如何通过传输控制协议链接从一个地方搬移到另外一个地方) #HTTP权威指南 13页 #TCP/IP # ...
- 迅雷极速版|xunlei下载
迅雷很不错的下载软件,曾经出现了,迷你版.极速版... 迅雷极速版 迅雷精简版 迅雷极速版-下载: http://pan.baidu.com/s/1dF3XYTj 密码: 5tj3 迅雷精简版-下载: ...
- HDUOJ-------- Fibonacci again and again
Fibonacci again and again Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/ ...
- Linux命令-实时监测命令:watch
watch 是一个非常实用的命令,基本所有的 Linux 发行版都带有这个小工具,如同名字一样,watch 可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行..在Linux下,watch是周期性 ...
- Tomcat配置+JSP页面模板修改UTF-8
A.修改Tomcat端口号步骤:1.找到Tomcat目录下的conf文件夹2.进入conf文件夹里面找到server.xml文件3.打开server.xml文件4.在server.xml文件里面找到下 ...
- Latex--TikZ和PGF--高级文本绘图,思维绘图,想到--得到!
Latex--TikZ和PGF--高级文本绘图,思维绘图,想到--得到! TikZ和PGF是一种用在TeX上的CLI绘图工具.CLI和GUI是两种常见的绘图方式,前者是所想即所得(WYTIWYG)的, ...
- ubuntu16.4安装中文输入法
ibus输入法 Chinese语言包安装 首先需要给Ubuntu16.04安装Chinese语言包支持. 如上图点击其中的Install/Remove Languages…,这个对话框是通过syst ...