32位匯編語(yǔ)言程序設(shè)計(jì)17稿412c._第1頁(yè)
32位匯編語(yǔ)言程序設(shè)計(jì)17稿412c._第2頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余29頁(yè)可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、序32位匯編語(yǔ)言程序設(shè)計(jì) 是計(jì)算機(jī)軟件課 程。也是計(jì)算機(jī)專業(yè)學(xué)生的必修課程,與其 他程序設(shè)計(jì)語(yǔ)言相比, 匯編語(yǔ)言對(duì)機(jī)器的硬 件層封裝最少,在操作系統(tǒng)的控制下允許程 序員最大限度地直接訪問計(jì)算機(jī)硬件。匯編 語(yǔ)言從語(yǔ)言的角度逼真地?cái)偸隽宋⑻幚砥鞯?體系結(jié)構(gòu),從軟件角度描述了計(jì)算機(jī)系統(tǒng)硬 件層的運(yùn)行規(guī)則。不同的CPU體系有不同的 匯編語(yǔ)言,即使同一種CPU體系也有 不 同 的匯 編 語(yǔ) 言 。 本 課 學(xué) 習(xí) 的 是Intel80X86CPU系 列的32位匯編語(yǔ)言HLA。2013-8 21?.vEl3Illi匯編語(yǔ)言程序設(shè)計(jì)2013-8 21為什么要學(xué)習(xí)匯編語(yǔ)言?在學(xué)習(xí)計(jì)算機(jī)專業(yè)其他課程時(shí),會(huì)遇到一

2、些該課程 不能解答的問題:常數(shù)為什么不能修改,數(shù)據(jù)為什 么要有數(shù)據(jù)類型,為什么C/C+語(yǔ)言中數(shù)組的下標(biāo) 從0開始,為什么不能用值傳遞參數(shù)或自動(dòng)局部變 量從函數(shù)帶冋信息,函數(shù)的形參變量和自動(dòng)局部變 量放在內(nèi)存的哪一部分,它們?yōu)槭裁磿?huì)隨著函數(shù)的 結(jié)束而消失,C/C+語(yǔ)言屮為什么要區(qū)分整數(shù)運(yùn)算 和浮點(diǎn)數(shù)運(yùn)算,編譯程序?yàn)槭裁匆阌媚娌ㄌm式等 等,學(xué)習(xí)32位匯編語(yǔ)言程序設(shè)計(jì)后,會(huì)幫助你理解 許多其他課程留下的問題。2013 8 213第一章匯編語(yǔ)言單詞第一章匯編語(yǔ)言單詞第二章第二章CPU映像和機(jī)器數(shù)映像和機(jī)器數(shù)第三章內(nèi)存數(shù)據(jù)映像第三章內(nèi)存數(shù)據(jù)映像 第四章操作數(shù)尋址方式第四章操作數(shù)尋址方式第五章輸入輸出函

3、數(shù)第五章輸入輸出函數(shù)第六章整型運(yùn)算第六章整型運(yùn)算 第七章整型控制結(jié)構(gòu)第七章整型控制結(jié)構(gòu)2013-8 21第八章浮點(diǎn)型運(yùn)算第八章浮點(diǎn)型運(yùn)算 第九章指針和字符串第九章指針和字符串 第十第十章數(shù)組和串章數(shù)組和串 第十二章過程第十二章過程2013-8 215-章匯編語(yǔ)言字符集和單詞1.1匯編語(yǔ)言字符集1.2注釋符1.3專用符號(hào)1.4保留字1.5標(biāo)識(shí)符1.6匯編語(yǔ)言程序格式2013-8 21I吵吵I 61 1匯編語(yǔ)言字符集匯編語(yǔ)言采用ASCII碼字符作為自己語(yǔ) 言的字符集。匯編語(yǔ)言中的單詞只能用字符集中的字 符按語(yǔ)言語(yǔ)法規(guī)定組成。2013-8 212013-8 21101.2注釋符零編語(yǔ)言的注釋符分單行

4、注釋符和跨行注釋單行釋符/可以放在程序某行中任何位置,匯編程序 忽略從/開始到行尾的所有內(nèi)容。可跨行注釋符/* */匯編程序忽略從/*開始到*/之間的所有內(nèi) 容。2013-8 21例1:注釋的用法(1)可跨行注釋符/*下面的程序段對(duì)數(shù)組 實(shí)施快速排序算法 */mov ( 365 , ecx);/*給計(jì)數(shù)器賦初值*/( (2)單行注釋符mov ( 365 , ecx); /給計(jì)數(shù)器賦初值1 3專用符號(hào)專用符號(hào)主要包括匯編語(yǔ)言的運(yùn)算符、分專用符號(hào)主要包括匯編語(yǔ)言的運(yùn)算符、分 隔符隔符、數(shù)制標(biāo)識(shí)符。專用符號(hào)有一個(gè)字符數(shù)制標(biāo)識(shí)符。專用符號(hào)有一個(gè)字符 的也有兩個(gè)字的也有兩個(gè)字符的。下面是常用的一個(gè)字符的

5、。下面是常用的一個(gè)字 符的專用符號(hào)。符的專用符號(hào)。* / + -();,=& $ %a: 下面是常用的兩個(gè)字符的專用符號(hào)。下面是常用的兩個(gè)字符的專用符號(hào)。-= !=2013-8-21IQH例2:專用符號(hào)舉例mov:8 data , eaxstdout.put( 32位匯編語(yǔ)言,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中的寄 存器名,匯編語(yǔ)言的指令助記符,數(shù)據(jù)類型 名稱等。匯編

6、語(yǔ)言的保留字不區(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、符號(hào)其他符號(hào)program begin end procedure type val staticvar readonly const2013-8 21U18如果想了解匯編語(yǔ)言專用符號(hào)和保留字的更 多的相關(guān)信息,請(qǐng)參考HLA手冊(cè)。2013 8 21171.5標(biāo)識(shí)符標(biāo)識(shí)符可用作程序名、變量名、常量名、函 數(shù)名、過程名、標(biāo)號(hào)等。匯編語(yǔ)言的標(biāo)識(shí)符匯編語(yǔ)言的標(biāo)識(shí)符 必須以字母必須以字母或下劃線開始,后面可跟字母、或下劃線開始,后面可跟字母、 數(shù)字、下劃線。數(shù)字、下劃線。由于受MASM的限制, 標(biāo)識(shí)符 的長(zhǎng)度不能超過236個(gè)ASCII字符。匯編語(yǔ)言編語(yǔ)言 的標(biāo)識(shí)符區(qū)分大小寫字的標(biāo)識(shí)符區(qū)分大小寫字母。母。

8、標(biāo)識(shí)符不能與保留字同名。如果標(biāo)識(shí)符與保 留字相同,匯編程序?qū)凑毡A糇痔幚怼?013-8 2120例3:合法的標(biāo)識(shí)符和非法的標(biāo)識(shí)符(1)合法的標(biāo)識(shí)符addtion bigfirstlasta1s1small Small(2)非法的標(biāo)識(shí)符1.6匯編語(yǔ)言程序基本格式program#include( ”stdlib.hhf”)19begin;vv 程序指令序列/數(shù)據(jù)段/代碼段end:2013 8 2122程序中的program,begin,end是匯編語(yǔ)言的 保留字。程序名要按標(biāo)識(shí)符取名。數(shù)據(jù)段用 來定義各種變量、常量;該位置還用來定義 過程(子程序) 。begin和end之間是代碼段。 匯編語(yǔ)言提

9、供了輸入輸出標(biāo)準(zhǔn)庫(kù),為了使用 輸入輸出標(biāo)準(zhǔn)庫(kù),必須在程序開始用包含語(yǔ) 句把標(biāo)準(zhǔn)庫(kù)的頭文件”stdlib.hhf”包含到程序 中來。2013-&21例3:顯示“匯編語(yǔ)言編程開始了!”的匯編 語(yǔ)言程序program HelioWorld;#include(”stdlib.hhf”)/包含標(biāo)準(zhǔn)庫(kù)頭文件beginHelioWorld;stdout.put(”匯編語(yǔ)言編程開始了!”,nl);stdout.put( ”擊回車鍵繼續(xù)”);stdin.readLn();end HelioWorld;212013-8 2124匯編語(yǔ)言程序執(zhí)行前的處理在編輯器里編寫好的匯編語(yǔ)言程序乂稱源程 序,計(jì)算機(jī)無(wú)法

10、執(zhí)行這樣的程序,我們知道 計(jì)算機(jī)其實(shí)只認(rèn)識(shí)二進(jìn)制代碼,為了讓計(jì)算 機(jī)能執(zhí)行源程序,需要把源程序翻譯成二進(jìn) 制代碼,這個(gè)翻譯器我們稱為匯編程序,翻 譯器產(chǎn)生二進(jìn)制代碼,我們稱為目標(biāo)程序, 這樣的程序還不能執(zhí)行,還必須為它鏈接必 要的系統(tǒng)代碼,這個(gè)任務(wù)由鏈接程序完成。 璉接程序產(chǎn)生可執(zhí)行代碼,它以exe文件表O2013 8 2123結(jié)束把源程序變?yōu)榭蓤?zhí)行程序的過程盂s2013-8 2126匯編語(yǔ)言集成開發(fā)環(huán)境為了提高編寫程序的效率,專門開發(fā)了編程 的集成開發(fā)環(huán)境(IDE),我們課程使用的集 成開發(fā)環(huán)境是RadASM ,它是一種綠色產(chǎn)品, 適合許多種匯編語(yǔ)言,使用方便。我們課程 主要使用的軟件有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匯編語(yǔ)言編程開始了 !vven

12、dl;return 0;2013-8 21312013-8 21ran32匯編語(yǔ)言程序具有占用空間小, 運(yùn)行效率高 的優(yōu)點(diǎn),與這個(gè)匯編語(yǔ)言程序相似的C/C+程序經(jīng)編詳后產(chǎn)生的執(zhí)行代碼約有152KB,而匯編語(yǔ)言編譯的結(jié)果不到8K,匯編語(yǔ)言程 序常用于嵌入系統(tǒng),控制系統(tǒng)編程,也用于 編寫設(shè)備驅(qū)動(dòng)程序,而設(shè)計(jì)圖形界面不是匯 編語(yǔ)言的特長(zhǎng), 每種程序語(yǔ)言都各有扌冉長(zhǎng),在應(yīng)用中注意要揚(yáng)長(zhǎng)避短。2013 8 21第二章機(jī)器數(shù)和CPU映像2.1整數(shù)機(jī)器數(shù)編碼22機(jī)器整數(shù)的加減法運(yùn)算及溢出問題2.3字符機(jī)器數(shù)編碼2.4 Intel 80 x86 CPU映像3121整數(shù)機(jī)器數(shù)編碼匯編語(yǔ)言把二進(jìn)制整數(shù)分為兩種,無(wú)

13、符號(hào)和有符號(hào)整數(shù)。無(wú)符號(hào)整數(shù)是指數(shù)據(jù)的每 一位都代表數(shù)值。在匯編語(yǔ)言程序設(shè)計(jì)里, 內(nèi)存地址(指針),循環(huán)次數(shù),ASCII碼等都 是無(wú)符號(hào)整數(shù)。數(shù)數(shù)學(xué)運(yùn)算中整數(shù)值有正數(shù)和學(xué)運(yùn)算中整數(shù)值有正數(shù)和 負(fù)數(shù)之分,在計(jì)算機(jī)元件負(fù)數(shù)之分,在計(jì)算機(jī)元件級(jí)怎樣表示正號(hào)和級(jí)怎樣表示正號(hào)和 負(fù)號(hào)?答案是只能用數(shù)字負(fù)號(hào)?答案是只能用數(shù)字0和和1表示正號(hào)和負(fù)表示正號(hào)和負(fù) 號(hào)。因此必須進(jìn)行符號(hào)和數(shù)值混合編號(hào)。因此必須進(jìn)行符號(hào)和數(shù)值混合編碼。碼。2013-8-2133(一)原碼表示法如果正數(shù)的符號(hào)用0表示,負(fù)數(shù)的符號(hào)用1表 示,絕對(duì)值用二進(jìn)制數(shù)表示,這就是原碼表 示法。假設(shè)計(jì)算機(jī)字長(zhǎng)是n位,能表示ri1位 有符號(hào)整數(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代表+號(hào)。二進(jìn)制數(shù)-10010的原碼是0010010,在此最 高位的代表-號(hào)。根據(jù)定義,根據(jù)定義,0在原碼中有兩種表示,所以計(jì)在原碼中有兩種表示,所以計(jì) 算機(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ù)的絕對(duì)值,求絕對(duì)值的補(bǔ) 碼,然后對(duì)每位取反(包括符號(hào)位),末位加1o例3:n=8,求(-1010111)2和的補(bǔ)碼。100000000 101

16、0111100000000 1110111372013-8 2139計(jì)算(-1010111)2的補(bǔ)碼1.求負(fù)數(shù)絕對(duì)值10101112.求補(bǔ)碼10101113.取反碼01010004.力力M0101001/ n位補(bǔ)碼位補(bǔ)碼2013-8 21計(jì)算-119的補(bǔ)碼1十進(jìn)制換成一進(jìn)制-11101112.求負(fù)數(shù)絕對(duì)值3.求補(bǔ)碼4.取反碼5.末位加12013-8 210在補(bǔ)碼中只有一種表示法。整數(shù)數(shù)值在計(jì)算 機(jī)元件級(jí)用二進(jìn)制補(bǔ)碼表示。注意補(bǔ)碼表示是 非對(duì)稱性的。8位補(bǔ)碼表示有符號(hào)數(shù)的范岡是-128-127, 16位補(bǔ)碼表示有符號(hào)數(shù)的范圍是3276832767。我們將補(bǔ)碼逐位取反,再加1的運(yùn)算稱為求補(bǔ)運(yùn)算。一

17、個(gè)整數(shù)的補(bǔ)碼經(jīng)過求補(bǔ)運(yùn)算結(jié)果是該整數(shù)的補(bǔ)碼經(jīng)過求補(bǔ)運(yùn)算結(jié)果是該 數(shù)相反數(shù)相反數(shù)的補(bǔ)碼。數(shù)的補(bǔ)碼。求補(bǔ)運(yùn)算X補(bǔ).卜X補(bǔ)計(jì)算補(bǔ)碼的真值1110111000392013-8042對(duì)于正數(shù)補(bǔ)碼,直接用權(quán)的多項(xiàng)式展開求和。例:已知n=8位,求01001010的真值用權(quán)的多項(xiàng)式展開求和:原式=26+23+21=74對(duì)于負(fù)數(shù), 有兩種方法, 每種方法有多個(gè)計(jì) 算步驟。2013 8 2141方法一:根據(jù)補(bǔ)碼的定義 X補(bǔ)碼=2n+X X(2JX補(bǔ)碼)例:求0001001(-的補(bǔ)碼)真值 X = - (28- 0001001 ) =- 1110111 =-11910000000010001001111011120

18、13-8 2144方法二:對(duì)負(fù)數(shù)的補(bǔ)碼求補(bǔ),得到它的絕對(duì)值, 計(jì)算絕對(duì)值的權(quán)的多項(xiàng)式的和,然后對(duì)和實(shí)施 取負(fù)運(yùn)算。例:求0001001 (- 1110111的補(bǔ)碼)真值(1)求補(bǔ)0001001 01110111(2)取負(fù)01110111一-01110111(3)求權(quán)多項(xiàng)式之和一01110111 = -1192013-8 2143我們看同一個(gè)整數(shù)補(bǔ)碼用不同位數(shù)表示時(shí)有何差別。 例4:求117,17的8位和16位的補(bǔ)碼。117的補(bǔ)碼n = 801110101n = 160000000001110101-117的補(bǔ)碼n = 810001011n = 161111111110001011從例子中得出:一個(gè)8位補(bǔ)碼數(shù)要變成16位補(bǔ)碼數(shù)時(shí),只需用它的符號(hào)位的值填滿高8位。這個(gè)操作稱為因?yàn)樵谟?jì)算機(jī)元件級(jí)無(wú)法區(qū)分一個(gè)二進(jìn)制數(shù)是 有符號(hào)的還是無(wú)符號(hào)的。所以在機(jī)器內(nèi)一個(gè)二 進(jìn)制數(shù)可代表有符號(hào)數(shù),也可代表無(wú)符號(hào)數(shù)。 例如:假定n=8位,機(jī)器內(nèi)有個(gè)整數(shù)%10001010,它 可以代表無(wú)符號(hào)數(shù)138;也可以代表右符號(hào)數(shù)-118o匯編語(yǔ)言程序員對(duì)程序中的整數(shù)哪些是 無(wú)符號(hào)的,哪些是有符號(hào)的必須一清二楚。2.2機(jī)器整數(shù)加減法運(yùn)算及溢出問題(-)零擴(kuò)展和符號(hào)擴(kuò)展計(jì)算機(jī)內(nèi)整數(shù)的加法和減法運(yùn)算要求參加運(yùn)算數(shù)據(jù) 的反度要相同。如果參加運(yùn)算的數(shù)據(jù)長(zhǎng)度不同時(shí), 在運(yùn)算之前要把位數(shù)短

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論