【ARM64 常见汇编指令学习 19.3 -- ARMv8 三目运算指令 csel 详细介绍】 ...

打印 上一主题 下一主题

主题 749|帖子 749|积分 2247

请阅读【嵌入式开发学习必备专栏】


  
三目运算指令 csel

本篇文章以下面汇编代码介绍三目运算指令csel:
  1. adr     x0, pass_message
  2.                 adr     x1, fail_message
  3.                 csel    x1, x0, x1, pl
复制代码
下面是对这几行代码的详解:
地址获取

  1. adr x0, pass_message
  2. adr x1, fail_message
复制代码


  • adr x0, pass_message:该指令用于获取相对当前指令地址(PC)的偏移位置上的 pass_message 标签的地址,并将其放入寄存器 x0 中。adr 指令通常用于获取小范围内的标签或变量地址。
  • adr x1, fail_message:同样地,这条指令获取 fail_message 标签的地址,并将其放入寄存器 x1 中。
条件选择

  1. csel x1, x0, x1, pl
复制代码


  • csel x1, x0, x1, pl
    :这是一个条件选择(Conditional SELect)指令。它根据最后一个参数 pl(表现 Plus 或 Positive,N flag 未设置时满意)来选择 x0 或 x1 的值,并将所选值存入第一个参数指定的寄存器中,这里是 x1。

    • 假如条件 pl 建立(即,之前的操作导致状态寄存器的 N(Negative)标志位未被设置,表现效果为正数或零),则 x1 被赋值为 x0 的值,即 pass_message 的地址。
    • 假如条件 pl 不建立(即,N 标志位被设置,表现效果为负数),x1 保持不变,即仍为 fail_message 的地址。

用途

这组指令的用途通常是在基于某个条件(通常是之前的计算效果)来决定步伐的下一步行动,比如输出不同的消息。在这个场景中,根据某个条件的效果,选择 pass_message 或 fail_message 的地址,最终大概用于后续的打印或日志记录操作。
例如,在实验了某些操作后,步伐通过检查标志位来决定是显示“通过”消息还是“失败”消息。这种模式是低级编程中常见的条件逻辑处置惩罚方式,能有效地使用 ARM 架构提供的条件实验特性,以实现更紧凑和高效的代码。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表