




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
匯編語言程序設(shè)計,_03_簡單的算術(shù)運算與數(shù)據(jù)傳送 大連理工大學(xué)軟件學(xué)院_朱明 2009年5月31日_ V1.1,第二章提問,如何定義一個字符串變量使其包含10個“hi”? DWORD 12345678h按照小尾順序存儲,如果地址00400050h存儲的是34h,那么004000051h和地址00400049h存儲的分別是什么? MASM中的標(biāo)識符需要遵循什么規(guī)則? 列舉MASM中數(shù)據(jù)類型的三種? MASM匯編語言中的PROC、ENDP和END偽指令分別由什么作用?,匯編語言程序設(shè)計 - 朱明,2,前章回顧,本章程序中的DumpRegs過程 該過程的源代碼irvine32.asm中,第404行開始 Macros.inc文件中的第248行開始,簡單說一下 mShowRegister使用了宏定義 使用了宏內(nèi)部變量(LOCAL偽指令定義) 使用了字符串變量(”®Name”) 使用了OFFSET操作符返回字符串的偏移地址 調(diào)用了兩個常用的過程(WriteString和WriteHex),分別用來顯示字符串和寄存器中的十六進(jìn)制數(shù),匯編語言程序設(shè)計 - 朱明,3,mShowRegister EAX, EAX mShowRegister EBX, EBX,前章回顧,指令系統(tǒng)三種操作數(shù)表示方法:,Section 1,操作數(shù)類型,匯編語言程序設(shè)計 - 朱明,4,MOV指令,從源操作數(shù)向目的操作數(shù)復(fù)制數(shù)據(jù) 目的操作數(shù)不能夠是CS、EIP和IP 操作數(shù)不能同為內(nèi)存操作數(shù)(mem) 立即數(shù)不能直接送段寄存器 操作數(shù)尺寸必須相同,匯編語言程序設(shè)計 - 朱明,5,Section 2,mov destination, source,mov reg, reg mov mem, reg mov reg, mem mov mem, imm mov reg, imm,MOV指令,MOV,從源操作數(shù)向目的操作數(shù)復(fù)制數(shù)據(jù) 小尺寸操作數(shù)復(fù)制到大尺寸操作數(shù)中的問題 需要判定操作數(shù),然后進(jìn)行一些適當(dāng)?shù)奶幚? 如果操作數(shù)是負(fù)數(shù)會怎么樣?,匯編語言程序設(shè)計 - 朱明,6,Section 2,mov ecx, 12345678h,ECX ?,再將一個WORD送到ecx中,怎么做?,mov cx, 9999h,CX ?,ECX ?,mov destination, source,將一個DWORD送到ecx中,怎么做?,MOV指令,MOVZX,零擴(kuò)展傳送 MOVZX只能用于無符號整數(shù) 使用0擴(kuò)展值后 ECX=00009999h,匯編語言程序設(shè)計 - 朱明,7,Section 2,mov cx, 9999h,9999,5678,1234,CX,ECX,movzx ecx, val,9999,5678,1234,CX,ECX,0000,MOV指令,MOVSX,符號擴(kuò)展傳送 MOVSX只能用于有符號整數(shù) 使用符號擴(kuò)展值之后 ECX=FFFFFFF0h 如果CX=-3呢,擴(kuò)展出來的ECX的結(jié)果是多少?,匯編語言程序設(shè)計 - 朱明,8,Section 2,movsx ecx, val,1111,1111,1111,0000,1111,,1111,CX,ECX,1111,1111,1111,0000,MOV指令,MOVSX/MOVZX與MOV的應(yīng)用比較 用處和原理以及操作目的不同 操作數(shù)的范圍不同 MOV,5種基本的操作范圍 MOVSX、MOVZX,2種基本的操作范圍 操作數(shù)的屬性不同 MOV,要求操作數(shù)尺寸必須一致 source和destination的位數(shù)必須一致 MOVSX/MOVZX,要求操作數(shù)尺寸必須不一致 source必須要比destination小 reg32,reg8/mem8 reg32,reg16/mem16 reg16,reg8/mem8,匯編語言程序設(shè)計 - 朱明,9,Section 2,mem, mem mem, imm reg, imm reg, mem reg, reg,reg, mem reg, reg,MOV指令,從源操作數(shù)向目的操作數(shù)復(fù)制數(shù)據(jù) 其中的value1,在匯編完成后是什么?數(shù)據(jù)?或者其他? 使用變量時,隱含著一個尋址的問題直接尋址,匯編語言程序設(shè)計 - 朱明,10,Section 2,mov destination, source,value1 DWORD 1234h mov eax, value1,A100405000,匯編之后生成的機(jī)器碼,mov eax, value1,MOV指令,直接尋址的過程中的偏移量問題 受篇幅影響程序間的部分內(nèi)容略,匯編語言程序設(shè)計 - 朱明,11,Section 2,value1 BYTE 1h,2h,3h,4h,7h mov al, value1,AL = 01h,AL = ?,mov al, value1 + 4,AL = 07h,AL = ?,mov al, value1 + 4,AL = 07h,AL = ?,MOV指令,直接尋址的過程中的偏移量問題 有效地址:在變量的編譯地址后面加上一個常數(shù)所得到的表示式,例如前面提到的value1+4,稱為 采用方括號的方式使用有效地址,就表示需要對有效地址表達(dá)式進(jìn)行尋址以獲得該有效地址處的內(nèi)容 MASM中可以省略掉方括號,上面的兩個是等價的 MASM不會對有效地址進(jìn)行范圍檢查,因此可能會造成對預(yù)定的有效范圍之外的數(shù)據(jù)的訪問,匯編語言程序設(shè)計 - 朱明,12,Section 2,mov al, value1 + 4,mov al, value1 + 4,MOV指令,直接尋址的過程中的偏移量問題 在使用16位字或者32位雙字以及其他的數(shù)據(jù)類型的時候,不要忘記對應(yīng)的偏移量的單位是多少 WORD:2,DWORD:4,匯編語言程序設(shè)計 - 朱明,13,Section 2,value1 WORD 1h,2h,3h,4h,7h mov ax, value1,AX = 0001h,AX = ?,mov ax, value1 + 4,AX = ?,AX = 0003h,XCHG指令,XCHG,數(shù)據(jù)交換指令 交換數(shù)據(jù),實際上是交換數(shù)據(jù)在容器中的位置 XCHG指令不能使用立即數(shù)作為操作數(shù) XCHG指令不能直接交換兩個內(nèi)存操作數(shù) 必須使用至少一個寄存器作為臨時存儲容器,匯編語言程序設(shè)計 - 朱明,14,Section 2,xchg destination, source,xchg reg, reg xchg mem, reg xchg reg, mem,INC、DEC和ADD指令,INC,增指令 DEC,減指令 ADD,將源操作數(shù)和目的操作數(shù)相加 ADD操作不改變源操作數(shù) ADD的運算結(jié)果保存在目的操作數(shù)中,匯編語言程序設(shè)計 - 朱明,15,inc reg/mem,dec reg/mem,add destination, source,Section 2,SUB指令,SUB,將源操作數(shù)從目的操作數(shù)中減掉 SUB操作不改變源操作數(shù) SUB的運算結(jié)果保存在目的操作數(shù)中 SUB指令的執(zhí)行實際上是ADD與補碼的運算,匯編語言程序設(shè)計 - 朱明,16,sub destination, source,4-1,4+(-1),+,進(jìn)位了?,Section 2,NEG指令,NEG,將對應(yīng)的數(shù)字求二進(jìn)制的補碼 負(fù)數(shù)的補碼的求法 將對應(yīng)的操作數(shù)所有位取反然后加一得到,匯編語言程序設(shè)計 - 朱明,17,neg reg/mem,-1的補碼,+,Section 2,算術(shù)綜合運算,簡單的算術(shù)綜合運算可以通過前面的指令完成 MOV、ADD、SUB、INC、DEC、NEG 其中所有的變量都是32位有符號 假設(shè)Xval為26, Yval為30, Zval為40 工程的建立和屬性修改部分的內(nèi)容省略 定義所使用到的各個變量(SDWORD) 處理表達(dá)式中的子項的值 Xval的取反 將Yval的值復(fù)制到寄存器中并減去Zval 最后把各個子項的值相加,匯編語言程序設(shè)計 - 朱明,18,Rval = -Xval + (Yval - Zval),Section 2,標(biāo)志位的影響,前面講到過關(guān)于EFLAGS的問題 標(biāo)志位對于結(jié)果的判定有重要的作用 CF:判斷無符號整數(shù)運算是否發(fā)生了溢出 OF:判斷有符號整數(shù)運算是否發(fā)生了溢出 SF:判斷運算結(jié)果是否為負(fù)數(shù) 僅判定運算結(jié)果的最高有效位是否被置位 ZF:判斷運算結(jié)果是否為零 PF:判斷最低字節(jié)內(nèi)的1的個數(shù)是否為偶數(shù) AC:判斷運算結(jié)果的最低有效字節(jié)的第3位是否向高位產(chǎn)生了進(jìn)位,匯編語言程序設(shè)計 - 朱明,19,EFLAGS:由控制CPU的位或者CPU的運算結(jié)果的獨立位構(gòu)成 CF、OF、SF、ZF、AC、PF,Section 3,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 PF:奇偶標(biāo)志位,匯編語言程序設(shè)計 - 朱明,20,mov al, 10001100b,add al, 00000010b,sub al, 10000000b,AL=10001100b,AL=10001110b,AL=00001110b,PF=1,PF=0,Section 3,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 ZF:零標(biāo)志位,匯編語言程序設(shè)計 - 朱明,21,Section 3,mov ax, 0FFFFh,inc ax,inc ax,AX = FFFFh,AX = 0000h,AX = 0001h,ZF=1,ZF=0,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 SF:符號標(biāo)志位(最高有效位的判斷) 符號標(biāo)志位不區(qū)分有符號數(shù)和無符號數(shù) 不能通過符號位判斷是有符號數(shù)還是無符號數(shù),匯編語言程序設(shè)計 - 朱明,22,val1 WORD 0F000h mov ax, val1,add ax, 1,AX = F000h,AX = F001h,SF=1,Section 3,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 SF:符號標(biāo)志位(最高有效位的判斷) 符號標(biāo)志位不區(qū)分有符號數(shù)和無符號數(shù) 不能通過符號位判斷是有符號數(shù)還是無符號數(shù),匯編語言程序設(shè)計 - 朱明,23,val1 WORD 0F000h mov ax, val1,add ax, 1,AX = F000h,AX = F001h,SF=1,Section 3,處理器并不能根據(jù)數(shù)據(jù)的定義來正確的設(shè)置符號位的CPU并不知道在運算的是有符號數(shù)還是無符號數(shù),而數(shù)據(jù)的類型是程序員的工作,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 AC:輔助進(jìn)位標(biāo)志位 是第三位向第四位進(jìn)位的值,匯編語言程序設(shè)計 - 朱明,24,Section 3,mov al, 00001111b,add al, 00000001b,AL=00001111b,AL=00010000b,AC=1,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 CF:進(jìn)位(借位呢?)標(biāo)志位(無符號算術(shù)運算) INC和DEC不影響CF標(biāo)志位 非零整數(shù)的NEG操作將設(shè)置CF,匯編語言程序設(shè)計 - 朱明,25,val1 WORD 0FFFFh mov ax, val1,inc ax,AX = 0FFFFh,CF=1,Section 3,add ax, 1,CF=0,neg ax,CF=1,如果是減法呢 ?,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 OF:溢出標(biāo)志位(有符號算術(shù)運算) INC和DEC會影響OF標(biāo)志位,匯編語言程序設(shè)計 - 朱明,26,val1 SWORD 7FFFh mov ax, val1,AX = 7FFFh,AX = 8000h,OF=1,Section 3,add ax, 1,inc ax,OF=1,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 從硬件的角度看OF與CF的判定方法 無符號數(shù)的算術(shù)運算進(jìn)位的判定方法? 無符號運算,最高位的高一位產(chǎn)生了數(shù)據(jù) 硬件上的實現(xiàn)非常簡單,設(shè)多一位的全加器即可 有符號數(shù)的算術(shù)運算溢出的判定方法? 兩個正數(shù)加法的結(jié)果是負(fù)數(shù) 兩個負(fù)數(shù)相加的結(jié)果是正數(shù) 兩個符號不同的數(shù)相加的結(jié)果永遠(yuǎn)不會發(fā)生溢出 硬件的判定方法:第6位進(jìn)位和第7位進(jìn)位的異或的結(jié)果 還記得什么是異或操作么?,匯編語言程序設(shè)計 - 朱明,27,Section 3,標(biāo)志位的影響,所有的標(biāo)志位的變化都是在進(jìn)行算術(shù)運算后產(chǎn)生 從硬件的角度看OF與CF的判定方法 有符號數(shù)的算術(shù)運算溢出的判定方法? 硬件的判定方法:第6位進(jìn)位和第7位進(jìn)位的異或的結(jié)果 還記得什么是異或操作么?,匯編語言程序設(shè)計 - 朱明,28,Section 3,+,有進(jìn)位 1,無進(jìn)位 0,結(jié)果為 1,有溢出了 !,標(biāo)志位的影響,各個標(biāo)志位的影響因素和判定方法總結(jié) PF:最低字節(jié)內(nèi)的1的個數(shù)是否為偶數(shù) ZF:運算結(jié)果是否為零 SF:運算結(jié)果的最高有效位是否為1 AC:判斷運算結(jié)果的最低有效字節(jié)的第3位是否向高位產(chǎn)生了進(jìn)位 CF:運算結(jié)果的最高有效位的再高一位是否為1 OF:兩個操作數(shù)的最高位的進(jìn)位與次高位進(jìn)位的異或運算的結(jié)果 同時需要注意什么樣的算術(shù)運算能影響那些標(biāo)志位 尤其要注意NEG、INC、DEC,匯編語言程序設(shè)計 - 朱明,29,Section 3,OFFSET操作符,實模式下的段和地址(半復(fù)習(xí)) 16位段值:16位段偏移 32位保護(hù)模式下的段和地址(半復(fù)習(xí)) 16位段選擇符:32位段偏移 每個任務(wù)的邏輯空間可達(dá)64TB,計算方法? OFFSET操作符返回數(shù)據(jù)標(biāo)號的偏移地址,匯編語言程序設(shè)計 - 朱明,30,bVal BYTE ? mov esi, OFFSET bVal,ESI = XXXXXXXXh,返回32位地址,Section 4,ALIGN偽指令,ALIGN偽指令可以使指令或變量的位置按照字節(jié)、字、雙字進(jìn)行邊界對齊 邊界值可以是1、2或者是4 對齊可以提高CPU存取內(nèi)存的效率 變量:填充數(shù)據(jù) 指令:填充NOP(空指令),匯編語言程序設(shè)計 - 朱明,31,ALIGN 邊界值,bVal BYTE ? ALIGN 2 wVal WORD ?,增加了對齊偽指令前后wVal變量存儲位置的變化,Section 4,PTR操作符,使用PTR操作符對操作數(shù)進(jìn)行尺寸上的重載 功能上相當(dāng)于C語言中的強(qiáng)制類型轉(zhuǎn)換 PTR操作符不改變操作數(shù)的原類型,僅重載新類型,匯編語言程序設(shè)計 - 朱明,32,dVal DWORD 12345678h mov ax, WORD PTR dVal,mov eax, dVal,AX=5678h,AX = 1234h ? AX = 5678h ?,EAX=12345678h,Section 4,PTR操作符,使用PTR操作符對操作數(shù)進(jìn)行尺寸上的重載 CPU并不在乎你定的數(shù)據(jù)類型,它只是按照程序定義的規(guī)則去訪問內(nèi)存,匯編語言程序設(shè)計 - 朱明,33,dVal DWORD 12345678h lVal WORD 1234h, 5678h mov ax, WORD PTR dVal+1,mov eax, DWORD PTR lVal,AX=3456h,Section 4,EAX=56781234h,EAX = ?,TYPE操作符,TYPE操作符返回按照字節(jié)為單位的元素的大小 BYTE(1)、WORD(2).,匯編語言程序設(shè)計 - 朱明,34,TYPE reg/mem,dVal DWORD 12345678h lVal WORD 1234h, 5678h mov eax, TYPE dVal,mov eax, TYPE lVal,EAX=00000004h,EAX=00000002h,Section 4,Section 4,LENGTHOF和SIZEOF操作符,LENGTHOF操作符返回數(shù)組中的元素的個數(shù) 只能返回跨行數(shù)組第一行的元素的數(shù)目 SIZEOF操作符的返回值= LENGTHOF的返回值 * TYPE的返回值,匯編語言程序設(shè)計 - 朱明,35,Array1 WORD 1234h, 5678h Array2 BYTE 20 DUP(?),0 mov eax, LENGTHOF Array1,EAX=00000002h,mov eax, LENGTHOF Array2,EAX=00000015h,LABEL偽指令,LABEL偽指令用于在指定位置插入一個不占用存儲空間的、但具有屬性特征的標(biāo)號 相同的存儲空間的不同的名字(標(biāo)號) LABEL也可用于合并成大數(shù),匯編語言程序設(shè)計 - 朱明,36,wVal LABEL WORD dVal DWORD 12345678h,78,56,34,12,0001h,0000h,0002h,0003h,wVal dVal,Section 4,mov ax, wVal,ax = 5678h
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 書銷售返利合同范本
- 2025年武威貨車上崗證理論模擬考試題庫
- 臨街門面房轉(zhuǎn)讓合同范本
- 全款分期購房合同范本
- 公路施工單價合同范本
- 出售鐵皮房子合同范本
- 分銷平移合同范本
- 債券托管合同范本
- 修建電動車車棚合同范本
- 物流園遮雨棚安裝施工方案
- 2020-2024年五年高考地理真題分類匯編專題02(地球運動)+解析版
- 水文與水資源勘測基礎(chǔ)知識單選題100道及答案解析
- 銷售沙盤演練培訓(xùn)
- 藥物臨床試驗倫理審查應(yīng)急預(yù)案
- 2025年中國工程建設(shè)行業(yè)現(xiàn)狀、發(fā)展環(huán)境及投資前景分析報告
- 初級電工證考試試題庫(含答案)
- 《海瀾之家公司績效管理現(xiàn)狀、問題及優(yōu)化對策(7600字論文)》
- 小學(xué)四年級英語教學(xué)反思3篇
- DB1509T 0025-2024 肉牛舍設(shè)計與建筑技術(shù)規(guī)范
- 上海室內(nèi)裝飾施工合同示范文本2024年
- 四年級語文下冊 第一單元 字詞專項練習(xí) (含答案)(部編版)
評論
0/150
提交評論