<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## 概述 學習匯編有段時間,看著匯編代碼的時候還是懵懵懂懂的,之道看到別人根據圖文來描述一段匯編代碼才豁然開朗。 具體問題是因為: 1.沒有記憶點 2.知道指令的意思,不知道怎么使用 3.知道棧是先入后出,但就是跟匯編代碼聯想不起來 ## 寫一段C代碼,轉成匯編 C代碼 ``` //stack.c #include <stdio.h> int sum(int a, int b) { int c = a + b; return c; } int main() { int a = sum(2, 3); printf("sum1: %d\n", a); return 1; } ``` 編譯成可執行文件,查看匯編 ``` $ gcc -o stack stack.c $ objdump -S stack ``` >也可以使用 gcc -S stack.c 截取其中的一段 ``` 0000000000400526 <sum>: 400526: 55 push %rbp 400527: 48 89 e5 mov %rsp,%rbp 40052a: 89 7d ec mov %edi,-0x14(%rbp) 40052d: 89 75 e8 mov %esi,-0x18(%rbp) 400530: 8b 55 ec mov -0x14(%rbp),%edx 400533: 8b 45 e8 mov -0x18(%rbp),%eax 400536: 01 d0 add %edx,%eax 400538: 89 45 fc mov %eax,-0x4(%rbp) 40053b: 8b 45 fc mov -0x4(%rbp),%eax 40053e: 5d pop %rbp 40053f: c3 retq 0000000000400540 <main>: 400540: 55 push %rbp 400541: 48 89 e5 mov %rsp,%rbp 400544: 48 83 ec 10 sub $0x10,%rsp 400548: be 03 00 00 00 mov $0x3,%esi 40054d: bf 02 00 00 00 mov $0x2,%edi 400552: e8 cf ff ff ff callq 400526 <sum> 400557: 89 45 fc mov %eax,-0x4(%rbp) 40055a: 8b 45 fc mov -0x4(%rbp),%eax 40055d: 89 c6 mov %eax,%esi 40055f: bf 04 06 40 00 mov $0x400604,%edi 400564: b8 00 00 00 00 mov $0x0,%eax 400569: e8 92 fe ff ff callq 400400 <printf@plt> 40056e: b8 01 00 00 00 mov $0x1,%eax 400573: c9 leaveq 400574: c3 retq 400575: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 40057c: 00 00 00 40057f: 90 nop ``` ## 函數的調用 ``` 400540: 55 push %rbp 400541: 48 89 e5 mov %rsp,%rbp 400544: 48 83 ec 10 sub $0x10,%rsp 400548: be 03 00 00 00 mov $0x3,%esi 40054d: bf 02 00 00 00 mov $0x2,%edi ``` ## 函數的返回 參考: https://segmentfault.com/a/1190000007977460 https://blog.csdn.net/tell_me_404/article/details/107597875
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看