從組合語言翻譯到c語言中應該注意的問題

2021-09-24 19:01:14 字數 648 閱讀 4546

我們在寫序號產生器的時候,經常會從組合語言翻譯到

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 返回兩數差的...