鱼C论坛

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

arm 汇编语言 汉诺塔

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

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

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

x
求问如何使用arm汇编语言完成汉诺塔程序?用的软件是visUAL,很多指令都没办法用 谢谢啦,给个思路也行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  2. size_t count = 0;
  3. void hanoi(size_t n, char a, char b, char c) {
  4.     if(n == 1) {
  5.         printf("%2lu: %c -> %c\n", ++count, a, c);
  6.     } else  {
  7.         hanoi(n - 1, a, c, b);
  8.         printf("%2lu: %c -> %c\n", ++count, a, c);
  9.         hanoi(n - 1, b, a, c);
  10.     }
  11. }

  12. int main(void) {
  13.     hanoi(4, 'a', 'b', 'c');
  14.     return 0;
  15. }
复制代码

  1. size_t count = 0;
  2. void hanoi(size_t n, char a, char b, char c) {
  3. 794:        a9be7bfd         stp        x29, x30, [sp, #-32]!
  4. 798:        910003fd         mov        x29, sp
  5. 79c:        f9000fe0         str        x0, [sp, #24]
  6. 7a0:        39005fe1         strb        w1, [sp, #23]
  7. 7a4:        39005be2         strb        w2, [sp, #22]
  8. 7a8:        390057e3         strb        w3, [sp, #21]
  9.     if(n == 1) {
  10. 7ac:        f9400fe0         ldr        x0, [sp, #24]
  11. 7b0:        f100041f         cmp        x0, #0x1
  12. 7b4:        54000281         b.ne        804 <hanoi+0x70>  // b.any
  13.         printf("%2lu: %c -> %c\n", ++count, a, c);
  14. 7b8:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
  15. 7bc:        91010000         add        x0, x0, #0x40
  16. 7c0:        f9400000         ldr        x0, [x0]
  17. 7c4:        91000401         add        x1, x0, #0x1
  18. 7c8:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
  19. 7cc:        91010000         add        x0, x0, #0x40
  20. 7d0:        f9000001         str        x1, [x0]
  21. 7d4:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
  22. 7d8:        91010000         add        x0, x0, #0x40
  23. 7dc:        f9400000         ldr        x0, [x0]
  24. 7e0:        39405fe1         ldrb        w1, [sp, #23]
  25. 7e4:        394057e2         ldrb        w2, [sp, #21]
  26. 7e8:        2a0203e3         mov        w3, w2
  27. 7ec:        2a0103e2         mov        w2, w1
  28. 7f0:        aa0003e1         mov        x1, x0
  29. 7f4:        90000000         adrp        x0, 0 <__abi_tag-0x278>
  30. 7f8:        91254000         add        x0, x0, #0x950
  31. 7fc:        97ffff95         bl        650 <printf@plt>
  32.     } else  {
  33.         hanoi(n - 1, a, c, b);
  34.         printf("%2lu: %c -> %c\n", ++count, a, c);
  35.         hanoi(n - 1, b, a, c);
  36.     }
  37. }
  38. 800:        1400001f         b        87c <hanoi+0xe8>
  39.         hanoi(n - 1, a, c, b);
  40. 804:        f9400fe0         ldr        x0, [sp, #24]
  41. 808:        d1000400         sub        x0, x0, #0x1
  42. 80c:        39405be3         ldrb        w3, [sp, #22]
  43. 810:        394057e2         ldrb        w2, [sp, #21]
  44. 814:        39405fe1         ldrb        w1, [sp, #23]
  45. 818:        97ffffdf         bl        794 <hanoi>
  46.         printf("%2lu: %c -> %c\n", ++count, a, c);
  47. 81c:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
  48. 820:        91010000         add        x0, x0, #0x40
  49. 824:        f9400000         ldr        x0, [x0]
  50. 828:        91000401         add        x1, x0, #0x1
  51. 82c:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
  52. 830:        91010000         add        x0, x0, #0x40
  53. 834:        f9000001         str        x1, [x0]
  54. 838:        b0000080         adrp        x0, 11000 <__cxa_finalize@GLIBC_2.17>
  55. 83c:        91010000         add        x0, x0, #0x40
  56. 840:        f9400000         ldr        x0, [x0]
  57. 844:        39405fe1         ldrb        w1, [sp, #23]
  58. 848:        394057e2         ldrb        w2, [sp, #21]
  59. 84c:        2a0203e3         mov        w3, w2
  60. 850:        2a0103e2         mov        w2, w1
  61. 854:        aa0003e1         mov        x1, x0
  62. 858:        90000000         adrp        x0, 0 <__abi_tag-0x278>
  63. 85c:        91254000         add        x0, x0, #0x950
  64. 860:        97ffff7c         bl        650 <printf@plt>
  65.         hanoi(n - 1, b, a, c);
  66. 864:        f9400fe0         ldr        x0, [sp, #24]
  67. 868:        d1000400         sub        x0, x0, #0x1
  68. 86c:        394057e3         ldrb        w3, [sp, #21]
  69. 870:        39405fe2         ldrb        w2, [sp, #23]
  70. 874:        39405be1         ldrb        w1, [sp, #22]
  71. 878:        97ffffc7         bl        794 <hanoi>
  72. }
  73. 87c:        d503201f         nop
  74. 880:        a8c27bfd         ldp        x29, x30, [sp], #32
  75. 884:        d65f03c0         ret

  76. 0000000000000888 <main>:

  77. int main(void) {
  78. 888:        a9bf7bfd         stp        x29, x30, [sp, #-16]!
  79. 88c:        910003fd         mov        x29, sp
  80.     hanoi(4, 'a', 'b', 'c');
  81. 890:        52800c63         mov        w3, #0x63                          // #99
  82. 894:        52800c42         mov        w2, #0x62                          // #98
  83. 898:        52800c21         mov        w1, #0x61                          // #97
  84. 89c:        d2800080         mov        x0, #0x4                           // #4
  85. 8a0:        97ffffbd         bl        794 <hanoi>
  86.     return 0;
  87. 8a4:        52800000         mov        w0, #0x0                           // #0
  88. }
  89. 8a8:        a8c17bfd         ldp        x29, x30, [sp], #16
  90. 8ac:        d65f03c0         ret

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 01:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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