

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、序32位匯編語言程序設(shè)計 是計算機(jī)軟件課 程。也是計算機(jī)專業(yè)學(xué)生的必修課程,與其 他程序設(shè)計語言相比, 匯編語言對機(jī)器的硬 件層封裝最少,在操作系統(tǒng)的控制下允許程 序員最大限度地直接訪問計算機(jī)硬件。匯編 語言從語言的角度逼真地攤述了微處理器的 體系結(jié)構(gòu),從軟件角度描述了計算機(jī)系統(tǒng)硬 件層的運行規(guī)則。不同的CPU體系有不同的 匯編語言,即使同一種CPU體系也有 不 同 的匯 編 語 言 。 本 課 學(xué) 習(xí) 的 是Intel80X86CPU系 列的32位匯編語言HLA。2013-8 21?.vEl3Illi匯編語言程序設(shè)計2013-8 21為什么要學(xué)習(xí)匯編語言?在學(xué)習(xí)計算機(jī)專業(yè)其他課程時,會遇到一
2、些該課程 不能解答的問題:常數(shù)為什么不能修改,數(shù)據(jù)為什 么要有數(shù)據(jù)類型,為什么C/C+語言中數(shù)組的下標(biāo) 從0開始,為什么不能用值傳遞參數(shù)或自動局部變 量從函數(shù)帶冋信息,函數(shù)的形參變量和自動局部變 量放在內(nèi)存的哪一部分,它們?yōu)槭裁磿S著函數(shù)的 結(jié)束而消失,C/C+語言屮為什么要區(qū)分整數(shù)運算 和浮點數(shù)運算,編譯程序為什么要便用逆波蘭式等 等,學(xué)習(xí)32位匯編語言程序設(shè)計后,會幫助你理解 許多其他課程留下的問題。2013 8 213第一章匯編語言單詞第一章匯編語言單詞第二章第二章CPU映像和機(jī)器數(shù)映像和機(jī)器數(shù)第三章內(nèi)存數(shù)據(jù)映像第三章內(nèi)存數(shù)據(jù)映像 第四章操作數(shù)尋址方式第四章操作數(shù)尋址方式第五章輸入輸出函
3、數(shù)第五章輸入輸出函數(shù)第六章整型運算第六章整型運算 第七章整型控制結(jié)構(gòu)第七章整型控制結(jié)構(gòu)2013-8 21第八章浮點型運算第八章浮點型運算 第九章指針和字符串第九章指針和字符串 第十第十章數(shù)組和串章數(shù)組和串 第十二章過程第十二章過程2013-8 215-章匯編語言字符集和單詞1.1匯編語言字符集1.2注釋符1.3專用符號1.4保留字1.5標(biāo)識符1.6匯編語言程序格式2013-8 21I吵吵I 61 1匯編語言字符集匯編語言采用ASCII碼字符作為自己語 言的字符集。匯編語言中的單詞只能用字符集中的字 符按語言語法規(guī)定組成。2013-8 212013-8 21101.2注釋符零編語言的注釋符分單行
4、注釋符和跨行注釋單行釋符/可以放在程序某行中任何位置,匯編程序 忽略從/開始到行尾的所有內(nèi)容??煽缧凶⑨尫?* */匯編程序忽略從/*開始到*/之間的所有內(nèi) 容。2013-8 21例1:注釋的用法(1)可跨行注釋符/*下面的程序段對數(shù)組 實施快速排序算法 */mov ( 365 , ecx);/*給計數(shù)器賦初值*/( (2)單行注釋符mov ( 365 , ecx); /給計數(shù)器賦初值1 3專用符號專用符號主要包括匯編語言的運算符、分專用符號主要包括匯編語言的運算符、分 隔符隔符、數(shù)制標(biāo)識符。專用符號有一個字符數(shù)制標(biāo)識符。專用符號有一個字符 的也有兩個字的也有兩個字符的。下面是常用的一個字符的
5、。下面是常用的一個字 符的專用符號。符的專用符號。* / + -();,=& $ %a: 下面是常用的兩個字符的專用符號。下面是常用的兩個字符的專用符號。-= !=2013-8-21IQH例2:專用符號舉例mov:8 data , eaxstdout.put( 32位匯編語言,nl );stdout.put(pi=H,pi 10 3, nl);stdout.put( $6F, nl);stdout.put( 10101010, nl );2013 8 21122013-8 21141 4保留字保留字也稱關(guān)鍵字,保留字包括CPU中的寄 存器名,匯編語言的指令助記符,數(shù)據(jù)類型 名稱等。匯編
6、語言的保留字不區(qū)分大小寫。13CPU中的寄存器名ALAHAXEAXBLBHBXEBXCLCHexECXDLDHDXEDXSIESIDIEDIBPEBPSPESPSTO ST1 ST2 ST3 ST4 ST5 ST6 ST72013-8 2116指令助記符ADDINCADCSUBDECCMP NEGSBBMULIMULINTMULDIVIDIVMOD IMOD2013 8 2115數(shù)據(jù)類型名稱 int8int16int32 uns8uns16uns32 real32 real64real80 byteworddwordqwordIword charstringcsetarrayboolean其他
7、符號其他符號program begin end procedure type val staticvar readonly const2013-8 21U18如果想了解匯編語言專用符號和保留字的更 多的相關(guān)信息,請參考HLA手冊。2013 8 21171.5標(biāo)識符標(biāo)識符可用作程序名、變量名、常量名、函 數(shù)名、過程名、標(biāo)號等。匯編語言的標(biāo)識符匯編語言的標(biāo)識符 必須以字母必須以字母或下劃線開始,后面可跟字母、或下劃線開始,后面可跟字母、 數(shù)字、下劃線。數(shù)字、下劃線。由于受MASM的限制, 標(biāo)識符 的長度不能超過236個ASCII字符。匯編語言編語言 的標(biāo)識符區(qū)分大小寫字的標(biāo)識符區(qū)分大小寫字母。母。
8、標(biāo)識符不能與保留字同名。如果標(biāo)識符與保 留字相同,匯編程序?qū)凑毡A糇痔幚怼?013-8 2120例3:合法的標(biāo)識符和非法的標(biāo)識符(1)合法的標(biāo)識符addtion bigfirstlasta1s1small Small(2)非法的標(biāo)識符1.6匯編語言程序基本格式program#include( ”stdlib.hhf”)19begin;vv 程序指令序列/數(shù)據(jù)段/代碼段end:2013 8 2122程序中的program,begin,end是匯編語言的 保留字。程序名要按標(biāo)識符取名。數(shù)據(jù)段用 來定義各種變量、常量;該位置還用來定義 過程(子程序) 。begin和end之間是代碼段。 匯編語言提
9、供了輸入輸出標(biāo)準(zhǔn)庫,為了使用 輸入輸出標(biāo)準(zhǔn)庫,必須在程序開始用包含語 句把標(biāo)準(zhǔn)庫的頭文件”stdlib.hhf”包含到程序 中來。2013-&21例3:顯示“匯編語言編程開始了!”的匯編 語言程序program HelioWorld;#include(”stdlib.hhf”)/包含標(biāo)準(zhǔn)庫頭文件beginHelioWorld;stdout.put(”匯編語言編程開始了!”,nl);stdout.put( ”擊回車鍵繼續(xù)”);stdin.readLn();end HelioWorld;212013-8 2124匯編語言程序執(zhí)行前的處理在編輯器里編寫好的匯編語言程序乂稱源程 序,計算機(jī)無法
10、執(zhí)行這樣的程序,我們知道 計算機(jī)其實只認(rèn)識二進(jìn)制代碼,為了讓計算 機(jī)能執(zhí)行源程序,需要把源程序翻譯成二進(jìn) 制代碼,這個翻譯器我們稱為匯編程序,翻 譯器產(chǎn)生二進(jìn)制代碼,我們稱為目標(biāo)程序, 這樣的程序還不能執(zhí)行,還必須為它鏈接必 要的系統(tǒng)代碼,這個任務(wù)由鏈接程序完成。 璉接程序產(chǎn)生可執(zhí)行代碼,它以exe文件表O2013 8 2123結(jié)束把源程序變?yōu)榭蓤?zhí)行程序的過程盂s2013-8 2126匯編語言集成開發(fā)環(huán)境為了提高編寫程序的效率,專門開發(fā)了編程 的集成開發(fā)環(huán)境(IDE),我們課程使用的集 成開發(fā)環(huán)境是RadASM ,它是一種綠色產(chǎn)品, 適合許多種匯編語言,使用方便。我們課程 主要使用的軟件有hl
11、a ,masm32 ,RadASM, Ollydbg。2013-8 21JR RadASM匯圧仗畑宕V匚 2 童昨開冷匯2言叭幵妁hl創(chuàng)4 文件處啦)枯式Te)工a a(ao矽egIA)WJ(H)cawici oa 僅訐二Te(決回|去4 27a刁謝252013-8 21262013-8 2128If:S Char 77 Pg: 11912013 8 21272013-8 2130#include ”stdafx.h”#include ”iostream”using namespace std;int main(int argc, char* argv)coutH匯編語言編程開始了 !vven
12、dl;return 0;2013-8 21312013-8 21ran32匯編語言程序具有占用空間小, 運行效率高 的優(yōu)點,與這個匯編語言程序相似的C/C+程序經(jīng)編詳后產(chǎn)生的執(zhí)行代碼約有152KB,而匯編語言編譯的結(jié)果不到8K,匯編語言程 序常用于嵌入系統(tǒng),控制系統(tǒng)編程,也用于 編寫設(shè)備驅(qū)動程序,而設(shè)計圖形界面不是匯 編語言的特長, 每種程序語言都各有扌冉長,在應(yīng)用中注意要揚長避短。2013 8 21第二章機(jī)器數(shù)和CPU映像2.1整數(shù)機(jī)器數(shù)編碼22機(jī)器整數(shù)的加減法運算及溢出問題2.3字符機(jī)器數(shù)編碼2.4 Intel 80 x86 CPU映像3121整數(shù)機(jī)器數(shù)編碼匯編語言把二進(jìn)制整數(shù)分為兩種,無
13、符號和有符號整數(shù)。無符號整數(shù)是指數(shù)據(jù)的每 一位都代表數(shù)值。在匯編語言程序設(shè)計里, 內(nèi)存地址(指針),循環(huán)次數(shù),ASCII碼等都 是無符號整數(shù)。數(shù)數(shù)學(xué)運算中整數(shù)值有正數(shù)和學(xué)運算中整數(shù)值有正數(shù)和 負(fù)數(shù)之分,在計算機(jī)元件負(fù)數(shù)之分,在計算機(jī)元件級怎樣表示正號和級怎樣表示正號和 負(fù)號?答案是只能用數(shù)字負(fù)號?答案是只能用數(shù)字0和和1表示正號和負(fù)表示正號和負(fù) 號。因此必須進(jìn)行符號和數(shù)值混合編號。因此必須進(jìn)行符號和數(shù)值混合編碼。碼。2013-8-2133(一)原碼表示法如果正數(shù)的符號用0表示,負(fù)數(shù)的符號用1表 示,絕對值用二進(jìn)制數(shù)表示,這就是原碼表 示法。假設(shè)計算機(jī)字長是n位,能表示ri1位 有符號整數(shù),設(shè)x
14、=xn_2xn_3.xo,碼表不是:r xn.2xn.3,.x0 xoX源碼=YI xn.2xn.3.x0 xo2013 8 21342013 8 2136例仁 設(shè)n=8,求二進(jìn)制數(shù)10010, -10010的原 碼。二進(jìn)制數(shù)10010的原碼是0010010,在此最 高位的0代表+號。二進(jìn)制數(shù)-10010的原碼是0010010,在此最 高位的代表-號。根據(jù)定義,根據(jù)定義,0在原碼中有兩種表示,所以計在原碼中有兩種表示,所以計 算機(jī)內(nèi)整算機(jī)內(nèi)整數(shù)不采用原碼表示法。數(shù)不采用原碼表示法。2013 8 2135(-)補(bǔ)碼表示法n位二進(jìn)制整數(shù)補(bǔ)碼的定義是:X0X 2n-1-1X補(bǔ)碼=彳2JX -2n-1
15、X0n位二進(jìn)制整數(shù)補(bǔ)碼表示X是是n 1位二進(jìn)制整數(shù)位二進(jìn)制整數(shù)2013-8 2138二進(jìn)制數(shù)轉(zhuǎn)換為補(bǔ)碼二進(jìn)制正數(shù)轉(zhuǎn)換成補(bǔ)碼與原碼相同。 二進(jìn)制 轉(zhuǎn)換成補(bǔ)碼有兩種方法: 方法1:根據(jù)定義求補(bǔ)碼例2:n=8,求(-1010111)2和的補(bǔ)碼。-1010111補(bǔ)碼=28-1010111=100000000-1010111=10101001-119補(bǔ)碼=28-1110111= 100000000-1110111=100010012013-8 21方法2:寫出負(fù)數(shù)的絕對值,求絕對值的補(bǔ) 碼,然后對每位取反(包括符號位),末位加1o例3:n=8,求(-1010111)2和的補(bǔ)碼。100000000 101
16、0111100000000 1110111372013-8 2139計算(-1010111)2的補(bǔ)碼1.求負(fù)數(shù)絕對值10101112.求補(bǔ)碼10101113.取反碼01010004.力力M0101001/ n位補(bǔ)碼位補(bǔ)碼2013-8 21計算-119的補(bǔ)碼1十進(jìn)制換成一進(jìn)制-11101112.求負(fù)數(shù)絕對值3.求補(bǔ)碼4.取反碼5.末位加12013-8 210在補(bǔ)碼中只有一種表示法。整數(shù)數(shù)值在計算 機(jī)元件級用二進(jìn)制補(bǔ)碼表示。注意補(bǔ)碼表示是 非對稱性的。8位補(bǔ)碼表示有符號數(shù)的范岡是-128-127, 16位補(bǔ)碼表示有符號數(shù)的范圍是3276832767。我們將補(bǔ)碼逐位取反,再加1的運算稱為求補(bǔ)運算。一
17、個整數(shù)的補(bǔ)碼經(jīng)過求補(bǔ)運算結(jié)果是該整數(shù)的補(bǔ)碼經(jīng)過求補(bǔ)運算結(jié)果是該 數(shù)相反數(shù)相反數(shù)的補(bǔ)碼。數(shù)的補(bǔ)碼。求補(bǔ)運算X補(bǔ).卜X補(bǔ)計算補(bǔ)碼的真值1110111000392013-8042對于正數(shù)補(bǔ)碼,直接用權(quán)的多項式展開求和。例:已知n=8位,求01001010的真值用權(quán)的多項式展開求和:原式=26+23+21=74對于負(fù)數(shù), 有兩種方法, 每種方法有多個計 算步驟。2013 8 2141方法一:根據(jù)補(bǔ)碼的定義 X補(bǔ)碼=2n+X X(2JX補(bǔ)碼)例:求0001001(-的補(bǔ)碼)真值 X = - (28- 0001001 ) =- 1110111 =-11910000000010001001111011120
18、13-8 2144方法二:對負(fù)數(shù)的補(bǔ)碼求補(bǔ),得到它的絕對值, 計算絕對值的權(quán)的多項式的和,然后對和實施 取負(fù)運算。例:求0001001 (- 1110111的補(bǔ)碼)真值(1)求補(bǔ)0001001 01110111(2)取負(fù)01110111一-01110111(3)求權(quán)多項式之和一01110111 = -1192013-8 2143我們看同一個整數(shù)補(bǔ)碼用不同位數(shù)表示時有何差別。 例4:求117,17的8位和16位的補(bǔ)碼。117的補(bǔ)碼n = 801110101n = 160000000001110101-117的補(bǔ)碼n = 810001011n = 161111111110001011從例子中得出:一個8位補(bǔ)碼數(shù)要變成16位補(bǔ)碼數(shù)時,只需用它的符號位的值填滿高8位。這個操作稱為因為在計算機(jī)元件級無法區(qū)分一個二進(jìn)制數(shù)是 有符號的還是無符號的。所以在機(jī)器內(nèi)一個二 進(jìn)制數(shù)可代表有符號數(shù),也可代表無符號數(shù)。 例如:假定n=8位,機(jī)器內(nèi)有個整數(shù)%10001010,它 可以代表無符號數(shù)138;也可以代表右符號數(shù)-118o匯編語言程序員對程序中的整數(shù)哪些是 無符號的,哪些是有符號的必須一清二楚。2.2機(jī)器整數(shù)加減法運算及溢出問題(-)零擴(kuò)展和符號擴(kuò)展計算機(jī)內(nèi)整數(shù)的加法和減法運算要求參加運算數(shù)據(jù) 的反度要相同。如果參加運算的數(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)自動化中的機(jī)器人技術(shù)探討
- 工業(yè)自動化技術(shù)與應(yīng)用領(lǐng)域探討
- 工業(yè)自動化技術(shù)的未來趨勢分析
- 工業(yè)設(shè)計與品牌建設(shè)的策略
- 工業(yè)設(shè)計與產(chǎn)品設(shè)計思路分享
- 工作中的溝通技巧與效率關(guān)系
- 工作中的創(chuàng)新方法與實踐案例分享
- 工作與生活平衡的實踐方法
- 工程機(jī)械設(shè)備行業(yè)發(fā)展現(xiàn)狀與趨勢
- 工廠節(jié)能減排技術(shù)推廣
- 團(tuán)隊建設(shè)(完整版)-HR貓貓復(fù)習(xí)課程
- 五年級讀書分享課件
- 倉庫管理基礎(chǔ)知識培訓(xùn)
- 自閉癥孤獨癥兒童語言與溝通評估表
- 鋼網(wǎng)架結(jié)構(gòu)安裝、拼裝施工方案
- DB32989-2007低壓電氣裝置規(guī)程
- 部編版六年級下冊道德與法治知識點大匯總
- T∕CSTE 0008-2020 污水處理用碳源液體乙酸鈉
- Q∕GDW 46 10022.9-2020 主進(jìn)水閥本體運檢導(dǎo)則
- 電網(wǎng)公司竣工決算報告編制規(guī)范與竣工決算資料的要求
- 城市主干道工程監(jiān)理大綱
評論
0/150
提交評論