鱼C论坛

 找回密码
 立即注册
查看: 5318|回复: 1

arm 汇编语言 汉诺塔

[复制链接]
发表于 2021-5-24 21:41:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求问如何使用arm汇编语言完成汉诺塔程序?用的软件是visUAL,很多指令都没办法用 谢谢啦,给个思路也行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-24 23:03:12 | 显示全部楼层
直接反编译gcc生成的可执行文件
#include <stdio.h>

size_t count = 0;
void hanoi(size_t n, char a, char b, char c) {
    if(n == 1) {
        printf("%2lu: %c -> %c\n", ++count, a, c);
    } else  {
        hanoi(n - 1, a, c, b);
        printf("%2lu: %c -> %c\n", ++count, a, c);
        hanoi(n - 1, b, a, c);
    }
}

int main(void) {
    hanoi(4, 'a', 'b', 'c');
    return 0;
}
size_t count = 0;
void hanoi(size_t n, char a, char b, char c) {
 794:        a9be7bfd         stp        x29, x30, [sp, #-32]!
 798:        910003fd         mov        x29, sp
 79c:        f9000fe0         str        x0, [sp, #24]
 7a0:        39005fe1         strb        w1, [sp, #23]
 7a4:        39005be2         strb        w2, [sp, #22]
 7a8:        390057e3         strb        w3, [sp, #21]
    if(n == 1) {
 7ac:        f9400fe0         ldr        x0, [sp, #24]
 7b0:        f100041f         cmp        x0, #0x1
 7b4:        54000281         b.ne        804 <hanoi+0x70>  // b.any
        printf("%2lu: %c -> %c\n", ++count, a, c);
 7b8:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 7bc:        91010000         add        x0, x0, #0x40
 7c0:        f9400000         ldr        x0, [x0]
 7c4:        91000401         add        x1, x0, #0x1
 7c8:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 7cc:        91010000         add        x0, x0, #0x40
 7d0:        f9000001         str        x1, [x0]
 7d4:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 7d8:        91010000         add        x0, x0, #0x40
 7dc:        f9400000         ldr        x0, [x0]
 7e0:        39405fe1         ldrb        w1, [sp, #23]
 7e4:        394057e2         ldrb        w2, [sp, #21]
 7e8:        2a0203e3         mov        w3, w2
 7ec:        2a0103e2         mov        w2, w1
 7f0:        aa0003e1         mov        x1, x0
 7f4:        90000000         adrp        x0, 0 <__abi_tag-0x278>
 7f8:        91254000         add        x0, x0, #0x950
 7fc:        97ffff95         bl        650 <printf@plt>
    } else  {
        hanoi(n - 1, a, c, b);
        printf("%2lu: %c -> %c\n", ++count, a, c);
        hanoi(n - 1, b, a, c);
    }
}
 800:        1400001f         b        87c <hanoi+0xe8>
        hanoi(n - 1, a, c, b);
 804:        f9400fe0         ldr        x0, [sp, #24]
 808:        d1000400         sub        x0, x0, #0x1
 80c:        39405be3         ldrb        w3, [sp, #22]
 810:        394057e2         ldrb        w2, [sp, #21]
 814:        39405fe1         ldrb        w1, [sp, #23]
 818:        97ffffdf         bl        794 <hanoi>
        printf("%2lu: %c -> %c\n", ++count, a, c);
 81c:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 820:        91010000         add        x0, x0, #0x40
 824:        f9400000         ldr        x0, [x0]
 828:        91000401         add        x1, x0, #0x1
 82c:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 830:        91010000         add        x0, x0, #0x40
 834:        f9000001         str        x1, [x0]
 838:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
 83c:        91010000         add        x0, x0, #0x40
 840:        f9400000         ldr        x0, [x0]
 844:        39405fe1         ldrb        w1, [sp, #23]
 848:        394057e2         ldrb        w2, [sp, #21]
 84c:        2a0203e3         mov        w3, w2
 850:        2a0103e2         mov        w2, w1
 854:        aa0003e1         mov        x1, x0
 858:        90000000         adrp        x0, 0 <__abi_tag-0x278>
 85c:        91254000         add        x0, x0, #0x950
 860:        97ffff7c         bl        650 <printf@plt>
        hanoi(n - 1, b, a, c);
 864:        f9400fe0         ldr        x0, [sp, #24]
 868:        d1000400         sub        x0, x0, #0x1
 86c:        394057e3         ldrb        w3, [sp, #21]
 870:        39405fe2         ldrb        w2, [sp, #23]
 874:        39405be1         ldrb        w1, [sp, #22]
 878:        97ffffc7         bl        794 <hanoi>
}
 87c:        d503201f         nop
 880:        a8c27bfd         ldp        x29, x30, [sp], #32
 884:        d65f03c0         ret

0000000000000888 <main>:

int main(void) {
 888:        a9bf7bfd         stp        x29, x30, [sp, #-16]!
 88c:        910003fd         mov        x29, sp
    hanoi(4, 'a', 'b', 'c');
 890:        52800c63         mov        w3, #0x63                          // #99
 894:        52800c42         mov        w2, #0x62                          // #98
 898:        52800c21         mov        w1, #0x61                          // #97
 89c:        d2800080         mov        x0, #0x4                           // #4
 8a0:        97ffffbd         bl        794 <hanoi>
    return 0;
 8a4:        52800000         mov        w0, #0x0                           // #0
}
 8a8:        a8c17bfd         ldp        x29, x30, [sp], #16
 8ac:        d65f03c0         ret
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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