




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、匯編語言程序設(shè)計(jì)_02_數(shù)據(jù)表示與匯編語言基礎(chǔ)大連理工大學(xué)軟件學(xué)院_朱明2009年5月31日_ V1.1第一章提問 IA-32內(nèi)部有8個(gè)32位寄存器,如EAX、EBX等,當(dāng)要將EAX和EBX作為16位寄存器和8位寄存器使用的時(shí)候,他們的名字分別是什么? EFLAGS中的與算術(shù)運(yùn)算最相關(guān)的標(biāo)志位的名稱和功能分別是什么? IA-32的三種基本運(yùn)行模式是什么? 為了減小CPU與內(nèi)存之間交換數(shù)據(jù)的等待時(shí)間,在CPU與內(nèi)存之間增加了緩存(cache)。一個(gè)好的cache替換算法能夠提高命中率,那么請說出三種目前的替換算法? IA-32指令執(zhí)行的五個(gè)步驟是什么?哪三個(gè)是必須的?匯編語言程序設(shè)計(jì) - 朱明2
2、數(shù)據(jù)的表示方法 我們需要先回答以下的幾個(gè)問題: 什么是進(jìn)制?他與計(jì)數(shù)之間有什么關(guān)系?如何進(jìn)行任意進(jìn)制數(shù)的加法和減法運(yùn)算? “逢X進(jìn)1”,不允許出現(xiàn)比X大的單位數(shù)字出現(xiàn) 加大了就向高位進(jìn)位,減小了就從高位借位 計(jì)算機(jī)系統(tǒng)中常見的進(jìn)制都有哪些? 二進(jìn)制,逢2進(jìn)1,有0、1 十進(jìn)制,逢10進(jìn)1,有09 十六進(jìn)制,逢16進(jìn)1,有09、AF 計(jì)算機(jī)的內(nèi)存系統(tǒng)中,每一個(gè)位保存的是哪種進(jìn)制的數(shù)?MSB和LSB分別表示什么含義? 二進(jìn)制數(shù),只有0和1兩個(gè)數(shù)字 MSB最高有效位,LSB最低有效位3匯編語言程序設(shè)計(jì) - 朱明Section 1數(shù)據(jù)的表示方法 我們需要先回答以下的幾個(gè)問題: 字節(jié)、字、雙字的位數(shù)分別
3、是多少? 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則表示是負(fù)數(shù):8位-2727-1,16位-215215-1 ,32位-231231-1 任意進(jìn)制如何裝換到10進(jìn)制? DEC=+(D1*X1)+(D0*X0)4匯編語言程序設(shè)計(jì) - 朱明Section 1數(shù)據(jù)的表示方法
4、我們需要先回答以下的幾個(gè)問題: 計(jì)算機(jī)中經(jīng)常的字符集都有哪些? ASCII:美國標(biāo)準(zhǔn)信息交換碼,7位+1位 Unicode:UTF-8,UTF-16,UTF-32 UTF-8保留了ASCII字符的編碼 國際編碼,通用性強(qiáng):英文8位,中文24位 UTF-16是Unicode的最初設(shè)計(jì)目標(biāo),也是默認(rèn)的Unicode GB2312:基于區(qū)位碼的16位漢字編碼 編碼范圍:0 xA1A1 - 0 x7E7E GBK:向下兼容GB2312,包括所有CJK漢字 GB18030:向下兼容GBK和GB2312,目前在文字符號方面收錄較全的編碼。5匯編語言程序設(shè)計(jì) - 朱明Section 1數(shù)據(jù)的表示方法 ASC
5、II字符串:一個(gè)或多個(gè)字符的序列 “ABC123”、ABC123 41h,42h,43h,31h,32h,33h,空字符結(jié)尾 ASCII控制字符,部分:匯編語言程序設(shè)計(jì) - 朱明6ASCII控制字符描述0NULL,空字符8BackSpace,退格9Tab,水平制表符10NextLine,換行13Enter,回車,移動到最左列Section 1匯編語言的保留字 MASM環(huán)境中,有一些字符具有特殊的含義: 指令的助記符,對于MASM來說 ADD、CALL、CMP、DEC、INC、JMP、MOV等 偽指令,用于程序的編譯設(shè)置 PROC、.MMX、.DATA、.DATA?、.CODE等 屬性,用于定義
6、變量和操作數(shù)信息 BYTE、WORD、QWORD等 屬性也同屬于MASM的偽指令內(nèi)容 預(yù)定義符號data、stack、$、Time、Version等 更多的保留字會在后面的課程中接觸到匯編語言程序設(shè)計(jì) - 朱明7Section 2匯編語言的標(biāo)識符 MASM環(huán)境的標(biāo)識符可以類比為C語言中的變量或函數(shù),在匯編語言中使用標(biāo)識符來標(biāo)識程序中的變量、常量、過程或代碼的標(biāo)號 標(biāo)識符由1127個(gè)字符組成 標(biāo)識符默認(rèn)大小寫不敏感 可以在匯編時(shí)通過“-cP”選項(xiàng)設(shè)置標(biāo)識符的大小寫敏感 標(biāo)識符必須不是任何保留字 對標(biāo)識符首字符的要求 AZ、az、_、?、$ 盡量避免使用作為首字符匯編語言程序設(shè)計(jì) - 朱明8Sec
7、tion 2匯編語言的偽指令 偽指令在程序運(yùn)行時(shí)并不執(zhí)行 匯編語言中由匯編器識別并執(zhí)行相應(yīng)的動作 在C語言中,宏定義由什么來識別并處理? 匯編語言的偽指令可以用于定義變量、宏、過程、段的命名以及其他的匯編器相關(guān)設(shè)置 偽指令大小寫是不敏感的 變量的定義要使用偽指令匯編語言程序設(shè)計(jì) - 朱明9numDWORD100listBYTE10, 20, 30, 40BYTE“Good night”, 0BYTE0Ah, A, 22h Section 2匯編語言的指令 匯編指令的基本構(gòu)成: 標(biāo)號(可選) 數(shù)據(jù)標(biāo)號:數(shù)據(jù)標(biāo)號標(biāo)識了變量的地址 代碼標(biāo)號:代碼標(biāo)號,通常用于跳轉(zhuǎn)和循環(huán)的目標(biāo)地址匯編語言程序設(shè)計(jì) -
8、 朱明10指令助記符操作數(shù);注釋numDWORD100loop:mov eax,12.jmploopSection 2標(biāo)號:匯編語言的指令 匯編指令的基本構(gòu)成: 指令助記符 助記符是一個(gè)簡單短的、能夠被匯編器識別的單詞 mov,將一個(gè)值賦值到另外一個(gè)寄存器或變量中 add,加法操作 sub,減法操作 mul,乘法操作 jmp,跳轉(zhuǎn)到一個(gè)新地址執(zhí)行指令 call,調(diào)用一個(gè)過程匯編語言程序設(shè)計(jì) - 朱明11標(biāo)號:指令助記符操作數(shù);注釋Section 2moveax,3匯編語言的指令 匯編指令的基本構(gòu)成: 操作數(shù) 匯編語言的操作數(shù)依匯編指令而定,一般是03個(gè) 操作數(shù)可以是寄存器、立即數(shù)或內(nèi)存地址(標(biāo)
9、號)等 無操作數(shù): 單操作數(shù): 雙操作數(shù):匯編語言程序設(shè)計(jì) - 朱明12標(biāo)號:指令助記符操作數(shù);注釋Section 2nopinceax 匯編指令的基本構(gòu)成: 注釋 注釋就是用自然語言描述程序以實(shí)現(xiàn)方便閱讀等功能 匯編語言中有幾種方式能夠?qū)崿F(xiàn)注釋的功能,比如單行注釋: 塊注釋:COMMENT =這是多行注釋=匯編語言的指令匯編語言程序設(shè)計(jì) - 朱明13標(biāo)號:指令助記符操作數(shù);注釋Section 2;這是一行注釋TITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmove
10、ax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexitmainENDPENDmainSection 3程序范例 一個(gè)簡單的加減法程序匯編語言程序設(shè)計(jì) - 朱明14TITLE偽指令,定義列表文件標(biāo)題可以將整行標(biāo)記為注釋分號右邊的內(nèi)容將作為本行的注釋注釋的內(nèi)容默認(rèn)會被編譯器忽略TITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsube
11、ax,20000h;subcallDumpRegsexitmainENDPENDmainSection 3程序范例 一個(gè)簡單的加減法程序匯編語言程序設(shè)計(jì) - 朱明15INCLUDE偽指令匯編時(shí)將從irvine32.inc文件中復(fù)制必要的定義信息和設(shè)置信息INCLUDE的目錄在環(huán)境中已經(jīng)設(shè)置TITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexi
12、tmainENDPENDmainSection 3程序范例 一個(gè)簡單的加減法程序匯編語言程序設(shè)計(jì) - 朱明16.code偽指令標(biāo)記代碼段的開始,代碼段中存放程序中的所有可執(zhí)行語句TITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexitmainENDPENDmainSection 3程序范例 一個(gè)簡單的加減法程序匯編語言程序設(shè)計(jì) - 朱明17P
13、ROC偽指令用于表示一個(gè)過程的開始,程序中的該過程被命名為mainTITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexitmainENDPENDmainSection 3程序范例 一個(gè)簡單的加減法程序匯編語言程序設(shè)計(jì) - 朱明18call可以用來調(diào)用另外一個(gè)過程DumpRegs過程是一個(gè)可以顯示CPU內(nèi)部所有寄存器的值的過程TITLEadd
14、and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexitmainENDPENDmainSection 3程序范例 一個(gè)簡單的加減法程序匯編語言程序設(shè)計(jì) - 朱明19exit語句將間接調(diào)用irvine32函數(shù)庫中的一個(gè)函數(shù)終止程序ENDP偽指令用來標(biāo)記過程的結(jié)束END偽指令用來標(biāo)示程序的結(jié)束,即當(dāng)前行是有效程序的最后一行匯編代碼 匯編程序的代碼風(fēng)格匯編語言程序設(shè)
15、計(jì) - 朱明20TITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexitmainENDPENDmainTITLE.codemoveaxDumpRegsSection 3匯編程序 有關(guān)匯編語言的段: 匯編語言程序以段作為組織結(jié)構(gòu)(前面所講過的代碼段、數(shù)據(jù)段以及堆棧段) 代碼段:存放至少一個(gè)過程,并且必須有一個(gè)啟動過程 啟動過程:啟動過程即為特殊
16、的標(biāo)號,用來標(biāo)示整個(gè)代碼段的開始,匯編器能夠自動識別該標(biāo)號,并從該標(biāo)號處開始支持程序,通常該標(biāo)號為“start”或“main”,并對應(yīng)有該過程的結(jié)束偽指令 數(shù)據(jù)段:存放變量 堆棧段:存放子程序的參數(shù)和局部變量 匯編時(shí)將每一個(gè)段生成對應(yīng)的代碼段和數(shù)據(jù)段(目標(biāo)文件),在連接時(shí)將所有的所有的代碼段生成一個(gè)代碼段,數(shù)據(jù)段整合成一個(gè)數(shù)據(jù)段匯編語言程序設(shè)計(jì) - 朱明21Section 3程序執(zhí)行 參考匯編語言課程系統(tǒng)環(huán)境設(shè)置說明 程序文件: Sect2_P22.asm 直接使用工程模板,替換工程中的源文件 運(yùn)行結(jié)果如下: 匯編語言工程的簡單單步運(yùn)行和觀察調(diào)試(F10)匯編語言程序設(shè)計(jì) - 朱明22Sect
17、ion 4程序執(zhí)行 匯編語言的源代碼是不能夠直接被執(zhí)行的匯編語言程序設(shè)計(jì) - 朱明23匯編源代碼 .asm目標(biāo)文件 .obj可執(zhí)行文件.exe或.com匯編器鏈接器Section 4程序執(zhí)行 匯編語言的源代碼是不能夠直接被執(zhí)行的匯編語言程序設(shè)計(jì) - 朱明24Section 4使用文本編輯器創(chuàng)建源文件源代碼 文本編輯器 目標(biāo)文件 列表文件 匯編編譯器 鏈接庫可執(zhí)行文件 映像文件 輸出鏈接器 系統(tǒng) 裝載器數(shù)據(jù)庫文件 程序執(zhí)行 匯編語言的源代碼是不能夠直接被執(zhí)行的匯編語言程序設(shè)計(jì) - 朱明25Section 4匯編器讀取源文件生成目標(biāo)文件,還可以生成列表文件源代碼 文本編輯器 目標(biāo)文件 列表文件 匯
18、編編譯器 鏈接庫可執(zhí)行文件 映像文件 輸出鏈接器 系統(tǒng) 裝載器數(shù)據(jù)庫文件 程序執(zhí)行 匯編語言的源代碼是不能夠直接被執(zhí)行的匯編語言程序設(shè)計(jì) - 朱明26Section 4鏈接器判斷并從庫中復(fù)制所需要的過程,同目標(biāo)文件合并在一起生成可執(zhí)行文件源代碼 文本編輯器 目標(biāo)文件 列表文件 匯編編譯器 鏈接庫可執(zhí)行文件 映像文件 輸出鏈接器 系統(tǒng) 裝載器數(shù)據(jù)庫文件 程序執(zhí)行 匯編語言的源代碼是不能夠直接被執(zhí)行的匯編語言程序設(shè)計(jì) - 朱明27Section 4操作系統(tǒng)將可執(zhí)行文件裝入內(nèi)存并從程序起始地址執(zhí)行源代碼 文本編輯器 目標(biāo)文件 列表文件 匯編編譯器 鏈接庫可執(zhí)行文件 映像文件 輸出鏈接器 系統(tǒng) 裝載器
19、數(shù)據(jù)庫文件 匯編語言的源代碼是不能夠直接被執(zhí)行的 列表文件、映像文件、程序數(shù)據(jù)庫文件的輸出需要在工程屬性中進(jìn)行設(shè)置數(shù)據(jù)庫文件 映像文件 列表文件 程序執(zhí)行匯編語言程序設(shè)計(jì) - 朱明28源代碼 Section 4文本編輯器 目標(biāo)文件 匯編編譯器 鏈接庫可執(zhí)行文件 輸出鏈接器 系統(tǒng) 裝載器TITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexitm
20、ainENDPENDmainSection 5程序改進(jìn) 如何改進(jìn)的加減法程序匯編語言程序設(shè)計(jì) - 朱明29該程序中直接使用了立即數(shù)10000hval1類型描述BYTE8位無符號整數(shù)(SBYTE位有符號)WORD16位無符號整數(shù)(SWORD位有符號)DWORD32位無符號整數(shù)(SDWORD位有符號)FWORD48位整數(shù)QWORD64位整數(shù)TBYTE80位整數(shù)REAL432位IEEE段實(shí)數(shù)REAL864位IEEE長實(shí)數(shù)REAL1080位IEEE擴(kuò)展精度實(shí)數(shù)匯編數(shù)據(jù)類型 MASM的內(nèi)部數(shù)據(jù)類型:匯編語言程序設(shè)計(jì) - 朱明30Section 5匯編數(shù)據(jù)定義 匯編語言的數(shù)據(jù)定義格式: 數(shù)據(jù)類型同時(shí)也是數(shù)
21、據(jù)定義的偽指令 數(shù)據(jù)的初始值: 至少有一個(gè)確定的初始值,或者使用“?”以不給變量分配初始值 如果有超過一個(gè)的初始值 ,初始值之間用“,”分隔 傳統(tǒng)匯編語言每行一條指令匯編語言程序設(shè)計(jì) - 朱明31名稱數(shù)據(jù)定義偽指令初始值,初始值Section 5value2SBYTE-128word1WORD65535, 54321,1匯編數(shù)據(jù)定義 多個(gè)初始值的定義方式 MASM允許使用行延續(xù)符號“” 行延續(xù)符號只能在每行最后匯編語言程序設(shè)計(jì) - 朱明32Section 5.datalistsBYTE10, 20BYTE30, 40WORD 50, 60102030405060value offset0000
22、h0001h0003h0002h0004h0006h匯編數(shù)據(jù)定義 重復(fù)初始值的定義方式 定義字符串 一般的字符串應(yīng)當(dāng)以空字符結(jié)尾 字符串中可能經(jīng)常用到0Dh和0Ah,分別表示回車和換行的操作匯編語言程序設(shè)計(jì) - 朱明33Section 5value2BYTE20 DUP(0)BYTE20 DUP(?)BYTE3 DUP(“STACK”)strings1BYTE“hello world”,0strings2BYTEh,e,l, 存儲數(shù)據(jù)DWORD:12345678h 數(shù)據(jù)的高位存儲在什么樣的地址單元中的區(qū)別 小尾順序使用的更為廣泛數(shù)據(jù)存儲順序匯編語言程序設(shè)計(jì) - 朱明34Section 5785
23、634120001h0000h0002h0003h小尾順序little endian123456780001h0000h0002h0003h大尾順序big endianTITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.codemainPROCmoveax,10000h;eaxaddeax,40000h;addsubeax,20000h;subcallDumpRegsexitmainENDPENDmainSection 5程序改進(jìn) 如何改進(jìn)的加減法程序:增加變量匯編語言程序設(shè)計(jì) - 朱明35v
24、al1val2+-val3=finalVal 如何改進(jìn)的加減法程序:增加變量TITLEadd and subtract; This is a example, 32-bit integersINCLUDEirvine32.inc.dataval1DWORD10000hval2DWORD40000hval3DWORD20000hfinalValDWORD?.codemainPROCmoveax,val1;eaxaddeax,val2;addsubeax,val3;submovfinalVal,eaxcallDumpRegsexitmainENDPENDmainSection 5程序改進(jìn)匯編語言程序設(shè)計(jì) - 朱明36val1val2+-val3=finalVal變量初始化 前面的程序中使用了如下的方式聲明了變量 .data用于定義已經(jīng)初始化的數(shù)據(jù)段的開始(_data) .data?用于定義未初始化的數(shù)據(jù)段的開始(_BSS) 在定義大塊的未初始化數(shù)據(jù)時(shí),可以減
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建立生態(tài)農(nóng)業(yè)保護(hù)合同的補(bǔ)充條款
- 2025年注冊安全工程師培訓(xùn)鑄就專業(yè)安全團(tuán)隊(duì)
- 公共健康知識培訓(xùn)課件
- 2024上海市浦東新區(qū)九年級中考三模英語試卷試題
- 違約協(xié)議書(3篇)
- 財(cái)務(wù)轉(zhuǎn)正述職報(bào)告
- DB31∕T 239-2020 城市公共交通非接觸式集成電路(IC)卡交易終端機(jī)技術(shù)規(guī)范
- 培訓(xùn)資料-潔凈手術(shù)室管理及維護(hù)
- 著作權(quán)知識培訓(xùn)課件
- 股份制改革操作與實(shí)施方案
- 2021中國靜脈血栓栓塞癥防治抗凝藥物的選用與藥學(xué)監(jiān)護(hù)指南(2021版)解讀
- 裝修施工規(guī)定(十四篇)
- 集團(tuán)公司審批權(quán)限表
- SCADA系統(tǒng)操作手冊
- 滲透測試報(bào)告模版
- 老年人預(yù)防及控制養(yǎng)老院院內(nèi)感染院內(nèi)感染基本知識
- GB/T 10060-2023電梯安裝驗(yàn)收規(guī)范
- TB編程從入門到進(jìn)階
- 教師溝通能力提升培訓(xùn)幼兒園家長溝通技巧教學(xué)課件
- 喀喇沁旗樓子店鄉(xiāng)上燒鍋白石礦石灰?guī)r礦2022年度礦山地質(zhì)環(huán)境治理計(jì)劃書
- 第三單元名著導(dǎo)讀《駱駝祥子》課件部編版語文七年級下冊
評論
0/150
提交評論