組合語言程式設計 利用c語言快速理解彙編)

2021-08-28 23:21:39 字數 1943 閱讀 7194

二 資料定址方式

指令執行的操作(加減,傳送)

指令操作的資料

mov 操作碼用於資料傳送,功能,將資料從乙個位置傳送到另乙個位置

mov dest,src ; 相當於c語言的賦值語句   dest = src
src 表示要傳送的資料或者資料所在的位置

dest 表示資料將要傳送到的位置

將暫存器ebx傳送到eax 的指令

mov eax,ebx
執行性語句: 表達處理器指令的語句,對應一條指令**

標號:處理器指令助記符    運算元,運算元
說明性語句:表達匯程式設計序命令的語句,主要說明源程式如何彙編,變數如何定義,過程如何設定

名字     偽指令助記符    引數,引數,.......
冒號前的標號表示處理器指令在主存裡面的位置,主要用來指示分治,迴圈等程式的目的位址

名字 可以使變數名,段名,子程式名

標號和名字的命名方式都和c,c++ 語言相同,注意不區分大小寫助記符:幫助記憶指令的符號,反應指令的功能。

處理器助記符:處理器指令,表示處理器的一種操作

偽指令助記符:byte,等,表明資料型別,在主存中分配若干的儲存空間,用於儲存變數值

例如:

msg byte 'hello',13,10,0

用c語言描述就是 char *msg = "hello\n' 其中0 表示字串結束

msg 有段基位址和偏移位址,可以用offset 獲得其偏移位址
mov eax offset msg     ; eax 獲得 msg的偏移位址並將其放到eax暫存器

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 無符號十進位制整數輸出

scanf("%d",&a) eax = a

readc eax的前八位 = 字元的ascii,輸入乙個字元

readhd 輸入乙個8位十六進製制數

readuid 輸入乙個32位無符號十進位制整數

readsid 輸入乙個32位有符號十進位制整數

```

組合語言程式設計

1.彙編語句的三種基本型別 2.標號相關 3.變數相關 4.運算元定址方式 buffer dw 500 x 17 rept 500 這是乙個重複巨集,以下重複彙編500遍 x x 979 mod 65535 這句話我也不懂 dw x endm 巨集在這裡結束transto10 proc near 函...

組合語言程式設計

乙個完整的源程式通常由若干邏輯段組成,包括資料段 附加段 堆疊段和 段。它們分別對映到儲存器中的物理段上。每個邏輯段以segment語句開始,以ends結束,整個源程式用end語句結尾。段中存放源程式的所有指令碼 資料 變數等則放在資料段和附加段中。程式中可以定義堆疊段,也可以直接利用系統中的堆疊段...

組合語言 AT T組合語言

這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...