返回介绍

17.3.2 ARM + Optimizing Xcode (LLVM) + ARM mode

发布于 2025-02-22 14:00:47 字数 677 浏览 0 评论 0 收藏 0

Listing 17.21: Optimizing Xcode (LLVM) + ARM mode

#!bash
        MOV R1, R0
        MOV R0, #0
        MOV R2, #1
        MOV R3, R0
loc_2E54
        TST R1, R2,LSL R3       ; set flags according to R1 & (R2<<R3)
        ADD R3, R3, #1      ; R3++
        ADDNE R0, R0, #1        ; if ZF flag is cleared by TST, R0++
        CMP R3, #32
        BNE loc_2E54
        BX LR

TST 类似于 x86 下的 TEST 指令。 正如我前面提到的(14.2.1),ARM 模式下没有单独的移位指令。对于用作修饰的 LSL(逻辑左移)、LSR(逻辑右移)、ASR(算术右移)、ROR(循环右移)和 RRX(带扩展的循环右移指令),需要与 MOV,TST,CMP,ADD,SUB,RSB 结合来使用 6。 这些修饰指令被定义,第二个操作数指定移动的位数。 因此“TST R1, R2,LSL R3”指令所做的工作为????1 ∧ (????2 ? ????3).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文