二 資料定址方式
指令執行的操作(加減,傳送)
指令操作的資料
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 常數 立即運算元...