




已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
匯編語言程序設(shè)計,_02_數(shù)據(jù)表示與匯編語言基礎(chǔ) 大連理工大學(xué)軟件學(xué)院_朱明 2009年5月31日_ V1.1,第一章提問,IA-32內(nèi)部有8個32位寄存器,如EAX、EBX等,當(dāng)要將EAX和EBX作為16位寄存器和8位寄存器使用的時候,他們的名字分別是什么? EFLAGS中的與算術(shù)運算最相關(guān)的標志位的名稱和功能分別是什么? IA-32的三種基本運行模式是什么? 為了減小CPU與內(nèi)存之間交換數(shù)據(jù)的等待時間,在CPU與內(nèi)存之間增加了緩存(cache)。一個好的cache替換算法能夠提高命中率,那么請說出三種目前的替換算法? IA-32指令執(zhí)行的五個步驟是什么?哪三個是必須的?,匯編語言程序設(shè)計 - 朱明,2,數(shù)據(jù)的表示方法,我們需要先回答以下的幾個問題: 什么是進制?他與計數(shù)之間有什么關(guān)系?如何進行任意進制數(shù)的加法和減法運算? “逢X進1”,不允許出現(xiàn)比X大的單位數(shù)字出現(xiàn) 加大了就向高位進位,減小了就從高位借位 計算機系統(tǒng)中常見的進制都有哪些? 二進制,逢2進1,有0、1 十進制,逢10進1,有09 十六進制,逢16進1,有09、AF 計算機的內(nèi)存系統(tǒng)中,每一個位保存的是哪種進制的數(shù)?MSB和LSB分別表示什么含義? 二進制數(shù),只有0和1兩個數(shù)字 MSB最高有效位,LSB最低有效位,3,匯編語言程序設(shè)計 - 朱明,Section 1,數(shù)據(jù)的表示方法,我們需要先回答以下的幾個問題: 字節(jié)、字、雙字的位數(shù)分別是多少? 8位的Byte,16位的word,32位的doubleword K、M、G、T、P、E、Z、Y分別代表多大? K=210 、M=220 、G=230 、T=240 、 P=250 、E=260 、Z=270 、Y=280 各類長度有符號和無符號整數(shù)的范圍是多少? 無符號:8位028-1,16位0216-1,32位0232-1 有符號:有符號整數(shù)的最高位為符號位,若為1則表示是負數(shù):8位-2727-1,16位-215215-1 ,32位-231231-1 任意進制如何裝換到10進制? DEC=+(D1*X1)+(D0*X0),4,匯編語言程序設(shè)計 - 朱明,Section 1,數(shù)據(jù)的表示方法,我們需要先回答以下的幾個問題: 計算機中經(jīng)常的字符集都有哪些? ASCII:美國標準信息交換碼,7位+1位 Unicode:UTF-8,UTF-16,UTF-32 UTF-8保留了ASCII字符的編碼 國際編碼,通用性強:英文8位,中文24位 UTF-16是Unicode的最初設(shè)計目標,也是默認的Unicode GB2312:基于區(qū)位碼的16位漢字編碼 編碼范圍:0xA1A1 - 0x7E7E GBK:向下兼容GB2312,包括所有CJK漢字 GB18030:向下兼容GBK和GB2312,目前在文字符號方面收錄較全的編碼。,5,匯編語言程序設(shè)計 - 朱明,Section 1,數(shù)據(jù)的表示方法,ASCII字符串:一個或多個字符的序列 “ABC123”、ABC123 41h,42h,43h,31h,32h,33h,空字符結(jié)尾 ASCII控制字符,部分:,匯編語言程序設(shè)計 - 朱明,6,Section 1,匯編語言的保留字,MASM環(huán)境中,有一些字符具有特殊的含義: 指令的助記符,對于MASM來說 ADD、CALL、CMP、DEC、INC、JMP、MOV等 偽指令,用于程序的編譯設(shè)置 PROC、.MMX、.DATA、.DATA?、.CODE等 屬性,用于定義變量和操作數(shù)信息 BYTE、WORD、QWORD等 屬性也同屬于MASM的偽指令內(nèi)容 預(yù)定義符號 data、stack、$、Time、Version等 更多的保留字會在后面的課程中接觸到,匯編語言程序設(shè)計 - 朱明,7,Section 2,匯編語言的標識符,MASM環(huán)境的標識符可以類比為C語言中的變量或函數(shù),在匯編語言中使用標識符來標識程序中的變量、常量、過程或代碼的標號 標識符由1127個字符組成 標識符默認大小寫不敏感 可以在匯編時通過“-cP”選項設(shè)置標識符的大小寫敏感 標識符必須不是任何保留字 對標識符首字符的要求 AZ、az、_、?、$ 盡量避免使用作為首字符,匯編語言程序設(shè)計 - 朱明,8,Section 2,匯編語言的偽指令,偽指令在程序運行時并不執(zhí)行 匯編語言中由匯編器識別并執(zhí)行相應(yīng)的動作 在C語言中,宏定義由什么來識別并處理? 匯編語言的偽指令可以用于定義變量、宏、過程、段的命名以及其他的匯編器相關(guān)設(shè)置 偽指令大小寫是不敏感的 變量的定義要使用偽指令,匯編語言程序設(shè)計 - 朱明,9,num DWORD 100,list BYTE 10, 20, 30, 40 BYTE “Good night”, 0 BYTE 0Ah, A, 22h,Section 2,匯編語言的指令,匯編指令的基本構(gòu)成: 標號(可選) 數(shù)據(jù)標號:數(shù)據(jù)標號標識了變量的地址 代碼標號:代碼標號,通常用于跳轉(zhuǎn)和循環(huán)的目標地址,匯編語言程序設(shè)計 - 朱明,10,指令助記符,操作數(shù),;注釋,num DWORD 100,loop: mov eax,12 . jmp loop,Section 2,標號:,匯編語言的指令,匯編指令的基本構(gòu)成: 指令助記符 助記符是一個簡單短的、能夠被匯編器識別的單詞 mov ,將一個值賦值到另外一個寄存器或變量中 add,加法操作 sub,減法操作 mul,乘法操作 jmp,跳轉(zhuǎn)到一個新地址執(zhí)行指令 call,調(diào)用一個過程,匯編語言程序設(shè)計 - 朱明,11,標號:,指令助記符,操作數(shù),;注釋,Section 2,mov eax,3,匯編語言的指令,匯編指令的基本構(gòu)成: 操作數(shù) 匯編語言的操作數(shù)依匯編指令而定,一般是03個 操作數(shù)可以是寄存器、立即數(shù)或內(nèi)存地址(標號)等 無操作數(shù): 單操作數(shù): 雙操作數(shù):,匯編語言程序設(shè)計 - 朱明,12,標號:,指令助記符,操作數(shù),;注釋,Section 2,nop,inc eax,匯編指令的基本構(gòu)成: 注釋 注釋就是用自然語言描述程序以實現(xiàn)方便閱讀等功能 匯編語言中有幾種方式能夠?qū)崿F(xiàn)注釋的功能,比如 單行注釋: 塊注釋:,COMMENT = 這是多行注釋 =,匯編語言的指令,匯編語言程序設(shè)計 - 朱明,13,標號:,指令助記符,操作數(shù),;注釋,Section 2, ;這是一行注釋,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 3,程序范例,一個簡單的加減法程序,匯編語言程序設(shè)計 - 朱明,14,TITLE偽指令,定義列表文件標題 可以將整行標記為注釋 分號右邊的內(nèi)容將作為本行的注釋 注釋的內(nèi)容默認會被編譯器忽略,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 3,程序范例,一個簡單的加減法程序,匯編語言程序設(shè)計 - 朱明,15,INCLUDE偽指令 匯編時將從irvine32.inc文件中復(fù)制必要的定義信息和設(shè)置信息 INCLUDE的目錄在環(huán)境中已經(jīng)設(shè)置,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 3,程序范例,一個簡單的加減法程序,匯編語言程序設(shè)計 - 朱明,16,.code偽指令 標記代碼段的開始,代碼段中存放程序中的所有可執(zhí)行語句,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 3,程序范例,一個簡單的加減法程序,匯編語言程序設(shè)計 - 朱明,17,PROC偽指令 用于表示一個過程的開始,程序中的該過程被命名為main,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 3,程序范例,一個簡單的加減法程序,匯編語言程序設(shè)計 - 朱明,18,call可以用來調(diào)用另外一個過程 DumpRegs過程是一個可以顯示CPU內(nèi)部所有寄存器的值的過程,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 3,程序范例,一個簡單的加減法程序,匯編語言程序設(shè)計 - 朱明,19,exit語句將間接調(diào)用irvine32函數(shù)庫中的一個函數(shù)終止程序 ENDP偽指令用來標記過程的結(jié)束 END偽指令用來標示程序的結(jié)束,即當(dāng)前行是有效程序的最后一行,匯編代碼,匯編程序的代碼風(fēng)格,匯編語言程序設(shè)計 - 朱明,20,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,TITLE,.code,mov,eax,DumpRegs,Section 3,匯編程序,有關(guān)匯編語言的段: 匯編語言程序以段作為組織結(jié)構(gòu)(前面所講過的代碼段、數(shù)據(jù)段以及堆棧段) 代碼段:存放至少一個過程,并且必須有一個啟動過程 啟動過程:啟動過程即為特殊的標號,用來標示整個代碼段的開始,匯編器能夠自動識別該標號,并從該標號處開始支持程序,通常該標號為“start”或“main”,并對應(yīng)有該過程的結(jié)束偽指令 數(shù)據(jù)段:存放變量 堆棧段:存放子程序的參數(shù)和局部變量 匯編時將每一個段生成對應(yīng)的代碼段和數(shù)據(jù)段(目標文件),在連接時將所有的所有的代碼段生成一個代碼段,數(shù)據(jù)段整合成一個數(shù)據(jù)段,匯編語言程序設(shè)計 - 朱明,21,Section 3,程序執(zhí)行,參考匯編語言課程系統(tǒng)環(huán)境設(shè)置說明 程序文件: Sect2_P22.asm 直接使用工程模板,替換工程中的源文件 運行結(jié)果如下: 匯編語言工程的簡單單步運行和觀察調(diào)試(F10),匯編語言程序設(shè)計 - 朱明,22,Section 4,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計 - 朱明,23,匯編源代碼 .asm,目標文件 .obj,可執(zhí)行文件 .exe或.com,匯編器,鏈接器,Section 4,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計 - 朱明,24,Section 4,使用文本編輯器創(chuàng)建源文件,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計 - 朱明,25,Section 4,匯編器讀取源文件生成目標文件,還可以生成列表文件,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計 - 朱明,26,Section 4,鏈接器判斷并從庫中復(fù)制所需要的過程,同目標文件合并在一起生成可執(zhí)行文件,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計 - 朱明,27,Section 4,操作系統(tǒng)將可執(zhí)行文件裝入內(nèi)存并從程序起始地址執(zhí)行,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,匯編語言的源代碼是不能夠直接被執(zhí)行的 列表文件、映像文件、程序數(shù)據(jù)庫文件的輸出需要在工程屬性中進行設(shè)置,數(shù)據(jù)庫文件,映像文件,列表文件,程序執(zhí)行,匯編語言程序設(shè)計 - 朱明,28,源代碼,Section 4,文本 編輯器,目標文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,輸出,鏈接器,系統(tǒng) 裝載器,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 5,程序改進,如何改進的加減法程序,匯編語言程序設(shè)計 - 朱明,29,該程序中直接使用了立即數(shù),10000h,val1,匯編數(shù)據(jù)類型,MASM的內(nèi)部數(shù)據(jù)類型:,匯編語言程序設(shè)計 - 朱明,30,Section 5,匯編數(shù)據(jù)定義,匯編語言的數(shù)據(jù)定義格式: 數(shù)據(jù)類型同時也是數(shù)據(jù)定義的偽指令 數(shù)據(jù)的初始值: 至少有一個確定的初始值,或者使用“?”以不給變量分配初始值 如果有超過一個的初始值 ,初始值之間用“,”分隔 傳統(tǒng)匯編語言每行一條指令,匯編語言程序設(shè)計 - 朱明,31,名稱,數(shù)據(jù)定義偽指令,初始值,初始值,Section 5,value2 SBYTE -128 word1 WORD 65535, 54321,1,匯編數(shù)據(jù)定義,多個初始值的定義方式 MASM允許使用行延續(xù)符號“” 行延續(xù)符號只能在每行最后,匯編語言程序設(shè)計 - 朱明,32,Section 5,.data lists BYTE 10, 20 BYTE 30, 40 WORD 50, 60,10,20,30,40,50,60,value offset,0000h,0001h,0003h,0002h,0004h,0006h,匯編數(shù)據(jù)定義,重復(fù)初始值的定義方式 定義字符串 一般的字符串應(yīng)當(dāng)以空字符結(jié)尾 字符串中可能經(jīng)常用到0Dh和0Ah,分別表示回車和換行的操作,匯編語言程序設(shè)計 - 朱明,33,Section 5,value2 BYTE 20 DUP(0) BYTE 20 DUP(?) BYTE 3 DUP(“STACK”),strings1 BYTE “hello world”,0,strings2 BYTE h,e,l, ,存儲數(shù)據(jù)DWORD:12345678h 數(shù)據(jù)的高位存儲在什么樣的地址單元中的區(qū)別 小尾順序使用的更為廣泛,數(shù)據(jù)存儲順序,匯編語言程序設(shè)計 - 朱明,34,Section 5,78,56,34,12,0001h,0000h,0002h,0003h,小尾順序 little endian,12,34,56,78,0001h,0000h,0002h,0003h,大尾順序 big endian,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .code main PROC mov eax,10000h ;eax add eax,40000h ;add sub eax,20000h ;sub call DumpRegs exit main ENDP END main,Section 5,程序改進,如何改進的加減法程序:增加變量,匯編語言程序設(shè)計 - 朱明,35,val1,val2,+,-,val3,=,finalVal,如何改進的加減法程序:增加變量,TITLE add and subtract ; This is a example, 32-bit integers INCLUDE irvine32.inc .data val1 DWORD 10000h val2 DWORD 40000h val3 DWORD 20000h finalVal DWORD ? .code main PROC mov eax,val1 ;eax add eax,val2 ;add sub eax,val3 ;sub mov finalVal,eax call DumpRegs exit main ENDP END main,Section 5,程序改進,匯編語言程序設(shè)計 - 朱明,36,val1,val2,+,-,val3,=,finalVal,變量初始化,前面的程序中使用了如下的方式聲明了變量 .data用于定義已經(jīng)初始化的數(shù)據(jù)段的開始(_data) .data?用于定義未初始化的數(shù)據(jù)段的開始(_BSS) 在定義大塊的未初始化數(shù)據(jù)時,可以減小編譯后的程
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代管理學(xué)價值觀試題及答案
- 行政管理在應(yīng)急管理中的角色試題及答案
- 建筑企業(yè)中標合同范本
- 2025年學(xué)校餐飲服務(wù)合同簡易版樣本
- 公文寫作實戰(zhàn)練習(xí)試題及答案
- 建筑材料的質(zhì)量檢驗方法試題及答案
- 2025商業(yè)銀行個人存款(國債)質(zhì)押借款合同
- 2025大連市建筑材料采購合同書
- 行政管理基礎(chǔ)課程的必修知識與試題及答案
- 2025年農(nóng)業(yè)租賃合同協(xié)議
- 中國成人呼吸系統(tǒng)疾病家庭氧療指南(2024年)解讀課件
- 電站運行考試題及答案
- 下肢動脈疾病PAD課件
- 2025至2030中國轉(zhuǎn)運呼吸機行業(yè)應(yīng)用前景與投資價值評估報告
- 2025-2030中國靜脈曲張治療行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- ktv陪酒合同協(xié)議
- 上海嘉定區(qū)2025年公開招聘農(nóng)村(村務(wù))工作者筆試題帶答案分析
- 皮膚科臨床診療規(guī)范2020版
- 保密警示教育典型泄密案例教育學(xué)習(xí)
- 2025年注冊會計師《會計》所得稅會計模擬試題解析與答題技巧
- 封隔器加工合同協(xié)議
評論
0/150
提交評論