我們在寫序號產生器的時候,經常會從組合語言翻譯到
c語言**。
我們先看看乙個比較短和簡單的函式
反編譯如下:(熱鍵
f5):
可以看到產生的
c**比較合理,但是不完美。看上去有點亂,這是應為反編譯不能執行型別恢復。顯然,
a1引數是指向乙個結構體的指標。讓我們增加一些資料型別看看發生什麼。我們開啟
structure windows(shift-f9),
增加乙個結構體。
我們切換到
pseudocode window
指定a1
的型別。我們把游標放在
a1出現的地方,按
y 當我們按回車後,反編譯器輸出開始變得更容易閱讀。
但是,這裡還有一些改進。我們把這個結構體重命名,並且指定它的型別。例如,
fileld_6b1
看上去像是乙個計數器
fileld_6b5
顯而易見是乙個函式指標。我們不需要切換視窗就可以做這些。只有初始化結構定義才需要切換到
structure window
視窗。這裡我們指定函式指標的字段。
最終結果看上去像是這樣。
這裡沒有強制型別轉換,看上去比最初的**好看了更多。
從機器語言到組合語言
機器語言是計算機唯一能接受和執行的語言。機器語言由二進位製碼組成,每一串二進位製碼叫做一條指令。一條指令規定了計算機執行的乙個動作。一台計算機所能懂得的指令的全體,叫做這個計算機的指令系統。不同型號的計算機的指令系統不同。指令通常由幾個位元組組成,第乙個位元組是操作碼,它規定了計算機要執行的基本操作...
從C語言到彙編,從彙編到C語言
看雪一同志寫的文章,我覺得很基礎和有用,知識著眼於小處。積累才是王道!一 迴圈語句與發彙編後的機器語言 1 for迴圈 下面是一段c語言的 我們的目的是來看其反彙編的結果 int myfunction int a,int b return c 前面的反彙編暫時不理它,這裡從for的地方開始反彙編,結...
組合語言跳轉翻譯為c語言if else語句
將條件表示式和語句從c語言翻譯成機器 最常用的方式是結合有條件和無條件跳轉 這裡只討論有條件跳轉 對於大多數情況 彙編 就是c語言的直接翻譯 而c語言中的goto語句類似於彙編中的無條件跳轉所以先看一下 if else 由goto語句完成 int absdiff int x,int y 返回兩數差的...