




已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
匯編語言程序設計,_02_數(shù)據(jù)表示與匯編語言基礎 大連理工大學軟件學院_朱明 2009年5月31日_ V1.1,第一章提問,IA-32內部有8個32位寄存器,如EAX、EBX等,當要將EAX和EBX作為16位寄存器和8位寄存器使用的時候,他們的名字分別是什么? EFLAGS中的與算術運算最相關的標志位的名稱和功能分別是什么? IA-32的三種基本運行模式是什么? 為了減小CPU與內存之間交換數(shù)據(jù)的等待時間,在CPU與內存之間增加了緩存(cache)。一個好的cache替換算法能夠提高命中率,那么請說出三種目前的替換算法? IA-32指令執(zhí)行的五個步驟是什么?哪三個是必須的?,匯編語言程序設計 - 朱明,2,數(shù)據(jù)的表示方法,我們需要先回答以下的幾個問題: 什么是進制?他與計數(shù)之間有什么關系?如何進行任意進制數(shù)的加法和減法運算? “逢X進1”,不允許出現(xiàn)比X大的單位數(shù)字出現(xiàn) 加大了就向高位進位,減小了就從高位借位 計算機系統(tǒng)中常見的進制都有哪些? 二進制,逢2進1,有0、1 十進制,逢10進1,有09 十六進制,逢16進1,有09、AF 計算機的內存系統(tǒng)中,每一個位保存的是哪種進制的數(shù)?MSB和LSB分別表示什么含義? 二進制數(shù),只有0和1兩個數(shù)字 MSB最高有效位,LSB最低有效位,3,匯編語言程序設計 - 朱明,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,匯編語言程序設計 - 朱明,Section 1,數(shù)據(jù)的表示方法,我們需要先回答以下的幾個問題: 計算機中經(jīng)常的字符集都有哪些? ASCII:美國標準信息交換碼,7位+1位 Unicode:UTF-8,UTF-16,UTF-32 UTF-8保留了ASCII字符的編碼 國際編碼,通用性強:英文8位,中文24位 UTF-16是Unicode的最初設計目標,也是默認的Unicode GB2312:基于區(qū)位碼的16位漢字編碼 編碼范圍:0xA1A1 - 0x7E7E GBK:向下兼容GB2312,包括所有CJK漢字 GB18030:向下兼容GBK和GB2312,目前在文字符號方面收錄較全的編碼。,5,匯編語言程序設計 - 朱明,Section 1,數(shù)據(jù)的表示方法,ASCII字符串:一個或多個字符的序列 “ABC123”、ABC123 41h,42h,43h,31h,32h,33h,空字符結尾 ASCII控制字符,部分:,匯編語言程序設計 - 朱明,6,Section 1,匯編語言的保留字,MASM環(huán)境中,有一些字符具有特殊的含義: 指令的助記符,對于MASM來說 ADD、CALL、CMP、DEC、INC、JMP、MOV等 偽指令,用于程序的編譯設置 PROC、.MMX、.DATA、.DATA?、.CODE等 屬性,用于定義變量和操作數(shù)信息 BYTE、WORD、QWORD等 屬性也同屬于MASM的偽指令內容 預定義符號 data、stack、$、Time、Version等 更多的保留字會在后面的課程中接觸到,匯編語言程序設計 - 朱明,7,Section 2,匯編語言的標識符,MASM環(huán)境的標識符可以類比為C語言中的變量或函數(shù),在匯編語言中使用標識符來標識程序中的變量、常量、過程或代碼的標號 標識符由1127個字符組成 標識符默認大小寫不敏感 可以在匯編時通過“-cP”選項設置標識符的大小寫敏感 標識符必須不是任何保留字 對標識符首字符的要求 AZ、az、_、?、$ 盡量避免使用作為首字符,匯編語言程序設計 - 朱明,8,Section 2,匯編語言的偽指令,偽指令在程序運行時并不執(zhí)行 匯編語言中由匯編器識別并執(zhí)行相應的動作 在C語言中,宏定義由什么來識別并處理? 匯編語言的偽指令可以用于定義變量、宏、過程、段的命名以及其他的匯編器相關設置 偽指令大小寫是不敏感的 變量的定義要使用偽指令,匯編語言程序設計 - 朱明,9,num DWORD 100,list BYTE 10, 20, 30, 40 BYTE “Good night”, 0 BYTE 0Ah, A, 22h,Section 2,匯編語言的指令,匯編指令的基本構成: 標號(可選) 數(shù)據(jù)標號:數(shù)據(jù)標號標識了變量的地址 代碼標號:代碼標號,通常用于跳轉和循環(huán)的目標地址,匯編語言程序設計 - 朱明,10,指令助記符,操作數(shù),;注釋,num DWORD 100,loop: mov eax,12 . jmp loop,Section 2,標號:,匯編語言的指令,匯編指令的基本構成: 指令助記符 助記符是一個簡單短的、能夠被匯編器識別的單詞 mov ,將一個值賦值到另外一個寄存器或變量中 add,加法操作 sub,減法操作 mul,乘法操作 jmp,跳轉到一個新地址執(zhí)行指令 call,調用一個過程,匯編語言程序設計 - 朱明,11,標號:,指令助記符,操作數(shù),;注釋,Section 2,mov eax,3,匯編語言的指令,匯編指令的基本構成: 操作數(shù) 匯編語言的操作數(shù)依匯編指令而定,一般是03個 操作數(shù)可以是寄存器、立即數(shù)或內存地址(標號)等 無操作數(shù): 單操作數(shù): 雙操作數(shù):,匯編語言程序設計 - 朱明,12,標號:,指令助記符,操作數(shù),;注釋,Section 2,nop,inc eax,匯編指令的基本構成: 注釋 注釋就是用自然語言描述程序以實現(xiàn)方便閱讀等功能 匯編語言中有幾種方式能夠實現(xiàn)注釋的功能,比如 單行注釋: 塊注釋:,COMMENT = 這是多行注釋 =,匯編語言的指令,匯編語言程序設計 - 朱明,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,程序范例,一個簡單的加減法程序,匯編語言程序設計 - 朱明,14,TITLE偽指令,定義列表文件標題 可以將整行標記為注釋 分號右邊的內容將作為本行的注釋 注釋的內容默認會被編譯器忽略,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,程序范例,一個簡單的加減法程序,匯編語言程序設計 - 朱明,15,INCLUDE偽指令 匯編時將從irvine32.inc文件中復制必要的定義信息和設置信息 INCLUDE的目錄在環(huán)境中已經(jī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 3,程序范例,一個簡單的加減法程序,匯編語言程序設計 - 朱明,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,程序范例,一個簡單的加減法程序,匯編語言程序設計 - 朱明,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,程序范例,一個簡單的加減法程序,匯編語言程序設計 - 朱明,18,call可以用來調用另外一個過程 DumpRegs過程是一個可以顯示CPU內部所有寄存器的值的過程,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,程序范例,一個簡單的加減法程序,匯編語言程序設計 - 朱明,19,exit語句將間接調用irvine32函數(shù)庫中的一個函數(shù)終止程序 ENDP偽指令用來標記過程的結束 END偽指令用來標示程序的結束,即當前行是有效程序的最后一行,匯編代碼,匯編程序的代碼風格,匯編語言程序設計 - 朱明,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,匯編程序,有關匯編語言的段: 匯編語言程序以段作為組織結構(前面所講過的代碼段、數(shù)據(jù)段以及堆棧段) 代碼段:存放至少一個過程,并且必須有一個啟動過程 啟動過程:啟動過程即為特殊的標號,用來標示整個代碼段的開始,匯編器能夠自動識別該標號,并從該標號處開始支持程序,通常該標號為“start”或“main”,并對應有該過程的結束偽指令 數(shù)據(jù)段:存放變量 堆棧段:存放子程序的參數(shù)和局部變量 匯編時將每一個段生成對應的代碼段和數(shù)據(jù)段(目標文件),在連接時將所有的所有的代碼段生成一個代碼段,數(shù)據(jù)段整合成一個數(shù)據(jù)段,匯編語言程序設計 - 朱明,21,Section 3,程序執(zhí)行,參考匯編語言課程系統(tǒng)環(huán)境設置說明 程序文件: Sect2_P22.asm 直接使用工程模板,替換工程中的源文件 運行結果如下: 匯編語言工程的簡單單步運行和觀察調試(F10),匯編語言程序設計 - 朱明,22,Section 4,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設計 - 朱明,23,匯編源代碼 .asm,目標文件 .obj,可執(zhí)行文件 .exe或.com,匯編器,鏈接器,Section 4,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設計 - 朱明,24,Section 4,使用文本編輯器創(chuàng)建源文件,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設計 - 朱明,25,Section 4,匯編器讀取源文件生成目標文件,還可以生成列表文件,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設計 - 朱明,26,Section 4,鏈接器判斷并從庫中復制所需要的過程,同目標文件合并在一起生成可執(zhí)行文件,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,程序執(zhí)行,匯編語言的源代碼是不能夠直接被執(zhí)行的,匯編語言程序設計 - 朱明,27,Section 4,操作系統(tǒng)將可執(zhí)行文件裝入內存并從程序起始地址執(zhí)行,源代碼,文本 編輯器,目標文件,列表文件,匯編 編譯器,鏈接庫,可執(zhí)行文件,映像文件,輸出,鏈接器,系統(tǒng) 裝載器,數(shù)據(jù)庫文件,匯編語言的源代碼是不能夠直接被執(zhí)行的 列表文件、映像文件、程序數(shù)據(jù)庫文件的輸出需要在工程屬性中進行設置,數(shù)據(jù)庫文件,映像文件,列表文件,程序執(zhí)行,匯編語言程序設計 - 朱明,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,程序改進,如何改進的加減法程序,匯編語言程序設計 - 朱明,29,該程序中直接使用了立即數(shù),10000h,val1,匯編數(shù)據(jù)類型,MASM的內部數(shù)據(jù)類型:,匯編語言程序設計 - 朱明,30,Section 5,匯編數(shù)據(jù)定義,匯編語言的數(shù)據(jù)定義格式: 數(shù)據(jù)類型同時也是數(shù)據(jù)定義的偽指令 數(shù)據(jù)的初始值: 至少有一個確定的初始值,或者使用“?”以不給變量分配初始值 如果有超過一個的初始值 ,初始值之間用“,”分隔 傳統(tǒng)匯編語言每行一條指令,匯編語言程序設計 - 朱明,31,名稱,數(shù)據(jù)定義偽指令,初始值,初始值,Section 5,value2 SBYTE -128 word1 WORD 65535, 54321,1,匯編數(shù)據(jù)定義,多個初始值的定義方式 MASM允許使用行延續(xù)符號“” 行延續(xù)符號只能在每行最后,匯編語言程序設計 - 朱明,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ù)定義,重復初始值的定義方式 定義字符串 一般的字符串應當以空字符結尾 字符串中可能經(jīng)常用到0Dh和0Ah,分別表示回車和換行的操作,匯編語言程序設計 - 朱明,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ù)存儲順序,匯編語言程序設計 - 朱明,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,程序改進,如何改進的加減法程序:增加變量,匯編語言程序設計 - 朱明,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,程序改進,匯編語言程序設計 - 朱明,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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 火力發(fā)電廠熱經(jīng)濟性評價考核試卷
- 能源零售商的市場分析能力考核試卷
- 礦山開采對空氣質量影響評估考核試卷
- 吉林省長春市朝陽區(qū)新朝陽實驗校2025屆初三寒假自主學習綜合練習英語試題含答案
- 蘇州工業(yè)職業(yè)技術學院《生物儀器分析》2023-2024學年第二學期期末試卷
- 寧夏工業(yè)職業(yè)學院《信號與系統(tǒng)》2023-2024學年第二學期期末試卷
- 上海戲劇學院《大學生寫作》2023-2024學年第二學期期末試卷
- 江西省寧師中學2025年高三下學期第一次教學診斷物理試題含解析
- 江西農業(yè)大學南昌商學院《施工組織》2023-2024學年第二學期期末試卷
- 天津外國語大學《藥學細胞生物學實驗》2023-2024學年第二學期期末試卷
- 2025浙江溫州市公用事業(yè)發(fā)展集團有限公司招聘54人(第一批)筆試參考題庫附帶答案詳解
- 陜西、山西省天一大聯(lián)考2024-2025學年高中畢業(yè)班階段性測試(七)歷史試題及答案
- 高中數(shù)學不等式教學中的認知障礙診斷與干預機制研究
- 2024年西安市曲江第三中學行政人員及教師招聘考試真題
- 《化學鍵的斷裂與形成》課件
- 2025年江蘇泰州市泰興經(jīng)濟開發(fā)區(qū)國有企業(yè)招聘筆試參考題庫含答案解析
- 2025年山東省濟南中考一模英語試題(含答案)
- 廣西《健康體檢重要異常結果管理規(guī)范》(材料)
- 2025-2030中國藜麥行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 駕培行業(yè)營銷方案
- 學校校服定制合同協(xié)議
評論
0/150
提交評論