ARM处理器架构的Thumb指令集中关于IT指令的使用

这篇具有很好参考价值的文章主要介绍了ARM处理器架构的Thumb指令集中关于IT指令的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了 IT 指令,进一步增强了代码的紧凑性。

Thumb中有一个比较有意思的指令——IT,这条指令用于根据指定的条件来执行后面相继的四条指令。当然,Thumb-2中大部分算术逻辑指令都含有带条件执行的特征,不过Thumb-2是32位的。如果你需要更紧凑的指令,那么使用Thumb结合ThumbEE来做带条件的指令执行还是不错的选择。Thumb本身不具备带条件指令执行的特性。

IT指令的描述为:IT{<x>{<y>{<z>}}} <firstcond>

其中,<x> 表示第二条指令的条件;<y> 表示第三条指令的条件;<z> 表示第四条指令的条件。<firstcond> 是条件操作数,表示第一条指令的条件。

<x><y><z> 的标识其实就两种符号——TET 表示 Then,表示相应的指令所满足的条件与 <firstcond> 一致;E 表示 Else,表示相应的指令所满足的条件与 <firstcond> 完全相反。因此,对于第一条指令而言,总是为 T 的,因此不需要在 IT 指令中显示给出,它直接对应于 <firstcond> 的条件。

另外,在 IT块 中不能再使用 IT 指令。即,相继的四条指令中不允许再出现 IT 指令。

下面给出一些示例代码:

//
//  hi.s
//  test
//
//  Created by zenny_chen on 13-5-8.
//  Copyright (c) 2013年 zenny_chen. All rights reserved.
//

.text
.align 4

.globl _Thumb2Test, _Thumb2Test2

.thumb

.thumb_func
_Thumb2Test:

    eor     r1, r1, r1
    eor     r2, r2, r2
    eor     r3, r3, r3
    eor     r12, r12, r12

    cmp     r1, #0
    itete   eq
    moveq   r1, #10
    movne   r2, #20
    moveq   r3, #30
    movne   r12, #50

    stmia   r0, {r1-r3, r12}

    bx      lr

.thumb_func
_Thumb2Test2:

    mov     r1, #1
    eor     r2, r2, r2
    eor     r3, r3, r3
    eor     r12, r12, r12

    cmp     r1, #0
    ittet   gt
    movgt   r1, #10
    movgt   r2, #20
    movle   r3, #30         // 这里只能用le(表示小于等于),而不能用lt(表示小于)
    movgt   r12, #50

    stmia   r0, {r1-r3, r12}

    bx      lr

下面是调用上述 Thumb2TestThumb2Test2 函数的Objective-C源文件。由于基于iOS系统,因此会有一些框架性的代码~

//
//  ViewController.m
//  test
//
//  Created by zenny_chen on 13-5-8.
//  Copyright (c) 2013年 zenny_chen. All rights reserved.
//
 
#import "ViewController.h"
 
@interface ViewController ()
 
@end
 
extern void Thumb2Test(int p[4]);
extern void Thumb2Test2(int p[4]);
 
@implementation ViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
     
    int a[4];
    Thumb2Test(a);
    NSLog(@"a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d", a[0], a[1], a[2], a[3]);
     
    Thumb2Test2(a);
    NSLog(@"a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d", a[0], a[1], a[2], a[3]);
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
@end

大家可以尝试编译运行,看看输出什么结果~🤭文章来源地址https://www.toymoban.com/news/detail-728069.html

到了这里,关于ARM处理器架构的Thumb指令集中关于IT指令的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ARM架构版本及处理器系列详细介绍

    ARM是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器,它只设计芯片而不生产。ARM的经营模式在于出售其知识产权核(IP core),将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供技术服务。         ARM的版本

    2024年02月16日
    浏览(44)
  • 『ARM』和『x86』处理器架构解析指南

    『ARM』和『x86』处理器架构解析指南

    如果问大家是否知道 CPU,我相信不会得到否定的答案,但是如果继续问大家是否了解 ARM 和 X86 架构 ,他们的区别又是什么,相信 可能部分人就会哑口无言 了 目前随着深度学习、高性能计算、NLP、AIGC、GLM、AGI 的技术迭代,助力大模型快速发展,对于 多元算力结合(CPU+GP

    2024年02月08日
    浏览(63)
  • 『模型部署』神经网络模型部署[运行时|指令执行|处理器架构|TensorRT]

    『模型部署』神经网络模型部署[运行时|指令执行|处理器架构|TensorRT]

    『模型部署』神经网络模型部署[运行时|指令执行|处理器架构|TensorRT] 辅助文档-本教程配套代码,以及更多范例和文档 :https://github.com/NVIDIA/trt-samples-for-hackathon-cn/tree/master/cookbook Polygraphy:深度学习推理原型设计和调试工具包 介绍个工具Torch.Profiler,使用它来确定你的性能瓶颈

    2024年02月11日
    浏览(32)
  • 2023年Arm最新处理器架构分析——X4、A720和A520

    2023年Arm最新处理器架构分析——X4、A720和A520

    上一篇文章我们介绍了Arm的Cortex-X1至Cortex-X3系列处理器,2023年的5月底,Arm如期发布了新一年的处理器架构,分别为超级大核心Cortex-X4,大核心A720和小核心A520。在智能手机行业,Arm始终保持每年一迭代的处理器架构升级节奏,让用户可以不断体验到最先进的产品设计。本文主

    2024年02月16日
    浏览(12)
  • 【软件工具】 Linux 中的 ARM 和 AMD 两种不同的处理器架构简介

    Linux 中的 ARM 和 AMD 两种不同的处理器架构。ARM 和 AMD 架构的主要区别在于它们的设计哲学、性能特性、能效和主要应用场景。以下是一些关键差异: 架构设计 : ARM(Advanced RISC Machine) :ARM 架构基于 RISC(精简指令集计算)原理。它使用更少的指令和简化的指令集,这有助

    2024年04月10日
    浏览(43)
  • ARM处理器概述

    RISC处理器和CISC处理器 首先了解一下两种处理器名字: RISC(Reduced Instruction Set Computer): 精简指令集 处理器 与之相对应的是: CISC(Complex Instruction Set Computer): 复杂指令集 处理器 顾名思义,RISC比CISC更加简单,那么对于处理器来说什么能称为简单呢?可以联想为生活中可

    2024年02月13日
    浏览(44)
  • 除法的效率 arm处理器

    除法的效率 性能结论: 除法:545ms 乘法:93ms 差了3倍 代码: 测试结果 : void fun(Pack1* restrict in, Pack2* restrict out) ; __restrict__ 申明该指针为唯一的访问该内存的指针 优化成果: 时间优化为原来的82% 指令优化为74% cache miss 没有变化 优化对比 测试平台 MTK arm天机 8000

    2024年02月10日
    浏览(45)
  • MIPS指令集处理器设计(支持64条汇编指令)

    MIPS指令集处理器设计(支持64条汇编指令)

    一、题目背景和意义 二、国内外研究现状 (略) (1) .mips 基础 指令集格式 总结 MIPS是(Microcomputer without interlocked pipeline stages)[10]的缩写,含义是无互锁流水级微处理器。MIPS 是最早、最成功的RISC处理器之一[11],源于Stanford 大学的John Hennessy 教授的研究成果。(Hennessy 于1984年在

    2024年02月07日
    浏览(15)
  • DP读书:鲲鹏处理器 架构与编程(八)3.1鲲鹏处理器片上系统与Taishan处理器内核架构

    DP读书:鲲鹏处理器 架构与编程(八)3.1鲲鹏处理器片上系统与Taishan处理器内核架构

    处理器体系结构,是一个偏底层的内容,但这是任一计算机系统的底层。 系统的性能、生态和功能很大程度上都依赖于计算机系统底层——处理器体系结构。任何一个系统程序员、固件设计者、应用程序员 甚至 服务器管理员,如果想要充分利用现代高性能处理器的硬件性能

    2024年02月12日
    浏览(13)
  • [ARM 汇编]进阶篇—异常处理与中断—2.4.2 ARM处理器的异常向量表

    [ARM 汇编]进阶篇—异常处理与中断—2.4.2 ARM处理器的异常向量表

    异常向量表简介 在ARM架构中,异常向量表是一组固定位置的内存地址,它们包含了处理器在遇到异常时需要跳转到的处理程序的入口地址。每个异常类型都有一个对应的向量地址。当异常发生时,处理器会自动跳转到对应的向量地址,并开始执行异常处理程序。 异常向量表

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包