Win32匯編語言-尋址方式.ppt
《Win32匯編語言-尋址方式.ppt》由會員分享,可在線閱讀,更多相關《Win32匯編語言-尋址方式.ppt(59頁珍藏版)》請在裝配圖網上搜索。
2020 2 29 1 宋軍計算機學院信息安全系songjun 尋址方式 2 2020 2 29 尋址方式 操作數的尋址方式立即數尋址寄存器尋址存儲器尋址直接尋址間接尋址相對尋址 3 2020 2 29 立即數尋址 操作數在指令中給出指令格式 MOVAL 5MOVAX 3064HMOVAL A 只能用于SRC字段MOV40H AL SRC和DST的字長一致MOVAH 3064H 4 2020 2 29 寄存器尋址 操作數存放在CPU的內部寄存器reg中 8位寄存器r8 AH AL BH BL CH CL DH DL16位寄存器r16 AX BX CX DX SI DI BP SP32位寄存器r32 EAX EBX ECX EDX ESI EDI ESP EBP4個段寄存器seg中 CS DS SS ES指令格式 MOVAX BXMOVAL BHMOVAX 3064HSRC和DST的字長一致MOVAH BX 5 2020 2 29 存儲器尋址 直接尋址 尋址主存中存儲的操作數就稱為存儲器尋址方式 也稱為內存尋址方式 指令中給出的是有關操作數的主存地址信息指令中主存操作數給出的地址只是偏移地址 稱有效地址EA 實模式下 段基地址在默認的段寄存器中或用段超越前綴指定的段寄存器中 6 2020 2 29 有效地址的組成 位移量 存放在指令中的8位 16位或32位的數值或常量基址 存放在基址寄存器中的內容 它是有效地址中的基址部分 變址 是存放在變址寄存器中的內容比例因子 可以是1 2 4 8比例因子只適用于保護模式 7 2020 2 29 16位存儲器尋址有效地址 16位有效地址 基址寄存器 變址寄存器 8 16位位移量 其中 基址寄存器只能是BX或BP變址寄存器只能是SI或DI位移量可以是8 16位數當基址寄存器為BP的時候 默認的堆棧段寄存器SS 其他情況下 默認數據段寄存器DS 8 2020 2 29 32位存儲器尋址有效地址 其中 位移量是8 16 32數值或者常量任何32位通用寄存器都可以作為基址寄存器 默認ESP EBP使用SS 其他默認使用DS 任何除ESP之外的32位通用寄存器都可以作為變址寄存器 32位有效地址 基址寄存器 變址寄存器 8 16 32位位移量 9 2020 2 29 直接尋址方式 例 MOVAX 2000H EA 2000H 假設 DS 3000H 那么PA 32000H 隱含的段為數據段DS 10 2020 2 29 直接尋址方式 可使用段跨越前綴MOVAX ES 2000H 操作數地址可由變量 符號地址 表示 但要注意VALUEDB10變量的屬性MOVAH VALUE 等價于MOVAH VALUE 可用符號地址代替數值地址MOVAX VALUE MOVAX WORDPTRVALUE 操作數尺寸要一致 11 2020 2 29 間接尋址 間接操作數 操作數的有效地址存放在寄存器中方括號括起來的寄存器 如 BX SS EBX 保護模式 32位通用寄存器實地址 16位 SI DI BX BP寄存器里存放著數據的偏移地址用作間接操作數的寄存器使用時應先初始化 datavar1BYTE10h 20h 30h codeMOVesi offsetvar1MOVal esi 如在附加段中 MOVal ES esi 12 2020 2 29 尺寸問題 PTR 與間接操作數的聯合使用PTR操作符指明操作數的大小 datavar1BYTE10h 20h 30h codeMOVesi offsetvar1INC esi operandmusthavesize datavar1BYTE10h 20h 30h codeMOVesi offsetvar1INCBYTEPTR esi 13 2020 2 29 數組求和 386 modelflat stdcall dataW1WORD1234h 5678h 4321h 8765h codemovesi offsetW1movax esi 1234haddesi 2addax esi 1234h 5678haddesi 2addax esi 1234h 5678h 4321haddesi 2addax esi 1234h 5678h 4321h 8765h 14 2020 2 29 例 寄存器間接尋址方式 386 modelflat stdcall datad vardword12345678h codestart movesi offsetd varmoveax esi moveax esimoveax offsetc varmoveax cs eax ret 返回操作系統(tǒng)c vardword87654321hendstart 匯編結束 15 2020 2 29 例 運行結果 1 16 2020 2 29 例 運行結果 2 17 2020 2 29 寄存器相對尋址方式 采用寄存器間接尋址的操作數的有效地址是寄存器內容與有符號8位 16位或32位位移量之和操作數的有效地址的計算公式是 位移量可以是正數 也可以是負數 有效地址 寄存器 8 16 32位位移量 18 2020 2 29 例 寄存器相對尋址方式 386 modelflat stdcall dataarraybyte1 2 3 4 5 6 7array endequ 1 codestart movesi offsetarraymoval esi moval esi 4 movesi array endmoval esi 4 ret 返回操作系統(tǒng)endstart 匯編結束 19 2020 2 29 19 2020 2 29 例 movesi offsetarray 直接尋址 array的地址 20 2020 2 29 20 2020 2 29 例 moval esi 寄存器間接尋址 esi 00404000 地址00404000的內容 21 2020 2 29 21 2020 2 29 例 moval esi 4 寄存器相對尋址esi 4 00404004 esi 00404000 00404004 05h 22 2020 2 29 22 2020 2 29 例 movesi array end 直接尋址 array endequ 1 00404007 array end 00404007 1 00404006 23 2020 2 29 23 2020 2 29 例 moval esi 4 寄存器相對尋址esi 4 00404002 00404002 03h esi 00404006 24 2020 2 29 基址變址尋址方式 基址變址尋址方式的操作數的有效地址是基址寄存器的內容加上變址寄存器內容構成操作數的有效地址的計算公式是 有效地址 基址寄存器 變址寄存器 25 2020 2 29 例 基址變址尋址方式 386 modelflat stdcall dataarray1byte1 2 3 4 5 6 7array2byte8 9 10 11 12 13 14array endequ 1 codestart movebx offsetarray1movesi 1moval ebx esi 也可以寫成moval ebx esi movebx offsetarray2moval ebx esi ret 返回操作系統(tǒng)endstart 匯編結束 26 2020 2 29 26 2020 2 29 例 movebx offsetarray1 直接尋址 array1的地址 27 2020 2 29 27 2020 2 29 例 movesi 1 28 2020 2 29 28 2020 2 29 例 moval ebx esi 基址變址尋址esi ebx 00404001 00404001 02h 29 2020 2 29 29 2020 2 29 例 movebx offsetarray2 直接尋址 array2的地址 30 2020 2 29 30 2020 2 29 例 moval ebx esi 基址變址尋址esi ebx 00404008 00404008 09h 31 2020 2 29 相對基址變址尋址方式 相對基址變址尋址方式的操作數有效地址是基址寄存器的內容加上變址寄存器內容再加上一個8位 16位或32位的位移量構成操作數的有效地址的計算公式是 有效地址 基址寄存器 變址寄存器 8 16 32位位移量 32 2020 2 29 例 相對基址變址尋址 386 modelflat stdcall dataarraybyte1 2 3 4 5 6 7byte8 9 10 11 12 13 14byte15 16 17 18 19 20 21numcolsequ7nequ2 codestart movebx numcolsmovesi 1moval array ebx esi ret 返回操作系統(tǒng)endstart 匯編結束 33 2020 2 29 例 movebx numcols 34 2020 2 29 例 moval array ebx esi 基址變址尋址00404000 7 1 00404008 00404008 09h array的地址 35 2020 2 29 比例因子尋址方式 僅用于32位應用程序操作數的有效地址是由變址寄存器的內容乘以比例因子再加上位移量和基址寄存器的內容構成計算公式為 比例因子尋址方式中可以沒有基址寄存器和位移量 比例數只能是1 2 4 8這四種取值之一 有效地址 基址寄存器 變址寄存器 比例因子 位移量 36 2020 2 29 例 比例因子尋址方式 386 modelflat stdcall dataarrayword1 2 3 4 5 6 7word8 9 10 11 12 13 14word15 16 17 18 19 20 21rowequ7 2nequ2 codestart movebx rowmovesi 1movax array ebx esi 2 也可以寫成movax array ebx esi 2 ret 返回操作系統(tǒng)endstart 匯編結束 37 2020 2 29 例 movebx row 38 2020 2 29 例 movesi 1 39 2020 2 29 movax array ebx esi 2 比例因子尋址00404000 14 1 2 00404010 00404010 09h array的地址 40 2020 2 29 操作數尋址方式的組合 操作數尋址方式在指令中并不是任意組合的 是有一定規(guī)律的大多數指令 常用的數據傳送 加減運算 邏輯運算等指令 都支持如下組合 源操作數可以由立即數 寄存器或存儲器尋址 目的操作數只能是寄存器或存儲器尋址 兩個操作數不能同時為存儲器尋址方式 指令助記符reg imm reg mem指令助記符mem imm reg 41 2020 2 29 練習 假定實模式下 DS 2000H ES 2100H SS 1500H SI 00A0H BX 0100H BP 0010H 數據段中變量名VAL的偏移地址為0050H 試指出下列源操作數字段的尋址方式是什么 其物理地址值是多少 1 MOVAX 0ABH 2 MOVAX BX 3 MOVAX 100H 4 MOVAX VAL 5 MOVAX BX 6 MOVAX ES BX 7 MOVAX BP 8 MOVAX SI 9 MOVAX BX 10 10 MOVAX VAL BX 11 MOVAX BX SI 12 MOVAX VAL BX SI 42 2020 2 29 轉移地址尋址方式 匯編程序的執(zhí)行順序是由代碼段寄存器CS和指令指針EIP的內容決定的 程序轉移指令通過改變EIP和CS的內容 就可以改變程序的正常執(zhí)行順序 JMP 43 2020 2 29 JMP指令 JMP指令是無條件轉移指令 其格式為 JMP指令中的操作數label是要轉移到的目標地址 也稱為目的地址 轉移地址 JMPlabel 程序轉向label標號指定的地址 44 2020 2 29 轉移地址尋址 直接尋址轉移地址直接包含在指令的機器代碼中就是直接尋址方式 間接尋址轉移地址如果存放在寄存器或主存單元中 就是間接尋址方式 用寄存器或存儲器操作數表達 用標號表達 45 2020 2 29 轉移距離 段內轉移指在當前代碼段范圍內轉移 因此不需要更改CS段地址 只要改變EIP偏移地址 段間轉移指從當前代碼段跳轉到另一個代碼段 此時需要更改CS段地址和EIP偏移地址 46 2020 2 29 轉移地址的尋址方式 段內直接尋址段內間接尋址段間直接尋址段間間接尋址 47 2020 2 29 段內直接尋址 指令中直接寫出目標地址的標號 而在對應的機器碼中 包含位移量的補碼形式 位移量 緊接著JMP指令后的那條指令的偏移地址到目標指令的偏移地址的地址位移 當向地址增大方向轉移時 位移量為正 向地址減小方向轉移時 位移量為負 48 2020 2 29 相對轉移 段內直接尋址也叫作相對轉移相對轉移目的地址的計算公式為 目的地址 當前EIP 位移量 8bit 16bit 32bit 近轉移 位移量為8位段轉移 位移量為32位 49 2020 2 29 例 段內直接尋址 386 modelflat stdcall codestart moveax 0jmpstartquit ret 返回操作系統(tǒng)endstart 匯編結束 50 2020 2 29 50 2020 2 29 調試例 51 2020 2 29 51 2020 2 29 調試例 位移量F9 00401010 00401017 52 2020 2 29 52 2020 2 29 調試例 53 2020 2 29 短轉移和近轉移 匯編程序能夠根據位移量大小自動形成短轉移或近轉移指令 也可以用shortptr和nearptr操作符 強制產生相應的指令格式 54 2020 2 29 54 2020 2 29 強制近轉移 nearptr強制產生近轉移 位移量FFFFFFF8 00401010 0040101A 55 2020 2 29 段內間接尋址 將同一代碼段內的目標地址存放在一個32位寄存器中或雙字存儲器單元中 用寄存器或存儲器來間接尋址轉移地址 轉移地址 寄存器或存儲器內容 56 2020 2 29 例 段內間接尋址 386 modelflat stdcall dataaddressdwordquit codestart jmpaddressquit ret 返回操作系統(tǒng)endstart 匯編結束 57 2020 2 29 調試例 58 2020 2 29 寄存器間接尋址內存 轉移地址也可以存放在寄存器中 moveax offsetquitjmpeax 59 2020 2 29 本章小結 操作數 直接 直接偏移 間接 變址數據傳送指令MOV MOVZX MOVSX XCHG算術運算指令INC DEC ADD DEC NEGMUL IMUL DIV IDIV狀態(tài)標志 CF OF ZF SF- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- Win32 匯編語言 尋址 方式
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://kudomayuko.com/p-6567489.html