xtensa架构--算术指令

目录

一 算术指令概述

二 算术指令详述

1 ADD (Add two registers)

2 ADDX2 (Add register shifted by 1)

3 ADDX4 (Add register shifted by 2)

4 ADDX8 (Add register shifted by 3)

5 SUB (Subtract two registers)

6 SUBX2 (Subtract register from register shifted by 1)

7 SUBX4 (Subtract register from register shifted by 2)

8 SUBX8 (Subtract register from register shifted by 3)

9 NEG (Negate)

10 ABS (Absolute value)

11 ADDI (Add signed constant)

12 ADDMI (Add signed constant shifted by 8)

13 SALT (Set AR if Less Than)

14 SALTU (Set AR if Less Than Unsigned)


一 算术指令概述

算术指令,包括带有少量移位的加法和减法,用于地址计算和合成常数乘法。ADDMI指令用于扩展加载和存储指令的范围。

表3.20. 算术指令

指令格式定义
ADDRRR两个寄存器相加
ADDX2RRR寄存器加上寄存器右移一位
ADDX4RRR寄存器加上寄存器右移两位
ADDX8RRR寄存器加上寄存器右移三位
SUBRRR两个寄存器相减
SUBX2RRR寄存器减去寄存器右移一位
SUBX4RRR寄存器减去寄存器右移两位
SUBX8RRR寄存器减去寄存器右移三位
NEGRRR取反
ABSRRR绝对值
ADDIRR8i加上带符号的立即数
ADDMIRR8i加上带符号的立即数右移八位
SALTRRR设置AR,如果小于则置零
SALTURRR设置AR,如果无符号小于则置零

Chapter 3. Core Architecture

Table 3.20. Arithmetic Instructions (continued)

指令格式定义
ADDIRR8i加上带符号的立即数
ADDMIRR8i加上带符号的立即数右移八位
SALTRRR如果小于则设置AR为0
SALTURRR如果无符号小于则设置AR为0

二 算术指令详述

1 ADD (Add two registers)

格式: ADD Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: ADD R0, R1, R2

  • 将R1和R2的内容相加并将结果存储到R0。

注意事项:

  • 注意溢出情况。

2 ADDX2 (Add register shifted by 1)

格式: ADDX2 Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: ADDX2 R0, R1, R2

  • 将R1的内容右移1位并与R2相加,结果存储到R0。

注意事项:

  • 注意溢出情况。

3 ADDX4 (Add register shifted by 2)

格式: ADDX4 Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: ADDX4 R0, R1, R2

  • 将R1的内容右移2位并与R2相加,结果存储到R0。

注意事项:

  • 注意溢出情况。

4 ADDX8 (Add register shifted by 3)

格式: ADDX8 Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: ADDX8 R0, R1, R2

  • 将R1的内容右移3位并与R2相加,结果存储到R0。

注意事项:

  • 注意溢出情况。

5 SUB (Subtract two registers)

格式: SUB Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: SUB R0, R1, R2

  • 计算R1和R2之差并将结果存储到R0。

注意事项:

  • 注意溢出情况。

6 SUBX2 (Subtract register from register shifted by 1)

格式: SUBX2 Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: SUBX2 R0, R1, R2

  • 计算R1减去R2右移1位的结果,结果存储到R0。

注意事项:

  • 注意溢出情况。

7 SUBX4 (Subtract register from register shifted by 2)

格式: SUBX4 Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: SUBX4 R0, R1, R2

  • 计算R1减去R2右移2位的结果,结果存储到R0。

注意事项:

  • 注意溢出情况。

8 SUBX8 (Subtract register from register shifted by 3)

格式: SUBX8 Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: SUBX8 R0, R1, R2

  • 计算R1减去R2右移3位的结果,结果存储到R0。

注意事项:

  • 注意溢出情况。

9 NEG (Negate)

格式: NEG Rd, Rs

  • Rd: 目标寄存器
  • Rs: 源寄存器

实例: NEG R0, R1

  • 将R1的内容取反并存储到R0。

注意事项:

  • 注意溢出情况。

10 ABS (Absolute value)

格式: ABS Rd, Rs

  • Rd: 目标寄存器
  • Rs: 源寄存器

实例: ABS R0, R1

  • 将R1的内容取绝对值并存储到R0。

注意事项:

  • 注意溢出情况。

11 ADDI (Add signed constant)

格式: ADDI Rd, Rs, #imm

  • Rd: 目标寄存器
  • Rs: 源寄存器
  • #imm: 带符号的立即数

实例: ADDI R0, R1, #10

  • 将R1的内容加上10并存储到R0。

注意事项:

  • 立即数必须在-128至+127之间。

12 ADDMI (Add signed constant shifted by 8)

格式: ADDMI Rd, Rs, #imm

  • Rd: 目标寄存器
  • Rs: 源寄存器
  • #imm: 带符号的立即数右移8位

实例: ADDMI R0, R1, #10

  • 将R1的内容加上10右移8位并存储到R0。

注意事项:

  • 立即数必须在-128至+127之间。

13 SALT (Set AR if Less Than)

格式: SALT Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: SALT R0, R1, R2

  • 如果R1小于R2,则将R0设为全零;否则不变。

注意事项:

  • 此指令仅考虑带符号比较。

14 SALTU (Set AR if Less Than Unsigned)

格式: SALTU Rd, Rs, Rt

  • Rd: 目标寄存器
  • Rs: 第一个源寄存器
  • Rt: 第二个源寄存器

实例: SALTU R0, R1, R2

  • 如果R1无符号小于R2,则将R0设为全零;否则不变。

**

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值