Win32匯編語(yǔ)言-表達(dá)式與操作符課件_第1頁(yè)
Win32匯編語(yǔ)言-表達(dá)式與操作符課件_第2頁(yè)
Win32匯編語(yǔ)言-表達(dá)式與操作符課件_第3頁(yè)
Win32匯編語(yǔ)言-表達(dá)式與操作符課件_第4頁(yè)
Win32匯編語(yǔ)言-表達(dá)式與操作符課件_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、宋軍計(jì)算機(jī)學(xué)院信息安全系表達(dá)式與操作符2022/10/101宋軍表達(dá)式與操作符2022/10/91主要內(nèi)容匯編語(yǔ)言開發(fā)環(huán)境MASM32匯編語(yǔ)言程序結(jié)構(gòu)匯編語(yǔ)言的語(yǔ)句格式 匯編語(yǔ)言程序格式MASM偽指令2022/10/102主要內(nèi)容匯編語(yǔ)言開發(fā)環(huán)境2022/10/92變量類型:字節(jié)型、字與雙字、多字節(jié),結(jié)構(gòu)、枚舉存儲(chǔ):全局變量、局部變量定義全局變量的時(shí)候類型才可以用縮寫 2022/10/103變量類型:字節(jié)型、字與雙字、多字節(jié),結(jié)構(gòu)、枚舉定義全局變量的全局變量全局變量的作用域是整個(gè)程序,Win32匯編的全局變量定義在 .data或 .data?段內(nèi),可以同時(shí)定義變量的類型和長(zhǎng)度,格式是: 變量名

2、 類型 初始值1,初始值2,變量名 類型 重復(fù)數(shù)量 dup (初始值1,初始值2,)2022/10/104全局變量全局變量的作用域是整個(gè)程序,Win32匯編的全局變量全局變量的初始化全局變量在定義中既可以指定初值,也可以只用問(wèn)號(hào)預(yù)留空間在 .data?段中,只能用問(wèn)號(hào)預(yù)留空間,因?yàn)?.data?不能指定初始值。實(shí)際運(yùn)行的時(shí)候,未初始化的值是0。 word_Bufferdw 100 dup (1,2) ; 一組字,以0001,0002,0001,0002,的 ; 順序在內(nèi)存中重復(fù)100遍,一共是200個(gè)字。 szBuffer byte 1024 dup (?) ; 1 024字節(jié)的緩沖區(qū) ; 在

3、byte類型變量的定義中,用引號(hào)定義字符串和數(shù)值定義的方法混用 szText db Hello,world!,0dh,0ah,Hello again,0dh,0ah,0 2022/10/105全局變量的初始化全局變量在定義中既可以指定初值,也可以只用問(wèn)局部變量?jī)蓚€(gè)以上子程序都要用到的數(shù)據(jù)才被定義為全局變量統(tǒng)一放在數(shù)據(jù)段中,僅在子程序內(nèi)部使用的變量則放在堆棧中 在進(jìn)入子程序的時(shí)候,通過(guò)修改堆棧指針esp來(lái)預(yù)留出需要的空間,在用ret指令返回主程序之前,同樣通過(guò)恢復(fù)esp丟棄這些空間 空間是臨時(shí)分配的,所以無(wú)法定義含有初始化值的變量,對(duì)局部變量的初始化一般在子程序中由指令完成。 2022/10/1

4、06局部變量?jī)蓚€(gè)以上子程序都要用到的數(shù)據(jù)才被定義為全局變量統(tǒng)一放局部變量的定義local偽指令必須緊接在子程序定義的偽指令proc后、其他指令開始前 Win32匯編默認(rèn)的類型是dword,如果定義dword類型的局部變量,則類型可以省略。當(dāng)定義數(shù)組的時(shí)候,可以 括號(hào)括起來(lái),不能使用定義全局變量的dup偽指令。局部變量不能和已定義的全局變量同名。在不同的子程序中可以有同名的局部變量。局部變量的起始值是隨機(jī)的,是其他子程序執(zhí)行后在堆棧里留下的垃圾 local 變量名1重復(fù)數(shù)量:類型,變量名2重復(fù)數(shù)量:類型 2022/10/107局部變量的定義local 變量名1重復(fù)數(shù)量數(shù)值表達(dá)式數(shù)值表達(dá)式一般是指

5、由運(yùn)算符連接的各種常數(shù)所構(gòu)成的表達(dá)式匯編程序在匯編過(guò)程中計(jì)算表達(dá)式,最終得到一個(gè)數(shù)值程序運(yùn)行之前,就已經(jīng)計(jì)算出了表達(dá)式;所以,程序運(yùn)行速度沒有變慢,但增強(qiáng)程序的可讀性MASM對(duì)除偽指令外各種匯編時(shí)處理的指令統(tǒng)稱為操作符(Operator)2022/10/108數(shù)值表達(dá)式數(shù)值表達(dá)式一般是指由運(yùn)算符連接的各種常數(shù)所構(gòu)成的表運(yùn)算符算術(shù)運(yùn)算符:+ - * / MOD 移位運(yùn)算符:SHL SHR邏輯運(yùn)算符:AND OR NOT XOR 關(guān)系運(yùn)算符:EQ NE GT LT GE LE高低分離符:HIGH LOW HIGHWORD LOWWORD2022/10/109運(yùn)算符算術(shù)運(yùn)算符:+ - * / M算術(shù)

6、運(yùn)算符實(shí)現(xiàn)加、減、乘、除、取余的算術(shù)運(yùn)mov ax,3*4+5;等價(jià)于 mov ax,17MOD也稱為取模,它產(chǎn)生除法之后的余數(shù)19 mod 7 = 5加 + 和減 - 運(yùn)算符還可以用于地址表達(dá)式除加、減外,其他運(yùn)算符的參數(shù)應(yīng)是整數(shù)2022/10/1010算術(shù)運(yùn)算符實(shí)現(xiàn)加、減、乘、除、取余的算術(shù)運(yùn)mov ax,3邏輯運(yùn)算符實(shí)現(xiàn)按位相與、相或、異或、求反的邏輯運(yùn)算 or al,03h AND 45h ;等價(jià)于 or al,01h47H AND 0FH,NOT 56H計(jì)算結(jié)果分別為:7和0A9H 2022/10/1011邏輯運(yùn)算符實(shí)現(xiàn)按位相與、相或、異或、求反的邏輯運(yùn)算47H A移位運(yùn)算符實(shí)現(xiàn)對(duì)數(shù)

7、值的左移、右移的邏輯操作;移入低位或高位的是0格式為:數(shù)值表達(dá)式 SHL/SHR 移位次數(shù)mov al, 0101b SHL (2*2);等價(jià)于 mov al,01010000b2022/10/1012移位運(yùn)算符實(shí)現(xiàn)對(duì)數(shù)值的左移、右移的邏輯操作;移入低位或高位的關(guān)系運(yùn)算符用于比較和測(cè)試符號(hào)數(shù)值MASM用0FFFFH(補(bǔ)碼 -1)表示條件為真,用0000H表示條件為假mov bx,(PORT LT 5) AND 20) OR (PORT GE 5)AND 30);當(dāng)PORT5時(shí),匯編結(jié)果為mov bx,20;否則,匯編結(jié)果為mov bx,302022/10/1013關(guān)系運(yùn)算符用于比較和測(cè)試符號(hào)數(shù)

8、值mov bx,(PORT 高低分離符取數(shù)值的高半部分或低半部分HIGH、LOW從一個(gè)字?jǐn)?shù)值或符號(hào)常量中得到高、低字節(jié)mov ah,HIGH 8765h;等價(jià)于mov ah,87h從MASM 6.0引入的HIGHWORD、LOWWORD取一個(gè)符號(hào)常量(不能是其他常數(shù))的高字或低字部分 dd_value equ 0ffff1234h;定義一個(gè)符號(hào)常量mov ax,LOWWORD dd_value;等價(jià)于mov ax,1234h2022/10/1014高低分離符取數(shù)值的高半部分或低半部分2022/10/914其它操作符類型屬性操作符:TYPE長(zhǎng)度屬性操作符:LENGTH容量屬性:SIZE強(qiáng)制屬性操

9、作符:PTR存儲(chǔ)單元?jiǎng)e名操作符:THIS2022/10/1015其它操作符類型屬性操作符:TYPE2022/10/915運(yùn)算符與操作符的優(yōu)先級(jí)() LENGTH SIZEPTR OFFSET SEG TPYE THIS HIGE LOW* / MOD SHL SHR+ -EQ NE GT LT GE LENOTANDOR XOR高低2022/10/1016運(yùn)算符與操作符的優(yōu)先級(jí)() LE地址表達(dá)式地址表達(dá)式是計(jì)算存儲(chǔ)單元地址的表達(dá)式,它可由標(biāo)號(hào)、變量名和由括號(hào)括起來(lái)的基址或變址寄存器組成。其計(jì)算結(jié)果表示一個(gè)存儲(chǔ)單元的地址,而不是該存儲(chǔ)單元的值。B1DB10H, 11H, 12HDBABCDW1

10、DW1234H, 5678H101112ABCD34127856B1B1+3W1+1mov al, B1mov al, B1+3mov ax, W1+1B1+32022/10/1017地址表達(dá)式地址表達(dá)式是計(jì)算存儲(chǔ)單元地址的表達(dá)式,它可由標(biāo)號(hào)、地址操作符取得名字或標(biāo)號(hào)的段地址和偏移地址兩個(gè)屬性 將括起的表達(dá)式值作為存儲(chǔ)器地址$當(dāng)前偏移地址OFFSET 名字/標(biāo)號(hào) 返回名字或標(biāo)號(hào)的偏移地址 : 采用指定的段地址寄存器 SEG 名字/標(biāo)號(hào) 返回名字或標(biāo)號(hào)的段基址2022/10/1018地址操作符取得名字或標(biāo)號(hào)的段地址和偏移地址兩個(gè)屬性2022/.386.model flat, stdcallopt

11、ion casemap:noneinclude windows.incinclude kernel32.incincludelib kernel32.lib.dataB1BYTE01h, 02hDBABCDW1 WORD1234h, 5678h.codestart:mov al, B1mov al, B1+1mov ax, W1+1mov eax, offset W1mov eax, $invoke ExitProcess, NULLend start.text:00401000 public start.text:00401000 start proc near.text:00401000

12、mov al, byte_403000.text:00401005 mov al, byte_403001.text:0040100A mov ax, word_403007.text:00401010 mov eax, offset unk_403006.text:00401015.text:00401015 loc_401015:.text:00401015 mov eax, offset loc_401015.text:0040101A push 0 ; uExitCode.text:0040101C call ExitProcess.text:0040101C start endp.data:00403000 byte_403000 db 1.data:00403001 byte_403001 db 2.data:00403002 db 41h ; A

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論