




已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
匯編語言程序設(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替換算法能夠提高命中率,那么請(qǐng)說出三種目前的替換算法? IA-32指令執(zhí)行的五個(gè)步驟是什么?哪三個(gè)是必須的?,匯編語言程序設(shè)計(jì) - 朱明,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ù)分別是多少? 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 各類長(zhǎng)度有符號(hào)和無符號(hào)整數(shù)的范圍是多少? 無符號(hào):8位028-1,16位0216-1,32位0232-1 有符號(hào):有符號(hào)整數(shù)的最高位為符號(hào)位,若為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ù)的表示方法,我們需要先回答以下的幾個(gè)問題: 計(jì)算機(jī)中經(jīng)常的字符集都有哪些? ASCII:美國(guó)標(biāo)準(zhǔn)信息交換碼,7位+1位 Unicode:UTF-8,UTF-16,UTF-32 UTF-8保留了ASCII字符的編碼 國(guó)際編碼,通用性強(qiáng):英文8位,中文24位 UTF-16是Unicode的最初設(shè)計(jì)目標(biāo),也是默認(rèn)的Unicode GB2312:基于區(qū)位碼的16位漢字編碼 編碼范圍:0xA1A1 - 0x7E7E GBK:向下兼容GB2312,包括所有CJK漢字 GB18030:向下兼容GBK和GB2312,目前在文字符號(hào)方面收錄較全的編碼。,5,匯編語言程序設(shè)計(jì) - 朱明,Section 1,數(shù)據(jù)的表示方法,ASCII字符串:一個(gè)或多個(gè)字符的序列 “ABC123”、ABC123 41h,42h,43h,31h,32h,33h,空字符結(jié)尾 ASCII控制字符,部分:,匯編語言程序設(shè)計(jì) - 朱明,6,Section 1,匯編語言的保留字,MASM環(huán)境中,有一些字符具有特殊的含義: 指令的助記符,對(duì)于MASM來說 ADD、CALL、CMP、DEC、INC、JMP、MOV等 偽指令,用于程序的編譯設(shè)置 PROC、.MMX、.DATA、.DATA?、.CODE等 屬性,用于定義變量和操作數(shù)信息 BYTE、WORD、QWORD等 屬性也同屬于MASM的偽指令內(nèi)容 預(yù)定義符號(hào) data、stack、$、Time、Version等 更多的保留字會(huì)在后面的課程中接觸到,匯編語言程序設(shè)計(jì) - 朱明,7,Section 2,匯編語言的標(biāo)識(shí)符,MASM環(huán)境的標(biāo)識(shí)符可以類比為C語言中的變量或函數(shù),在匯編語言中使用標(biāo)識(shí)符來標(biāo)識(shí)程序中的變量、常量、過程或代碼的標(biāo)號(hào) 標(biāo)識(shí)符由1127個(gè)字符組成 標(biāo)識(shí)符默認(rèn)大小寫不敏感 可以在匯編時(shí)通過“-cP”選項(xiàng)設(shè)置標(biāo)識(shí)符的大小寫敏感 標(biāo)識(shí)符必須不是任何保留字 對(duì)標(biāo)識(shí)符首字符的要求 AZ、az、_、?、$ 盡量避免使用作為首字符,匯編語言程序設(shè)計(jì) - 朱明,8,Section 2,匯編語言的偽指令,偽指令在程序運(yùn)行時(shí)并不執(zhí)行 匯編語言中由匯編器識(shí)別并執(zhí)行相應(yīng)的動(dòng)作 在C語言中,宏定義由什么來識(shí)別并處理? 匯編語言的偽指令可以用于定義變量、宏、過程、段的命名以及其他的匯編器相關(guān)設(shè)置 偽指令大小寫是不敏感的 變量的定義要使用偽指令,匯編語言程序設(shè)計(jì) - 朱明,9,num DWORD 100,list BYTE 10, 20, 30, 40 BYTE “Good night”, 0 BYTE 0Ah, A, 22h,Section 2,匯編語言的指令,匯編指令的基本構(gòu)成: 標(biāo)號(hào)(可選) 數(shù)據(jù)標(biāo)號(hào):數(shù)據(jù)標(biāo)號(hào)標(biāo)識(shí)了變量的地址 代碼標(biāo)號(hào):代碼標(biāo)號(hào),通常用于跳轉(zhuǎn)和循環(huán)的目標(biāo)地址,匯編語言程序設(shè)計(jì) - 朱明,10,指令助記符,操作數(shù),;注釋,num DWORD 100,loop: mov eax,12 . jmp loop,Section 2,標(biāo)號(hào):,匯編語言的指令,匯編指令的基本構(gòu)成: 指令助記符 助記符是一個(gè)簡(jiǎn)單短的、能夠被匯編器識(shí)別的單詞 mov ,將一個(gè)值賦值到另外一個(gè)寄存器或變量中 add,加法操作 sub,減法操作 mul,乘法操作 jmp,跳轉(zhuǎn)到一個(gè)新地址執(zhí)行指令 call,調(diào)用一個(gè)過程,匯編語言程序設(shè)計(jì) - 朱明,11,標(biāo)號(hào):,指令助記符,操作數(shù),;注釋,Section 2,mov eax,3,匯編語言的指令,匯編指令的基本構(gòu)成: 操作數(shù) 匯編語言的操作數(shù)依匯編指令而定,一般是03個(gè) 操作數(shù)可以是寄存器、立即數(shù)或內(nèi)存地址(標(biāo)號(hào))等 無操作數(shù): 單操作數(shù): 雙操作數(shù):,匯編語言程序設(shè)計(jì) - 朱明,12,標(biāo)號(hào):,指令助記符,操作數(shù),;注釋,Section 2,nop,inc eax,匯編指令的基本構(gòu)成: 注釋 注釋就是用自然語言描述程序以實(shí)現(xiàn)方便閱讀等功能 匯編語言中有幾種方式能夠?qū)崿F(xiàn)注釋的功能,比如 單行注釋: 塊注釋:,COMMENT = 這是多行注釋 =,匯編語言的指令,匯編語言程序設(shè)計(jì) - 朱明,13,標(biāo)號(hào):,指令助記符,操作數(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,程序范例,一個(gè)簡(jiǎn)單的加減法程序,匯編語言程序設(shè)計(jì) - 朱明,14,TITLE偽指令,定義列表文件標(biāo)題 可以將整行標(biāo)記為注釋 分號(hào)右邊的內(nèi)容將作為本行的注釋 注釋的內(nèi)容默認(rèn)會(huì)被編譯器忽略,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,程序范例,一個(gè)簡(jiǎn)單的加減法程序,匯編語言程序設(shè)計(jì) - 朱明,15,INCLUDE偽指令 匯編時(shí)將從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,程序范例,一個(gè)簡(jiǎn)單的加減法程序,匯編語言程序設(shè)計(jì) - 朱明,16,.code偽指令 標(biāo)記代碼段的開始,代碼段中存放程序中的所有可執(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,程序范例,一個(gè)簡(jiǎn)單的加減法程序,匯編語言程序設(shè)計(jì) - 朱明,17,PROC偽指令 用于表示一個(gè)過程的開始,程序中的該過程被命名為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,程序范例,一個(gè)簡(jiǎn)單的加減法程序,匯編語言程序設(shè)計(jì) - 朱明,18,call可以用來調(diào)用另外一個(gè)過程 DumpRegs過程是一個(gè)可以顯示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,程序范例,一個(gè)簡(jiǎn)單的加減法程序,匯編語言程序設(shè)計(jì) - 朱明,19,exit語句將間接調(diào)用irvine32函數(shù)庫中的一個(gè)函數(shù)終止程序 ENDP偽指令用來標(biāo)記過程的結(jié)束 END偽指令用來標(biāo)示程序的結(jié)束,即當(dāng)前行是有效程序的最后一行,匯編代碼,匯編程序的代碼風(fēng)格,匯編語言程序設(shè)計(jì) - 朱明,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ù)段以及堆棧段) 代碼段:存放至少一個(gè)過程,并且必須有一個(gè)啟動(dòng)過程 啟動(dòng)過程:?jiǎn)?dòng)過程即為特殊的標(biāo)號(hào),用來標(biāo)示整個(gè)代碼段的開始,匯編器能夠自動(dòng)識(shí)別該標(biāo)號(hào),并從該標(biāo)號(hào)處開始支持程序,通常該標(biāo)號(hào)為“start”或“main”,并對(duì)應(yīng)有該過程的結(jié)束偽指令 數(shù)據(jù)段:存放變量 堆棧段:存放子程序的參數(shù)和局部變量 匯編時(shí)將每一個(gè)段生成對(duì)應(yīng)的代碼段和數(shù)據(jù)段(目標(biāo)文件),在連接時(shí)將所有的所有的代碼段生成一個(gè)代碼段,數(shù)據(jù)段整合成一個(gè)數(shù)據(jù)段,匯編語言程序設(shè)計(jì) - 朱明,21,Section 3,程序執(zhí)行,參考匯編語言課程系統(tǒng)環(huán)境設(shè)置說明 程序文件: Sect2_P22.asm 直接使用工程模板,替換工程中的源文件 運(yùn)行結(jié)果如下: 匯編語言工程的簡(jiǎn)單單步運(yùn)行和觀察調(diào)試(F10),匯編語言程序設(shè)計(jì) - 朱明,22,Section 4,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計(jì) - 朱明,23,匯編源代碼 .asm,目標(biāo)文件 .obj,可執(zhí)行文件 .exe或.com,匯編器,鏈接器,Section 4,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計(jì) - 朱明,24,Section 4,使用文本編輯器創(chuàng)建源文件,源代碼,文本 編輯器,目標(biāo)文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計(jì) - 朱明,25,Section 4,匯編器讀取源文件生成目標(biāo)文件,還可以生成列表文件,源代碼,文本 編輯器,目標(biāo)文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計(jì) - 朱明,26,Section 4,鏈接器判斷并從庫中復(fù)制所需要的過程,同目標(biāo)文件合并在一起生成可執(zhí)行文件,源代碼,文本 編輯器,目標(biāo)文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設(shè)計(jì) - 朱明,27,Section 4,操作系統(tǒng)將可執(zhí)行文件裝入內(nèi)存并從程序起始地址執(zhí)行,源代碼,文本 編輯器,目標(biāo)文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,匯編語言的源代碼是不能夠直接被執(zhí)行的 列表文件、映像文件、程序數(shù)據(jù)庫文件的輸出需要在工程屬性中進(jìn)行設(shè)置,數(shù)據(jù)庫文件,映像文件,列表文件,程序執(zhí)行,匯編語言程序設(shè)計(jì) - 朱明,28,源代碼,Section 4,文本 編輯器,目標(biāo)文件,匯編 編譯器,鏈接庫,可執(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,程序改進(jìn),如何改進(jìn)的加減法程序,匯編語言程序設(shè)計(jì) - 朱明,29,該程序中直接使用了立即數(shù),10000h,val1,匯編數(shù)據(jù)類型,MASM的內(nèi)部數(shù)據(jù)類型:,匯編語言程序設(shè)計(jì) - 朱明,30,Section 5,匯編數(shù)據(jù)定義,匯編語言的數(shù)據(jù)定義格式: 數(shù)據(jù)類型同時(shí)也是數(shù)據(jù)定義的偽指令 數(shù)據(jù)的初始值: 至少有一個(gè)確定的初始值,或者使用“?”以不給變量分配初始值 如果有超過一個(gè)的初始值 ,初始值之間用“,”分隔 傳統(tǒng)匯編語言每行一條指令,匯編語言程序設(shè)計(jì) - 朱明,31,名稱,數(shù)據(jù)定義偽指令,初始值,初始值,Section 5,value2 SBYTE -128 word1 WORD 65535, 54321,1,匯編數(shù)據(jù)定義,多個(gè)初始值的定義方式 MASM允許使用行延續(xù)符號(hào)“” 行延續(xù)符號(hào)只能在每行最后,匯編語言程序設(shè)計(jì) - 朱明,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è)計(jì) - 朱明,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, ,存儲(chǔ)數(shù)據(jù)DWORD:12345678h 數(shù)據(jù)的高位存儲(chǔ)在什么樣的地址單元中的區(qū)別 小尾順序使用的更為廣泛,數(shù)據(jù)存儲(chǔ)順序,匯編語言程序設(shè)計(jì) - 朱明,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,程序改進(jìn),如何改進(jìn)的加減法程序:增加變量,匯編語言程序設(shè)計(jì) - 朱明,35,val1,val2,+,-,val3,=,finalVal,如何改進(jìn)的加減法程序:增加變量,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,程序改進(jìn),匯編語言程序設(shè)計(jì) - 朱明,36,val1,val2,+,-,val3,=,finalVal,變量初始化,前面的程序中使用了如下的方式聲明了變量 .data用于定義已經(jīng)初始化的數(shù)據(jù)段的開始(_data) .data?用于定義未初始化的數(shù)據(jù)段的開始(_BSS) 在定義大塊的未初始化數(shù)據(jù)時(shí),可以減小編譯后的程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手房買賣合同違約責(zé)任追究協(xié)議
- 財(cái)務(wù)報(bào)表風(fēng)險(xiǎn)敞口應(yīng)對(duì)效果評(píng)估合同
- 材料疲勞斷裂數(shù)據(jù)校正合同
- 生態(tài)農(nóng)業(yè)園區(qū)場(chǎng)地合作經(jīng)營(yíng)與產(chǎn)品銷售協(xié)議
- 邊疆地區(qū)古代商業(yè)貿(mào)易考古合同
- 高端裝備制造廠房租賃與智能化改造協(xié)議
- 大學(xué)刑法考試題及答案
- 群體健康策略課件
- 調(diào)研安全生產(chǎn)工作方案
- 安全總監(jiān)個(gè)人述職報(bào)告3
- 2024年廣東省中考物理試卷(含答案逐題解析)
- 武術(shù)專業(yè)個(gè)人簡(jiǎn)歷模板范文
- LD水電站智慧工程建設(shè)方案研究
- DB37-T 4384-2021 混凝土橋梁有效預(yù)應(yīng)力無損檢測(cè)技術(shù)規(guī)程
- 竣工財(cái)務(wù)決算報(bào)表模板
- 2021利達(dá)JB-QG-LD988EL JB-QT-LD988EL 火災(zāi)報(bào)警控制器 消防聯(lián)動(dòng)控制器調(diào)試手冊(cè)
- 2024年中鐵(天津)軌道交通投資建設(shè)限公司運(yùn)營(yíng)管理人員招聘5人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 創(chuàng)傷中心匯報(bào)
- 裝配式結(jié)構(gòu)吊裝施工計(jì)算書
- 2024安徽蕪湖市中江城建集團(tuán)限公司下屬子公司社會(huì)招聘60人公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 放射科疑難病例分析討論記錄
評(píng)論
0/150
提交評(píng)論