Win32匯編語言-匯編語言程序設(shè)計(jì)基礎(chǔ)-體系結(jié)構(gòu).ppt
《Win32匯編語言-匯編語言程序設(shè)計(jì)基礎(chǔ)-體系結(jié)構(gòu).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《Win32匯編語言-匯編語言程序設(shè)計(jì)基礎(chǔ)-體系結(jié)構(gòu).ppt(30頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
2020 2 29 1 Windows32位匯編語言程序設(shè)計(jì)體系結(jié)構(gòu) 第二節(jié) 宋軍計(jì)算機(jī)學(xué)院信息安全系songjun 2 2020 2 29 主要內(nèi)容 IA 32處理器體系結(jié)構(gòu)IA 32CPU的工作模式IA 32CPU寄存器組IA 32存儲(chǔ)器管理實(shí)模式保護(hù)模式 3 2020 2 29 微機(jī)系統(tǒng) 硬件 軟件 匯編程序主要使用寄存器 匯編程序員關(guān)心存儲(chǔ)器地址 匯編程序?qū)Χ丝谶M(jìn)行操作 4 2020 2 29 存儲(chǔ)器地址 存儲(chǔ)器地址是存儲(chǔ)單元的編號(hào)每個(gè)存儲(chǔ)單元存放一個(gè)字節(jié)量的數(shù)據(jù)一個(gè)字節(jié)B Byte 包含8個(gè)二進(jìn)制位b bit 存儲(chǔ)容量指存儲(chǔ)器所具有的存儲(chǔ)單元個(gè)數(shù)基本單位是字節(jié)B 更大的容量單位有KB 千字節(jié) MB 兆字節(jié) GB 千兆字節(jié) TB 兆兆字節(jié) 5 2020 2 29 微處理器 CPU 微處理器是微機(jī)的硬件核心主要包含指令執(zhí)行的運(yùn)算和控制部件 還有多種寄存器對(duì)匯編程序員來說 微處理器抽象為以名稱存取的寄存器課程以Intel32位微處理器為主體學(xué)習(xí)32位匯編語言程序設(shè)計(jì) 6 2020 2 29 Intel微處理器發(fā)展 80386 80486 奔騰 奔騰II 奔騰4 80286 奔騰III 4004 摩爾定律 Moore sLaw 摩爾定律是指IC上可容納的晶體管數(shù)目 約每隔18個(gè)月將會(huì)增加一倍 性能也將提升一倍 IA 32 8086 IA 64 安騰 7 2020 2 29 Intel微處理器發(fā)展 4位微處理器 40048位微處理器 8008 8080 808516位微處理器 8086 8088 80186 8028632位微處理器 IA 32CPU80386 80486 Pentium MMXPentium P6 Pentium464位微處理器 Xeon PentiumM CoreDuo 8 2020 2 29 IA 32CPU工作模式 實(shí)地址模式 Real addressMode 實(shí)現(xiàn)8086處理器的程序設(shè)計(jì)環(huán)境所有的Intel處理器都是從實(shí)地址模式引導(dǎo)的保護(hù)模式 ProtectedMode 處理器的主要狀態(tài)虛擬8086模式 Virtual 8086Mode 系統(tǒng)管理模式 SystemManagementMode 電源管理 系統(tǒng)安全等自定義特定系統(tǒng)啟動(dòng)過程 環(huán)境 保護(hù)模式下的Windows操作系統(tǒng) 9 2020 2 29 IA 32基本執(zhí)行環(huán)境 地址空間保護(hù)模式 4GB內(nèi)存尋址 0 232 1 虛擬8086模式 每個(gè)程序獨(dú)立1MB內(nèi)存實(shí)地址模式 1MB內(nèi)存寄存器組寄存器是CPU內(nèi)部的高速存儲(chǔ)單元基本寄存器 8個(gè)通用寄存器 6個(gè)段寄存器 一個(gè)標(biāo)志寄存器 EFLAGS 1個(gè)指令指針 EIP 浮點(diǎn)單元 FPU 8個(gè)浮點(diǎn)寄存器系統(tǒng)寄存器 內(nèi)存管理 控制 中斷 測(cè)試其它寄存器 MMX 10 2020 2 29 常用寄存器組 匯編語言程序員 CPU是可編程的寄存器組 11 2020 2 29 基本寄存器 通用寄存器4個(gè)數(shù)據(jù)寄存器 EAX EBX ECX EDX 2個(gè)變址寄存器 ESI EDI 2個(gè)指針寄存器 ESP EBP 1個(gè)指令指針寄存器 EIP 1個(gè)標(biāo)志寄存器 EFlags 6個(gè)段寄存器 ES CS SS DS FS GS 12 2020 2 29 通用寄存器 AHALBHBLCHCLDHDLSPBPDISI 累加器基址變址計(jì)數(shù)數(shù)據(jù)堆棧指針基址指針目的變址源變址 32位 16位 AXBXCXDXSPBPDISI 16位名稱 EAXEBXECXEDXESPEBPEDIESI 32位名稱 高16位擴(kuò)展 AX BX CX DX SP BP DI SI分別是EAX EBX ECX EDX ESP EBP EDI ESI的低16位AL BL CL DL分別是AX BX CX DX的低八位AH BH CH DH分別是AX BX CX DX的高八位 13 2020 2 29 通用寄存器 關(guān)系每一個(gè)32位寄存器的低字是相應(yīng)的16位寄存器 對(duì)其中某16位的操作 并不影響另外對(duì)應(yīng)16位的數(shù)據(jù) 前4個(gè)16位寄存器又分成高8位和低8位兩個(gè)獨(dú)立的寄存器 對(duì)其中某8位的操作 不影響另外對(duì)應(yīng)8位的數(shù)據(jù)用途可以用來傳送和暫存數(shù)據(jù) 參與算術(shù)邏輯運(yùn)算 保存運(yùn)算結(jié)果32位和16位的通用寄存器也可以保存存儲(chǔ)器地址每個(gè)寄存器又有它們各自的專用目的 14 2020 2 29 數(shù)據(jù)寄存器 EAX EBX ECX EDX 數(shù)據(jù)寄存器主要用來保存操作數(shù)和運(yùn)算結(jié)果等信息 從而節(jié)省讀取操作數(shù)所需占用總線和訪問存儲(chǔ)器的時(shí)間 EAX累加器 存放操作數(shù)和結(jié)果 乘除運(yùn)算 I O指令中用于寄存器與外部設(shè)備傳送信息EBX基址寄存器 查表和間接尋址時(shí)存放基址ECX計(jì)數(shù)寄存器 串操作和循環(huán)中做計(jì)數(shù) 隱含 EDX數(shù)據(jù)寄存器 乘除運(yùn)算 I O指令中特指端口地址 15 2020 2 29 數(shù)據(jù)寄存器EAX和EDX的乘 除運(yùn)算 乘法運(yùn)算除法運(yùn)算 16 2020 2 29 17 2020 2 29 變址寄存器 ESI EDI 變址寄存器常用于存儲(chǔ)器尋址時(shí)提供地址ESI源變址寄存器EDI目的變址寄存器變址寄存器不可分割成8位寄存器 SI和DI是ESI和EDI的低16位 作為通用寄存器 也可存儲(chǔ)算術(shù)邏輯運(yùn)算的操作數(shù)和運(yùn)算結(jié)果串操作類指令中 ESI和EDI具有特定功能 SI ESI與DS DI EDI與ES聯(lián)用 18 2020 2 29 指針寄存器 ESP EBP 指針寄存器用于尋址內(nèi)存堆棧內(nèi)的數(shù)據(jù)ESP為堆棧指針寄存器 指示棧頂?shù)钠频刂?ESP不能再用于其他目的 具有專用目的EBP為基址指針寄存器 表示數(shù)據(jù)在堆棧段中的基地址 棧頂 堆棧段寄存器SS和指針寄存器ESP或EBP共同指示堆棧的存儲(chǔ)空間注意 指針寄存器不可再分割成8位寄存器 SP和BP分別是ESP和EBP的低16位 19 2020 2 29 堆棧示例 下面是按調(diào)用約定 stdcall調(diào)用函數(shù)test intp1 intp2 的匯編代碼 假設(shè)執(zhí)行函數(shù)前堆棧指針ESP為NNpushp2 參數(shù)2入棧 ESP 4h ESP NN 4hpushp1 參數(shù)1入棧 ESP 4h ESP NN 8hcalltest 壓入返回地址ESP 4h ESP NN 0Ch 進(jìn)入函數(shù)內(nèi) pushebp 保護(hù)先前EBP指針 EBP入棧 ESP 4h ESP NN 10hmovebp esp 設(shè)置EBP指針指向棧頂NN 10hmoveax dwordptr ebp 0ch ebp 0ch為NN 4h 即參數(shù)2的位置movebx dwordptr ebp 08h ebp 08h為NN 8h 即參數(shù)1的位置subesp 8 局部變量所占空間ESP 8 ESP NN 18h addesp 8 釋放局部變量 ESP 8 ESP NN 10hpopebp 出棧 恢復(fù)EBP ESP 4 ESP NN 0Chret8 ret返回 彈出返回地址 ESP 4 ESP NN 08h 后面加操作數(shù)8為平衡堆棧 ESP 8 ESP NN 恢復(fù)進(jìn)入函數(shù)前的堆棧 20 2020 2 29 指令指針 EIP 指令指針寄存器EIP 指示代碼段中指令的偏移地址存放下次將要執(zhí)行的指令在代碼段的偏移量通過CS EIP寄存器來控制指令序列的執(zhí)行流程 21 2020 2 29 堆棧 Stack 堆棧是主存中一個(gè)特殊的區(qū)域它采用先進(jìn)后出FILO FirstInLastOut 或后進(jìn)先出LIFO LastInFirstOut 的原則進(jìn)行存取操作 而不是隨機(jī)存取操作方式 堆棧通常由處理器自動(dòng)維持 在IA 32中 由堆棧段寄存器SS和堆棧指針寄存器ESP共同指示 22 2020 2 29 通用寄存器的特殊用法 某些通用寄存器有些特殊的用法 EAX在乘法和除法指令中校自動(dòng)使用 通常稱之為擴(kuò)展累加寄存器 CPU自動(dòng)使用ECX作為循環(huán)計(jì)數(shù)器 ESP尋址堆棧 一種系統(tǒng)內(nèi)存結(jié)構(gòu) 上的數(shù)據(jù) ESP寄存器一般不用于算術(shù)運(yùn)算和數(shù)據(jù)傳送 通常稱之為擴(kuò)展堆棧指針寄存器 ESI和EDI通常用于內(nèi)存數(shù)據(jù)的高速傳送 通常稱之為擴(kuò)展源指針和擴(kuò)展目的指針寄存器 EBP由高級(jí)語言用來引用堆棧上的函數(shù)參數(shù)和局部變量 除非用于高級(jí)程序設(shè)計(jì)技巧中 EBP一般不在算術(shù)運(yùn)算和數(shù)據(jù)傳送中使用 通常稱之為擴(kuò)展幀指針寄存器 23 2020 2 29 段寄存器 IA 32CPU有6個(gè)16位段寄存器CS 代碼段 指明代碼段的起始地址SS 堆棧段 指明堆棧段的起始地址DS 數(shù)據(jù)段 指明數(shù)據(jù)段的起始地址ES 附加段 指明附加段的起始地址FS 數(shù)據(jù)段 指明數(shù)據(jù)段的起始地址GS 數(shù)據(jù)段 指明數(shù)據(jù)段的起始地址每個(gè)段寄存器用來確定一個(gè)邏輯段的起始地址 每種邏輯段均有各自的用途 24 2020 2 29 段寄存器 在16位CPU系統(tǒng)中 它只有4個(gè)段寄存器 程序在任何時(shí)刻至多有4個(gè)正在使用的段可直接訪問在32位微機(jī)系統(tǒng)中 它有6個(gè)段寄存器 所以 在此環(huán)境下開發(fā)的程序最多可同時(shí)訪問6個(gè)段 32位CPU有兩個(gè)不同的工作方式 實(shí)方式和保護(hù)方式 在每種方式下 段寄存器的作用不同實(shí)方式 前4個(gè)段寄存器CS DS ES和SS與先前CPU中的所對(duì)應(yīng)的段寄存器的含義完全一致 內(nèi)存單元的邏輯地址仍為 段值 偏移量 的形式 為訪問某內(nèi)存段內(nèi)的數(shù)據(jù) 必須使用該段寄存器和存儲(chǔ)單元的偏移量 保護(hù)方式 在此方式下 情況要復(fù)雜得多 裝入段寄存器的不再是段值 而是稱為 選擇子 Selector 的某個(gè)值 25 2020 2 29 標(biāo)志寄存器 EFlags 控制CPU的操作或反映CPU某此運(yùn)算的結(jié)果的獨(dú)立二進(jìn)制位構(gòu)成 控制標(biāo)志 控制CPU的操作狀態(tài)標(biāo)志 反映CPU運(yùn)算的結(jié)果系統(tǒng)標(biāo)志 反映CPU運(yùn)行狀態(tài) 26 2020 2 29 EFLAGS示意圖 27 2020 2 29 浮點(diǎn)單元 FPU 高速浮點(diǎn)運(yùn)算8個(gè)浮點(diǎn)數(shù)據(jù)寄存器ST0 7控制寄存器指針寄存器 28 2020 2 29 寄存器與存儲(chǔ)器的比較 29 2020 2 29 小結(jié) 數(shù)據(jù)寄存器 EAX EBX ECX EDX的一般用途和特點(diǎn)變址寄存器 ESI EDI的一般用途指針寄存器 ESP EBP的一般用途指令指針 EIP的一般用途堆棧段寄存器 CS DS ES SS FS GS標(biāo)志寄存器 EFlags 30 2020 2 29 例題 在80 x86微機(jī)的輸入 輸出指令中 I O端口號(hào)通常是由DX寄存器提供的 但有時(shí)也可以在指令中直接指定00 FFH的端口號(hào) 試問可直接由指令指定的I O端口數(shù) 下列操作可使用哪些寄存器1 加法和減法2 循環(huán)計(jì)數(shù)3 乘法和除法4 保存段地址5 表示運(yùn)算結(jié)果為06 將要執(zhí)行的指令地址7 將要從堆棧取出數(shù)據(jù)的地址- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Win32 匯編語言 匯編 語言程序設(shè)計(jì) 基礎(chǔ) 體系結(jié)構(gòu)
鏈接地址:http://italysoccerbets.com/p-6567499.html