小测验:
1.LEGv8中条件分支的地址范围多大(K=1024)?

答案: 分支前后大约1024K(即1M)的地址范围

2.LEGv8中跳转和跳转链接指令的地址范围(M=1024K)是多大?

答案:分支前后大约128M的地址范围

请读者自行计算一下以上两道题目,并且请带着这两个问题阅读下面的文字。

下面是正文。

LEGv8跳转指令(无条件分支指令)采用最简单的寻址方式,使用B型LEGv8指令格式,操作码为6位,其余为都是地址段。

B 10000 // go to location  10000(Decimal)

可以汇编成下面的格式(实际中更为复杂):

5 10000ten10000_{ten}10000ten​
6位 26位

其中,跳转指令的操作码值为5,分支地址为10000ten10000_{ten}10000ten​。

和跳转指令不同,条件分支指令除了分支地址之外还可以指定一个操作数。
因此:

CBNZ X19,Exit  //go to Exit if X19≠0

被汇编成下面的指令,其中只有19位用于指定分支地址:

181 Exit 19
8位 19位 5位

对于条件分支指令,这种格式叫作CB型。

如果程序的地址只能放在19位的字段中,这意味着没有程序能大于2192^{19}219,这在今天来说实在太小,因此是一种很不现实的选择。

另一种方法是指定一个寄存器,该寄存器的值用于和分支地址的偏移量相加以得到最终地址,这样分支指令的地址可按下面的方式计算:
程序计数器=寄存器内容+分支地址偏移量程序计数器=寄存器内容+分支地址偏移量程序计数器=寄存器内容+分支地址偏移量

这个求和结果允许程序的大小得到2642^{64}264,并且仍能使用条件分支,从而解决了分支地址大小的问题。但随之而来的问题是,使用哪个寄存器?

答案取决于条件分支是如何使用的。 条件分支在循环和if语句中都可以找到,它们倾向于转向附近的指令。例如,在SPEC基准测试程序中,大概一半的条件分支转移范围都在16条指令以内。因为程序计数器(PC)包含当前指令的地址,所以如果我们使用PC作为计算地址的寄存器,就可转移到距当前指令±218±2^{18}±218个字(1个字=32位)的地方。 几乎所有的循环和if语句都远远小于±218±2^{18}±218个字,因此PC是一个理想的选择。这种分支地址的寻址方式称为PC相对寻址(PC-relative addressing).

PC相对寻址:一种寻址方式,将PC和指令中的常数相加作为地址。

像近期大多数计算机一样,LEGv8对所有条件分支使用PC相对寻址,因为这些指令的跳转目标一般都比较接近分支指令本身。 另一方面,分支和链接(branch-and-link)指令引发的过程则并不一定总是靠近调用者,所以通常使用其他寻址方式。 因此,LEGv8 体系结构通过对分支指令以及分支和链接指令采用B型指令格式,为过程调用提供长地址。

因为LEGv8的所有指令都是4字节长,所以将PC相对寻址的地址设计成字地址(1个字=32位)而不是字节地址,从而可以扩展分支转移的范围。 通过将字段解释成相对字地址而不是相对字节地址,19位的地址字段所指示的转移范围扩大了4倍:当前PC±1MB。同样,分支指令的26位字段 也是字地址,即表示28位字节地址。

这里的1MB是怎么算出来的呢? 19位地址提供2182^{18}218种寻址方式,又因为是字地址,还需要乘以4倍(即222^222)所以 寻址大小为218×22=220=1MB2^{18}\times 2^2=2^{20} =1MB218×22=220=1MB

无条件分支(即跳转指令)也采用PC相对寻址,这意味着转移范围是当前PC值±128MB。

这里的128MB是怎么算出来的呢? 26位地址提供2252^{25}225种寻址方式,又因为是字地址,还需要乘以4倍(即222^222)所以 寻址大小为225×22=227=220×27=128MB2^{25}\times 2^2=2^{27}=2^{20} \times 2^7 =128MB225×22=227=220×27=128MB

阅读《计算机组成与设计(ARM版)》的读书笔记。

LEGv8指令集中分支和跳转的地址范围相关推荐

  1. MIPS指令集:运算指令、访存指令、分支和跳转、协处理器0指令

    计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程.通常一条指令包括两方面的内容: 操作码和操作数,操作码决定要完成的操作,操作数指参加运算 ...

  2. 16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)

    目录 1.控制转移指令 1.1 条件跳转指令 1.2 比较条件跳转指令 1.3 多条件分支跳转指令 1.4 无条件跳转指令 1.控制转移指令 控制转移指令分为如下图所示的5种,其中比较指令在算术指令中 ...

  3. 汇编——跳转指令与分支结构(包括OF和CF的溢出判断)

    汇编中的循环和分支结构 虽然我们没有花里胡哨的函数和对象等等,但是我们也可以实现循环和分支结构(其实就是if_else) 我们要知道一个问题,就是代码是一行行执行的. (其实这个是说给我这样的被Ver ...

  4. 第7章 C控制语句:分支和跳转

    学习笔记--<C Prime Plus> 第7章 C控制语句:分支和跳转 7.1 if 语句 7.2 if else 语句 7.2.1 介绍 getchar() 和 putchar() 7 ...

  5. 《C Primer Plus》第七章--C控制语句:分支和跳转(if else switch continue break goto 逻辑运算符ctype.h)

    文章目录 C控制语句:分支和跳转 本章内容 if语句 if else语句 另一个示例:介绍getchar()和putchar() ctype.h系列的字符函数 多重选择else if else与if配 ...

  6. C语言学习(四)C控制语句:循环、分支和跳转

    参考书:<C Primer Plus>第六版 for循环.程序清单1. 出口条件循环:do while.程序清单2. 关系运算符的优先级比算术运算符低,关系运算符的优先级比赋值运算符高. ...

  7. 4.IDA-导航(跳转到地址、导航按钮、栈帧、调用约定、局部变量布局、IDA的栈视图)

    1.跳转到地址 使用Jump▶Jump to Address命令或在处于活动状态的反汇编窗口中按下热键G,均可以打开Jump to Address对话框,如果把这个对话框看成Go对话框,可能有助于你记 ...

  8. 假设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址、二地址三种格式......

    假设指令字长为16位,操作数的地址码为6位,指令有零地址.一地址.二地址三种格式.  (1)设操作码固定,若零地址指令有M种,一地址指令有N种,则二地址指令最多有几种?  (2)采用扩展操作码技术,二 ...

  9. 小程序跳转url地址实现

    小程序跳转url地址 1.封装一个webview页面 2. 使用时 3. 注意 1.封装一个webview页面 <web-view src="{{src}}" bindmes ...

最新文章

  1. 专有云到混合云,是云计算的下半场?
  2. 目标检测Anchor的What/Where/When/Why/How
  3. LevelDB 之 arena
  4. 苹果x和xsmax有什么区别_苹果手机不卡的真相是什么,安卓和iOS有本质区别
  5. windows media player upnp
  6. 微信游戏推荐系统大揭秘
  7. TreeView 右键菜单
  8. 今日头条信息流 - 广告策略
  9. 从街舞导师王一博.fans机舱生日趴,看“线上应援”新形式
  10. 过年了JAVA类编写烟花爆竹——学习分享下笔者的经验
  11. 北大核刊最新版2020目录_新食品原料目录大全(2020年最新版)
  12. Index out of range using input dim 2; input has only 2 dims
  13. 认识Base64,看这篇足够了
  14. [系统工具]VMware Workstation 10.0 官方中文版 (附注册机/序列号)
  15. Unity中的静态合批、动态合批、GPU Instance 以及SRP Batching
  16. 经典快速制作套打证书模板(doc)大全
  17. 计算机爱恩斯坦棋游戏,爱恩斯坦棋计算机博弈系统的研究与实现
  18. 想从事人工智能和大数据的学生们,这里有几条职业建议给你
  19. Python+Streamlit实现项目成本管理挣值分析可视化
  20. web前端练手小项目——使用js实现2048小游戏

热门文章

  1. Mongo报如下类似错误时的修改方法Cannot natively represent the long 1396367483000 on this platform...
  2. oracle表数据误删恢复
  3. arma找不到合适的模型_新手自学PS找不到合适的素材?5000高清背景素材+150G素材包+滤镜...
  4. php fprintf,PHP fprintf()函数用法讲解
  5. vuefullcalendar怎么判断切换上下月_六种区分对联上下联的方法
  6. 第十六章 推荐系统-机器学习老师板书-斯坦福吴恩达教授
  7. 使用windows自带远程桌面远程办公
  8. STM32 进阶教程 16 - ADC1与ADC2同步采样
  9. wsl(windows上运行linux)安装到非C盘解决方案
  10. 【测试】用示波器抓取红外遥控器NEC信号