組合語言程式設計( 利用c語言快速理解彙編)
阿新 • • 發佈:2018-11-05
文章目錄
組合語言程式設計
一 操作碼和運算元
1 操作碼
指令執行的操作(加減,傳送)
2 運算元
指令操作的資料
mov 操作碼用於資料傳送,功能,將資料從一個位置傳送到另一個位置
mov dest,src ; 相當於c語言的賦值語句 dest = src
src 表示要傳送的資料或者資料所在的位置
dest 表示資料將要傳送到的位置
將暫存器ebx傳送到eax 的指令
mov eax,ebx
3 語句格式
執行性語句: 表達處理器指令的語句,對應一條指令程式碼
標號:處理器指令助記符 運算元,運算元
說明性語句:表達彙編程式命令的語句,主要說明源程式如何彙編,變數如何定義,過程如何設定
名字 偽指令助記符 引數,引數,.......
- 冒號前的標號表示處理器指令在主存裡面的位置,主要用來指示分治,迴圈等程式的目的地址
- 名字 可以使變數名,段名,子程式名
標號和名字的命名方式都和c,c++ 語言相同,注意不區分大小寫 - 助記符:幫助記憶指令的符號,反應指令的功能。
處理器助記符:處理器指令,表示處理器的一種操作
偽指令助記符:byte,等,表明資料型別,在主存中分配若干的儲存空間,用於儲存變數值
例如:
msg 有段基地址和偏移地址,可以用offset 獲得其偏移地址msg byte 'Hello',13,10,0 用c語言描述就是 char *msg = "Hello\n' 其中0 表示字串結束
mov eax offset msg ; eax 獲得 msg的偏移地址並將其放到eax暫存器
4 源程式框架
include io32.inc ; 相當於c語言包含標頭檔案 .data ; 資料段,相當於c語言事先宣告一些常量大的值 ...... .code ; 程式碼段 執行的程式碼 start: ; 相當於c語言的int main() 程式從這裡開始 ..... eixt 0 ; 相當於return 0; ... ; 這裡定義子程式,相當於c語言的函式 end start ; 對應start 表示程式段的結束
庫函式
庫函式呼叫方式:
call 函式名
1. DISPMSG
二 資料定址方式
子程式
printf("%s",a) a = eax 暫存器裡的地址
DISPMSG 入口引數,EAX = 字串地址 , 顯示字串
printf("%c",a) a = eax 的前八位,表示字元的ASCII
DISPC 入口引數, EAX 的前八位為字元的ASCII 為一個type型別,表示一個字元
printf("\n")
DISPCRLF 回車換行
DISPRD 輸出八個32 位通用暫存器內容
DISPRF 顯示6個狀態標誌的狀態
printf("%lx",a) a = EAX 暫存器裡的32位資料
DISPHD 以十六進位制列印
DISPSID 無符號十進位制整數輸出
READMSG EAX = 快取器地址,功能:輸入一個字串(回車結束)
scanf("%d",&a) eax = a
READC EAX的前八位 = 字元的ASCII,輸入一個字元
READHD 輸入一個8位十六進位制數
READUID 輸入一個32位無符號十進位制整數
READSID 輸入一個32位有符號十進位制整數
```