当前位置: 首页> 财经> 金融 > 深圳住房与建设局官网_公司简历模板范文填写_外链代发2分一条_市场营销策略有哪4种

深圳住房与建设局官网_公司简历模板范文填写_外链代发2分一条_市场营销策略有哪4种

时间:2025/7/9 23:41:49来源:https://blog.csdn.net/uiop_uiop_uiop/article/details/144812124 浏览次数:0次
深圳住房与建设局官网_公司简历模板范文填写_外链代发2分一条_市场营销策略有哪4种

其实整体概括下来,就是两个寄存器比大小,按照不同的格式(有符号,无符号)比


条件选择

(Conditional Selection, CSEL)

 示例

CSEL X3, X1, X2, EQ

在这个例子中,如果条件码 EQ 为真(即条件寄存器的标志指示相等),那么 X3 将被赋值为 X1 的值,否则将被赋值为 X2 的值。

  1. EQ (Equal): 零标志(Z)被设置,即结果为零。
  2. NE (Not Equal): 零标志(Z)没有被设置,即结果不为零。
  3. CS/HS: Carry Set/Unsigned Higher or Same: 进位标志(C)被设置,用于无符号比较(大于或等于)。
  4. CC/LO: Carry Clear/Unsigned Lower: 进位标志(C)没有被设置,用于无符号比较(小于)。
  5. MI (Minus): 负标志(N)被设置,表示结果为负。
  6. PL (Plus): 负标志(N)没有被设置,表示结果为正或零。
  7. VS (Overflow Set): 溢出标志(V)被设置。
  8. VC (Overflow Clear): 溢出标志(V)没有被设置。
  9. HI (Unsigned Higher): 进位标志(C)被设置且零标志(Z)没有被设置,用于无符号比较(严格大于)。
  10. LS (Unsigned Lower or Same): 进位标志(C)没有被设置或零标志(Z)被设置,用于无符号比较(小于或等于)。
  11. GE (Signed Greater than or Equal): 负标志(N)等于溢出标志(V),用于有符号比较(大于或等于)。
  12. LT (Signed Less Than): 负标志(N)不等于溢出标志(V),用于有符号比较(小于)。
  13. GT (Signed Greater Than): 零标志(Z)没有被设置且负标志(N)等于溢出标志(V),用于有符号比较(严格大于)。
  14. LE (Signed Less than or Equal): 零标志(Z)被设置或负标志(N)不等于溢出标志(V),用于有符号比较(小于或等于)。
  15. AL (Always): 总是执行,无条件。
  16. NV (Never): 从不执行,通常不使用。


条件跳转

分支跳转(分支 Branch, B)

示例

假设我们有两个整数,想要比较它们的大小并根据比较结果执行不同的代码:

    MOV     X0, #5          // 将值5加载到寄存器X0MOV     X1, #10         // 将值10加载到寄存器X1CMP     X0, X1          // 比较X0和X1B.EQ    equal_label     // 如果X0等于X1,跳转到equal_labelB.GT    greater_label   // 如果X0大于X1,跳转到greater_labelB.LT    less_label      // 如果X0小于X1,跳转到less_labelequal_label:// 这里的代码将在X0等于X1时执行MOV     X2, #0          // 将0加载到X2B       end_label       // 跳转到结束标签greater_label:// 这里的代码将在X0大于X1时执行MOV     X2, #1          // 将1加载到X2B       end_label       // 跳转到结束标签less_label:// 这里的代码将在X0小于X1时执行MOV     X2, #-1         // 将-1加载到X2end_label:// 结束标签,程序在这里继续执行

解释

  1. 比较操作

    • CMP X0, X1:比较寄存器X0X1的值,设置条件标志。
  2. 条件跳转

    • B.EQ equal_label:如果X0等于X1,则跳转到equal_label
    • B.GT greater_label:如果X0大于X1,则跳转到greater_label
    • B.LT less_label:如果X0小于X1,则跳转到less_label
  3. 执行不同的代码块

    • 在每个标签(equal_labelgreater_labelless_label)处,根据比较结果执行不同的代码。
  4. 结束跳转

    • 使用B end_label确保在执行完某个条件下的代码后跳转到程序的结束部分。
  1. B.EQ (Equal): 当零标志(Z)被设置时跳转,即相等时跳转。
  2. B.NE (Not Equal): 当零标志(Z)没有被设置时跳转,即不相等时跳转。
  3. B.HS (Unsigned Higher or Same): 当进位标志(C)被设置时跳转,用于无符号比较(大于或等于)。
  4. B.LO (Unsigned Lower): 当进位标志(C)没有被设置时跳转,用于无符号比较(小于)。
  5. B.MI (Minus): 当负标志(N)被设置时跳转,表示结果为负。
  6. B.PL (Plus): 当负标志(N)没有被设置时跳转,表示结果为正或零。
  7. B.VS (Overflow Set): 当溢出标志(V)被设置时跳转。
  8. B.VC (Overflow Clear): 当溢出标志(V)没有被设置时跳转。
  9. B.HI (Unsigned Higher): 当进位标志(C)被设置且零标志(Z)没有被设置时跳转,用于无符号比较(严格大于)。
  10. B.LS (Unsigned Lower or Same): 当进位标志(C)没有被设置或零标志(Z)被设置时跳转,用于无符号比较(小于或等于)。
  11. B.GE (Signed Greater than or Equal): 当负标志(N)等于溢出标志(V)时跳转,用于有符号比较(大于或等于)。
  12. B.LT (Signed Less Than): 当负标志(N)不等于溢出标志(V)时跳转,用于有符号比较(小于)。
  13. B.GT (Signed Greater Than): 当零标志(Z)没有被设置且负标志(N)等于溢出标志(V)时跳转,用于有符号比较(严格大于)。
  14. B.LE (Signed Less than or Equal): 当零标志(Z)被设置或负标志(N)不等于溢出标志(V)时跳转,用于有符号比较(小于或等于)。

关于CMP指令 

在ARM64架构中,CMP指令用于比较两个寄存器的值,它实际上是一个“减法”操作,不存储结果,只更新条件标志寄存器(CPSR)的状态标志。具体来说,CMP指令会影响以下几个标志:

  1. N(负标志)

    • 当结果为负数时,N标志被设置。
    • 具体来说,如果减法结果的最高有效位(即符号位)为1,则N标志被设置。
  2. Z(零标志)

    • 当结果为零时,Z标志被设置。
    • 如果两个操作数相等,结果为零,Z标志被设置。
  3. C(进位标志)

    • 在无符号数减法中,如果借位发生,C标志被清除;如果没有借位,C标志被设置。
    • 具体来说,C标志被设置当被减数大于等于减数(即没有借位)时。
  4. V(溢出标志)

    • 在有符号数减法中,如果结果超出了表示范围(例如,从正数溢出到负数或从负数溢出到正数),V标志被设置。
    • 具体来说,如果被减数和减数的符号不同,而结果的符号与被减数的符号不同,则V标志被设置。

示例 1:无符号比较

假设我们有两个无符号整数X0X1

MOV X0, #8      // X0 = 8
MOV X1, #5      // X1 = 5
CMP X0, X1      // 比较 X0 和 X1
  • N标志:未设置,因为8 - 5 = 3,结果为正。
  • Z标志:未设置,因为8不等于5。
  • C标志:设置,因为8大于5,无借位。
  • V标志:未设置,因为无符号比较不涉及溢出。

示例 2:相等比较

MOV X0, #10     // X0 = 10
MOV X1, #10     // X1 = 10
CMP X0, X1      // 比较 X0 和 X1
  • N标志:未设置,因为10 - 10 = 0,结果非负。
  • Z标志:设置,因为10等于10,结果为零。
  • C标志:设置,因为10大于或等于10,无借位。
  • V标志:未设置,因为没有溢出。

示例 3:负数结果(有符号比较)

假设我们有两个有符号整数X0X1

MOV X0, #-3     // X0 = -3
MOV X1, #2      // X1 = 2
CMP X0, X1      // 比较 X0 和 X1
  • N标志:设置,因为-3 - 2 = -5,结果为负。
  • Z标志:未设置,因为-3不等于2。
  • C标志:未设置,因为-3小于2,有借位。
  • V标志:未设置,因为没有溢出。

示例 4:溢出情况

考虑有符号整数溢出:

MOV X0, #0x7FFFFFFF  // X0 = 最大正数
MOV X1, #-1          // X1 = -1
CMP X0, X1           // 比较 X0 和 X1
  • N标志:未设置,因为0x7FFFFFFF - (-1) = 0x80000000,结果为正。
  • Z标志:未设置,因为0x7FFFFFFF不等于-1。
  • C标志:设置,因为在无符号上下文中没有借位。
  • V标志:设置,因为0x7FFFFFFF - (-1)导致从正数溢出到负数。

关键字:深圳住房与建设局官网_公司简历模板范文填写_外链代发2分一条_市场营销策略有哪4种

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: