彙編在不同寫法對比

2021-10-09 21:48:11 字數 983 閱讀 1059

絕大多數 linux 程式設計師以前只接觸過dos/windows 下的組合語言,這些彙編**都是 intel 風格的。但在 unix 和 linux 系統中,更多採用的還是 at&t 格式,兩者在語法 格式上有著很大的不同:

1 在 at&t 彙編格式中,暫存器名要加上 『%』 作為字首;而在 intel 彙編格式中,寄存 器名不需要加字首。例如:

2 在 at&t 彙編格式中,用 『$』 字首表示乙個立即運算元;而在 intel 彙編格式中,立 即數的表示不用帶任何字首。例如:

3at&t 和 intel 格式中的源運算元和目標運算元的位置正好相反。在 intel 彙編格式 中,目標運算元在源運算元的左邊;而在at&t 彙編格式中,目標運算元在源運算元的 右邊。例如:

4 在 at&t 彙編格式中,運算元的字長由操作符的最後乙個字母決定,字尾』b』、『w』、『l』 分別表示運算元為位元組(byte,8 位元) 、字(word,16 位元)和長字(long,32位元) ; 而在 intel 彙編格式中,運算元的字長是用 「byte ptr」 和 「word ptr」 等字首來表示的。 例如:

5 在 at&t 彙編格式中,絕對轉移和呼叫指令(jump/call)的運算元前要加上』'作為前 綴,而在 intel 格式中則不需要。

6 遠端轉移指令和遠端子呼叫指令的操作碼,在 at&t 彙編格式中為 「ljump」 和 「lcall」,而在 intel 彙編格式中則為 「jmp far」 和 「call far」,即:

與之相應的遠端返回指令則為:

7 在 at&t 彙編格式中,記憶體運算元的定址方式是 section:disp(base, index, scale)

而在 intel 彙編格式中,記憶體運算元的定址方式為: section:[base + indexscale + disp]

由於 linux 工作在保護模式下,用的是 32 位線性位址,所以在計算位址時不用考慮段 基址和偏移量,而是採用如下的位址計算方法:

disp + base + index * scale

按鍵切換狀態的不同C寫法對比

給定乙個按鍵,以及乙個狀態輸出 如乙個led 按下一次按鍵後led燈改變一次狀態,再按一次按鍵led再次切換狀態,這是嵌入式程式設計中乙個很簡單的任務,但要想達到很好的效果並不容易,一下對比幾種c寫法 以arduino為例 bool buttonstate 1 bool x 1 void loop ...

彙編 在螢幕上顯示彩色字型

彙編 在螢幕上顯示彩色字型 學習彙編學了已經半個學期了,總感覺自己學的不紮實,語言這種東西,我感覺要想學的好必須多實踐。在實踐中才能更紮實的掌握知識,不然學了一本書,到頭來什麼事都幹不了。課本上有給的材料題,我也懶的乙個字乙個字的把實驗材料寫上來。我就貼吧。請看 我的 實現如下 datas segm...

8086彙編 在記憶體單元中做表

使用8086組合語言在記憶體中做一張公司記錄表。彙編執行,顯示記憶體的結果為 以上是表示21年年數的21個字串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 345980,590827,803530,1183...