[問題] 請問這行組語是哪個指令集?

看板C_and_CPP作者 (brotherD)時間8年前 (2017/09/21 14:45), 8年前編輯推噓4(4010)
留言14則, 3人參與, 最新討論串1/1
網址:https://blog.regehr.org/archives/28 問題:https://imgur.com/a/lPFBB 想請問,4(%esp), %eax $3, %eax這兩行是哪個指令集的組語。 另外abstract machine是什麼意思?指的是還沒經過編譯器編譯的high-level程式碼嗎?(因 為不同的編譯器可以編譯成好幾種不一樣的組合語言),所以只能用抽象的概念去形容這段 程式碼的功能。 如我小弟的理解有錯,歡迎大力的鞭>///< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1505976346.A.871.html

09/21 15:01, , 1F
AT&T 語法的 x86 組語
09/21 15:01, 1F

09/21 15:01, , 2F
x86?
09/21 15:01, 2F

09/21 15:02, , 3F
寫回 Intel 語法是 mov eax, [esp+4]; add eax, 3
09/21 15:02, 3F

09/21 15:02, , 4F
www.imada.sdu.dk/Courses/DM18/Litteratur/IntelnATT.htm
09/21 15:02, 4F

09/21 15:07, , 6F
抽象機器的概念是這樣的: 我們規定一段程式碼在抽象機器上
09/21 15:07, 6F

09/21 15:07, , 7F
的運作方式, 然後觀察這樣運作之後它所產生的結果
09/21 15:07, 7F

09/21 15:08, , 8F
(這不只代表輸出, 還包含部份附帶效應)
09/21 15:08, 8F

09/21 15:08, , 9F
那實際上的編譯器在編譯時就需要對同樣這段程式碼
09/21 15:08, 9F

09/21 15:09, , 10F
產生能得到同樣結果的機械碼出來
09/21 15:09, 10F

09/21 15:10, , 11F
以你貼的圖來說, 呼叫這個函數的結果是回傳了 x+3 的值
09/21 15:10, 11F

09/21 15:10, , 12F
那編譯器可以直接產生回傳 x+3 的指令 (即是下面的組語)
09/21 15:10, 12F

09/21 15:11, , 13F
簡單說就是: 結果對就好, 過程不論; 這就給最佳化提供空間
09/21 15:11, 13F
感恩,精闢 ※ 編輯: zzss2003 (60.248.26.157), 09/21/2017 16:30:04

09/22 00:52, , 14F
推:)
09/22 00:52, 14F
文章代碼(AID): #1Pms0QXn (C_and_CPP)