匯編語言程序設(shè)計(jì)答案_第1頁
匯編語言程序設(shè)計(jì)答案_第2頁
匯編語言程序設(shè)計(jì)答案_第3頁
匯編語言程序設(shè)計(jì)答案_第4頁
匯編語言程序設(shè)計(jì)答案_第5頁
已閱讀5頁,還剩178頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、匯編語言程序設(shè)計(jì)教案附:習(xí)題參考答案IBM-PC匯編語言程序設(shè)計(jì) (第2版)沈美明、溫冬嬋 編著教案編寫時(shí)間:2007年8月18日前 言1. 匯編語言是計(jì)算機(jī)能提供給用戶的最快而又最有效的語言,也是能夠利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的唯一語言。2. 匯編語言程序設(shè)計(jì)是高等院校電子計(jì)算機(jī)硬、軟件及應(yīng)用專業(yè)學(xué)生必修的核心課程之一。它不僅是計(jì)算機(jī)原理、操作系統(tǒng)等其它核心課程的必要先修課,而且對于訓(xùn)練學(xué)生掌握程序設(shè)計(jì)技術(shù)、熟悉上機(jī)操作和程序調(diào)試技術(shù)都有重要作用。3. 本教材共有十一章,其內(nèi)容安排如下:(1). 第一、二章為匯編語言所用的基礎(chǔ)知識。(2). 第三章詳細(xì)介紹80x86系列CPU的指

2、令系統(tǒng)和尋址方式。(3). 第四章介紹偽操作、匯編語言程序格式及匯編語言的上機(jī)過程。(4). 第五、六章說明循環(huán)、分支、子程序結(jié)構(gòu)和程序設(shè)計(jì)的基本方法。(5). 第七章說明宏匯編、重復(fù)匯編及條件匯編的設(shè)計(jì)方法。(6). 第八章敘述輸入/輸出程序設(shè)計(jì)方法,重點(diǎn)說明中斷原理、中斷過程及中斷程序設(shè)計(jì)方式。(7). 第九章說明BIOS和DOS系統(tǒng)功能調(diào)用的使用方法。(8). 第十十一章分別說明圖形顯示、發(fā)聲及磁盤文件存儲的程序設(shè)計(jì)方法,同時(shí)提供各種程序設(shè)計(jì)方法和程序?qū)嵗?。附:教學(xué)參考書1. 沈美明、溫冬嬋編著,IBMPC匯編語言程序設(shè)計(jì)(第2版),清華大學(xué)出版社,2001年(教材)2. 沈美明、溫冬嬋

3、編著,IBMPC匯編語言程序設(shè)計(jì),清華大學(xué)出版社,1991年3. 沈美明、溫冬嬋編著,IBMPC匯編語言程序設(shè)計(jì)例題習(xí)題集,清華大學(xué)出版社,1991年6月4. 沈美明、溫冬嬋、張赤紅編著,IBMPC匯編語言程序設(shè)計(jì)實(shí)驗(yàn)教程,清華大學(xué)出版社,1992年5. 周明德,微型計(jì)算機(jī)IBM PC/XT(0520系列)系統(tǒng)原理及應(yīng)用(修訂版),清華大學(xué)出版社,19916. 鄭學(xué)堅(jiān)、周斌,微型計(jì)算機(jī)原理及應(yīng)用(第二版),清華大學(xué)出版社,19957. 王士元、吳芝芳,IBM PC/XT長城0520 接口技術(shù)及其應(yīng)用,南開大學(xué)出版社,19908. 楊素行,微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用,清華大學(xué)出版社,19959.

4、戴梅萼、史嘉權(quán),微型計(jì)算機(jī)技術(shù)及應(yīng)用從16位到32位(第二版),清華大學(xué)出版社,199610. 張昆藏,IBM PC/XT微型計(jì)算機(jī)接口技術(shù),清華大學(xué)出版社,199111. 孟紹光,李維星,高檔微機(jī)組成原理及接口技術(shù)(80386/80486/Pentium),學(xué)苑出版社,199312. 吳秀清,周荷琴,微型計(jì)算機(jī)原理與接口技術(shù),中國科學(xué)技術(shù)大學(xué)出版社目錄第 1 章 基礎(chǔ)知識11.1 進(jìn)位計(jì)數(shù)制與不同基數(shù)的數(shù)之間的轉(zhuǎn)換11.2 二進(jìn)制數(shù)和十六進(jìn)制數(shù)的運(yùn)算21.3 計(jì)算機(jī)中數(shù)和字符的表示31.4 幾種基本的邏輯運(yùn)算3第 2 章 80X86計(jì)算機(jī)組織42.1 80x86微處理器42.2 基于微處理器

5、的計(jì)算機(jī)系統(tǒng)構(gòu)成42.3 中央處理機(jī)52.4 存儲器62.5 外部設(shè)備7第 3 章 80X86的指令系統(tǒng)和尋址方式83.1 80x86的尋址方式83.2 程序占有的空間和執(zhí)行時(shí)間103.3 80x86的指令系統(tǒng)10第 4 章 匯編語言程序格式264.1 匯編程序功能264.2 偽操作264.3 匯編語言程序格式304.4 匯編語言程序的上機(jī)過程33第 5 章 循環(huán)與分支程序設(shè)計(jì)355.1 循環(huán)程序設(shè)計(jì)355.2 分支程序設(shè)計(jì)365.3 如何在實(shí)模式下發(fā)揮80386及其后繼機(jī)型的優(yōu)勢36第 6 章 子程序結(jié)構(gòu)376.1 子程序的設(shè)計(jì)方法376.2 子程序的嵌套386.3 子程序舉例38第 7 章

6、 高級匯編語言技術(shù)397.1 宏 匯 編397.2 重 復(fù) 匯 編407.3 條 件 匯 編41第 8 章 輸入/輸出程序設(shè)計(jì)428.1 I/O設(shè)備的數(shù)據(jù)傳送方式428.2 程序直接控制I/O方式438.3 中斷傳送方式43第 9 章 BIOS和DOS中斷469.1 鍵盤I/O469.2 顯示器I/O489.3 打印機(jī)I/O499.4 串行通信口I/O50第 10 章 圖形與發(fā)聲系統(tǒng)的程序設(shè)計(jì)5110.1 顯示方式5110.2 視頻顯示存儲器5110.3 EGA/VGA圖形程序設(shè)計(jì)5210.4 通用發(fā)聲程序5310.5 樂曲程序54第 11 章 磁盤文件存取技術(shù)5511.1 磁盤的記錄方式55

7、11.2 文件代號式磁盤存取5611.3 字符設(shè)備的文件代號式I/O5711.4 BIOS磁盤存取功能58附錄:IBMPC匯編語言程序設(shè)計(jì)習(xí)題參考答案59第 一 章.習(xí) 題59第 二 章.習(xí) 題60第 三 章.習(xí) 題61第 四 章.習(xí) 題74第 五 章.習(xí) 題79第 六 章.習(xí) 題97第 七 章.習(xí) 題110第 八 章.習(xí) 題117第 九 章.習(xí) 題122第 十 章.習(xí) 題125第 十一 章.習(xí) 題136第 1 章 基礎(chǔ)知識【教學(xué)目的】本章內(nèi)容是本課程的基礎(chǔ),通過本章學(xué)習(xí),使學(xué)生明確匯編語言程序設(shè)計(jì)的學(xué)科性質(zhì)、基本內(nèi)容和學(xué)習(xí)意義,掌握數(shù)制的轉(zhuǎn)換、數(shù)據(jù)的編碼,了解本門課程的教學(xué)要求和學(xué)習(xí)方法?!?/p>

8、重點(diǎn)難點(diǎn)】二進(jìn)制數(shù)及其與其它數(shù)制的轉(zhuǎn)換、補(bǔ)碼及其運(yùn)算。【課 時(shí) 數(shù)】3學(xué)時(shí)。1.1 進(jìn)位計(jì)數(shù)制與不同基數(shù)的數(shù)之間的轉(zhuǎn)換1.1.1 二進(jìn)制數(shù)1. 十進(jìn)制數(shù):(Decimal)(數(shù)后面加D或省略表示的是十進(jìn)制數(shù))(1). 十進(jìn)制數(shù)表示為:anan -1a0.a -1a -2a -m 其含義如下:1). 基數(shù)為102). 10個(gè)數(shù)碼0 、1、2、3、4、5、6、7、8、93). 逢10進(jìn)1(2). 權(quán):相應(yīng)于式中每位數(shù)字的10 k稱為該位數(shù)的權(quán)。(3). 數(shù)的值:每位數(shù)字乘以其權(quán)所得到的乘積之和即為該數(shù)的值。即如上述多項(xiàng)式展開后所得到的和。2. r進(jìn)制數(shù):(1). r進(jìn)制數(shù)表示為:anan -1a0

9、.a -1a -2a -m 其含義如下:1). 基數(shù)為r2). r個(gè)數(shù)碼0 、1、2、 r-13). 逢r進(jìn)1(2). 權(quán):相應(yīng)于式中每位數(shù)字的r k稱為該位數(shù)的權(quán)。(3). 數(shù)的值:每位數(shù)字乘以其權(quán)所得到的乘積之和即為該數(shù)的值。即如上述多項(xiàng)式展開后所得到的和。3. 二進(jìn)制數(shù):(數(shù)后面加B表示二進(jìn)制數(shù))(1). 二進(jìn)制數(shù)表示為:anan -1a0.a -1a -2a -m 其含義如下:1). 基數(shù)為22). 2個(gè)數(shù)碼0 和13). 逢2進(jìn)1(2). 權(quán):相應(yīng)于式中每位數(shù)字的2 k稱為該位數(shù)的權(quán)。(3). 數(shù)的值:每位數(shù)字乘以其權(quán)所得到的乘積之和即為該數(shù)的值。即如上述多項(xiàng)式展開后所得到的和。4.

10、 十六進(jìn)制數(shù):(Hexadecimal)(數(shù)后面加H表示十六進(jìn)制數(shù))(1). 十六進(jìn)制數(shù)表示為:anan -1a0.a -1a -2a -m 其含義如下:1). 基數(shù)為162). 16個(gè)數(shù)碼0 、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F(或a f)3). 逢16進(jìn)1(2). 權(quán):相應(yīng)于式中每位數(shù)字的16 k稱為該位數(shù)的權(quán)。(3). 數(shù)的值:每位數(shù)字乘以其權(quán)所得到的乘積之和即為該數(shù)的值。即如上述多項(xiàng)式展開后所得到的和。1.1.2 二進(jìn)制數(shù)和十進(jìn)制數(shù)之間的轉(zhuǎn)換1. 二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù):根據(jù)上面的二進(jìn)制數(shù)多項(xiàng)式按權(quán)展開求和即為十進(jìn)制數(shù)。2. 十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)(1). 降冪

11、法:首先寫出要轉(zhuǎn)換的十進(jìn)制數(shù),其次寫出所有小于此數(shù)的各位二進(jìn)制權(quán)值,然后用要轉(zhuǎn)換的十進(jìn)制數(shù)減去與它最相近的二進(jìn)制權(quán)值,如夠減則減去并在相應(yīng)位記以1;如不夠減則在相應(yīng)位記以0并跳過此位;如此不斷反復(fù),直到該數(shù)為0為止。(2). 除法1). 十進(jìn)制整數(shù)轉(zhuǎn)換:采用“除2 (基)取余”法進(jìn)行轉(zhuǎn)換,即把十進(jìn)制整數(shù)除以2,取出余數(shù)1或0作為相應(yīng)二進(jìn)制數(shù)的最低位,把得到的商再除以2,再取出余數(shù)1或0作為相應(yīng)二進(jìn)制數(shù)的次低位。由此類推,繼續(xù)上述過程直至商為0止,最后一次的余數(shù)為二進(jìn)制數(shù)的最高位,依次所得到的余數(shù)序列就是轉(zhuǎn)換成的二進(jìn)制數(shù)。2). 十進(jìn)制小數(shù)轉(zhuǎn)換:采用“乘2 (基)取整”法進(jìn)行轉(zhuǎn)換,即先將十進(jìn)制小

12、數(shù)乘以2,取其整數(shù)1或0作為相應(yīng)二進(jìn)制小數(shù)的最高位,然后將乘積的小數(shù)部分再乘以2,并再取其整數(shù)作為次高位。依次重復(fù)上述過程,直到小數(shù)部分為0或達(dá)到要求的精度為止。1.1.3 十六進(jìn)制數(shù)及其與二進(jìn)制、十進(jìn)制數(shù)之間的轉(zhuǎn)換1. 十六進(jìn)制數(shù)的表示:(參見1.1.1節(jié)的第4步)以下是幾個(gè)概念:(1). 位(bit)。bit(Binary digit的縮寫)是量度信息的最小單位,1比特為二進(jìn)制的一位包含的信息量。(2). 字節(jié)(Byte)。作為一個(gè)單位來處理的一串二進(jìn)制數(shù)位,通常由8位二進(jìn)制數(shù)位組成一個(gè)字節(jié)。一個(gè)字節(jié)可以代表一個(gè)數(shù)字、一個(gè)字母或一個(gè)特殊符號。也是計(jì)算機(jī)存儲容量的單位。(3). 字(Word

13、)。在計(jì)算機(jī)中,一般稱兩個(gè)字節(jié)為一個(gè)字。(4). 字長(Word Length)。計(jì)算機(jī)的每個(gè)字所包含的位數(shù)稱為字長。字長是計(jì)算機(jī)的一項(xiàng)重要指標(biāo)。一般都選為字節(jié)的整數(shù)倍。2. 十六進(jìn)制數(shù)與二進(jìn)制數(shù)之間的轉(zhuǎn)換(1). 二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù):從二進(jìn)制數(shù)的小數(shù)點(diǎn)位置開始,整數(shù)部分向左,小數(shù)部分向右,每四位二進(jìn)制數(shù)字為一組用一位十六進(jìn)制數(shù)字表示,不足四位的用0補(bǔ)足,就得到一個(gè)相應(yīng)的十六進(jìn)制數(shù)。(2). 十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù):每一位十六進(jìn)制數(shù)用四位二進(jìn)制數(shù)表示,就形成相應(yīng)的二進(jìn)制數(shù)了。3. 十六進(jìn)制數(shù)與十進(jìn)制數(shù)之間的轉(zhuǎn)換(1). 十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù):根據(jù)上面的十六進(jìn)制數(shù)多項(xiàng)式按權(quán)展開求和即

14、為十進(jìn)制數(shù)。(2). 十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù):可類似于十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的降冪法和除法來轉(zhuǎn)換為十六進(jìn)制數(shù)。也可先將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù),再將二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)。1). 降冪法:首先寫出要轉(zhuǎn)換的十進(jìn)制數(shù),其次寫出所有小于此數(shù)的各位十六進(jìn)制權(quán)值,然后用要轉(zhuǎn)換的十進(jìn)制數(shù)除以與它最相近的十六進(jìn)制權(quán)值,并在相應(yīng)位記以十六進(jìn)制的商;再將余數(shù)除以下一位權(quán)值,并記下商和余數(shù);如此不斷反復(fù),直到該數(shù)為0為止。2). 除法:同前,整數(shù)部分采用除基(16)取余法,小數(shù)部分采用乘基(16)取整法直到所需的精度為止來進(jìn)行轉(zhuǎn)換。1.2 二進(jìn)制數(shù)和十六進(jìn)制數(shù)的運(yùn)算1.2.1 二進(jìn)制數(shù)的運(yùn)算1. 加法規(guī)則:0+

15、0=0,0+1=1,1+0=1,1+1=0 (進(jìn)位1)2. 乘法規(guī)則:0×0=0,0×1=0,1×0=0,1×1=11.2.2 十六進(jìn)制數(shù)的運(yùn)算:按照逢16進(jìn)1的原則進(jìn)行計(jì)算。1.3 計(jì)算機(jī)中數(shù)和字符的表示1.3.1 數(shù)的補(bǔ)碼表示1. 機(jī)器數(shù):在機(jī)器中以數(shù)值化表示的連同其符號在內(nèi)的一個(gè)數(shù)稱為機(jī)器數(shù)。一般用最高有效位來表示符號,正數(shù)用0表示,負(fù)數(shù)用1表示。2. 補(bǔ)碼表示法3. 補(bǔ)碼求法(1). 正數(shù)的補(bǔ)碼就是其本身;(2). 負(fù)數(shù)的補(bǔ)碼 = 其正數(shù)的補(bǔ)碼按位求反+1。4. 符號擴(kuò)展(如將8位有符號數(shù)擴(kuò)展成為16位有符號數(shù))(1). 正數(shù)的符號擴(kuò)展是在前面補(bǔ)

16、0;(2). 負(fù)數(shù)的符號擴(kuò)展是在前面補(bǔ)1。5. n位補(bǔ)碼所表示數(shù)的范圍:-2 n-1N2 n-1-16. 雙字長數(shù)或雙精度數(shù):在機(jī)器里,為了擴(kuò)大表數(shù)范圍,可以用兩個(gè)機(jī)器字(高位字和低位字)來表示一個(gè)機(jī)器數(shù),這種數(shù)稱為雙字長數(shù)或雙精度數(shù)。在80386及其后則有4字(64位)。1.3.2 補(bǔ)碼的加法和減法1. 求補(bǔ)運(yùn)算:對一個(gè)二進(jìn)制數(shù)按位求反后在末尾加1的運(yùn)算稱為求補(bǔ)運(yùn)算。求補(bǔ)求補(bǔ)X補(bǔ) -X補(bǔ) X補(bǔ)2. 補(bǔ)碼的加法運(yùn)算規(guī)則X+Y補(bǔ) = X補(bǔ)+ Y補(bǔ)3. 補(bǔ)碼的減法運(yùn)算規(guī)則X-Y補(bǔ) = X補(bǔ)+ -Y補(bǔ)1.3.3 無符號整數(shù):把最高有效位也作為數(shù)值處理的數(shù)稱為無符號整數(shù)。1.3.4 字符表示法(ASC

17、II碼):80x86機(jī)采用目前最常用的美國信息交換標(biāo)準(zhǔn)代碼ASCII碼表示。1.3.5 BCD碼:4位二進(jìn)制數(shù)編碼的十進(jìn)制數(shù)稱為BCD碼(又叫8421碼)。BCD碼是無符號整數(shù)1. 壓縮BCD碼:用4位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位。2. 非壓縮BCD碼:用8位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位。1.4 幾種基本的邏輯運(yùn)算1.4.1 “與”運(yùn)算(AND)Y = A·B = A B = A AND B1.4.2 “或”運(yùn)算(OR)Y = A + B = A B = A OR B1.4.3 “非”運(yùn)算(NOT)Y = 1.4.4 “異或”運(yùn)算(XOR)Y = B = A XOR B所有的邏輯運(yùn)算都是

18、按位操作的。第 2 章 80x86計(jì)算機(jī)組織【教學(xué)目的】本章內(nèi)容也是本課程的基礎(chǔ),通過本章學(xué)習(xí),使學(xué)生明確匯編語言程序設(shè)計(jì)所要掌握的存儲器的組織方式、CPU寄存器的結(jié)構(gòu)(編程結(jié)構(gòu))?!局攸c(diǎn)難點(diǎn)】CPU寄存器的結(jié)構(gòu)(編程結(jié)構(gòu))、存儲器的組織方式?!菊n 時(shí) 數(shù)】5學(xué)時(shí)。2.1 80x86微處理器1. 80x86是美國Intel公司生產(chǎn)的微處理器系列。2. 計(jì)算機(jī)主要由運(yùn)算器、控制器、存儲器和輸入輸出設(shè)備構(gòu)成。3. 中央處理器(central processing unit, CPU):把運(yùn)算器和控制器集成在一個(gè)芯片上,構(gòu)成中央處理機(jī)。80x86就是這樣一組微處理器系列。4. 很多計(jì)算機(jī)廠商把微處理

19、器芯片作為中央處理機(jī),再配上存儲器、輸入輸出設(shè)備和系統(tǒng)軟件等構(gòu)成微計(jì)算機(jī)系統(tǒng)。80x86微處理器系列的主要技術(shù)數(shù)據(jù)名稱:(1). 集成度:晶體管數(shù)是指芯片中所包含的晶體管數(shù)目,它說明器件的集成度;(2). 主頻是指芯片所用的主時(shí)鐘頻率,它直接影響計(jì)算機(jī)的運(yùn)行速度。(3). 數(shù)據(jù)總線負(fù)責(zé)計(jì)算機(jī)中數(shù)據(jù)在各組成部分之間的傳送。1). 數(shù)據(jù)總線寬度是指在芯片內(nèi)部數(shù)據(jù)傳送的寬度。2). 外部數(shù)據(jù)總線寬度則是指芯片內(nèi)和芯片外交換數(shù)據(jù)的寬度。(4). 地址總線寬度是指專用于傳送地址的總線寬度,根據(jù)這一數(shù)值(如為n)可確定處理機(jī)可以訪問的存儲器的最大范圍(尋址空間=2n)。1). 字節(jié)(byte):在計(jì)算機(jī)里

20、,8個(gè)二進(jìn)制位組成一個(gè)字節(jié),一般存儲器以字節(jié)為存儲信息的基本單位,用符號B來表示。在存儲器里一般用KB、MB、GB為存儲容量的單位。2). 1KB=1024B=210B,1MB=1024KB=220B,1GB=1024MB=230B5. 在計(jì)算機(jī)里,采用層次結(jié)構(gòu)的存儲器組織是解決存儲器容量、速度、價(jià)格三者矛盾的最有效方法。(1). 中間層次是主存儲器,又稱為內(nèi)存。(2). 比中間層次速度更高、但容量較小的一層稱為高速緩沖存儲器(cache)。(3). 比中間層次速度慢、但容量很大的一層稱為外存儲器。如磁帶、磁盤、光盤等。6. 提高計(jì)算機(jī)的工作速度可以說是微處理器芯片發(fā)展的核心問題。從80486

21、起,把協(xié)處理器集成到芯片中的目的也是為了提高浮點(diǎn)處理速度。字長的增加有利于提高計(jì)算機(jī)解題的精度。7. 從80286開始,在機(jī)器的工作方式上,除8086提供的實(shí)模式外,還增加了保護(hù)模式的工作方式。在80386中還增加了一種虛擬8086的工作模式。2.2 基于微處理器的計(jì)算機(jī)系統(tǒng)構(gòu)成2.2.1 硬件:是指能看得見、摸得著的物理部件。1. 組成計(jì)算機(jī)的三要素:CPU、存儲器(memory)和輸入/輸出(I/O)子系統(tǒng)。用系統(tǒng)總線連接。(1). 存儲器(內(nèi)存):計(jì)算機(jī)的記憶部件。(2). 中央處理器CPU:包括運(yùn)算器和控制器兩部分。1). 運(yùn)算器執(zhí)行所有的算術(shù)和邏輯運(yùn)算指令;2). 控制器則負(fù)責(zé)全機(jī)的

22、控制工作。(3). I/O子系統(tǒng):包括I/O設(shè)備及大容量存儲器兩類外部設(shè)備。1). I/O設(shè)備是指負(fù)責(zé)與計(jì)算機(jī)的外部世界通信用的輸入、輸出設(shè)備;2). 大容量存儲器是指可存儲大量信息的外部存儲器。2. 系統(tǒng)總線:把CPU、存儲器和I/O設(shè)備連接起來,用來傳送各部件之間的信息。系統(tǒng)總線的動(dòng)作由總線控制邏輯負(fù)責(zé)指揮。(1). 數(shù)據(jù)總線:傳送信息;(2). 地址總線:指出信息的來源和目的地;(3). 控制總線:規(guī)定總線的動(dòng)作。2.2.2 軟件:為運(yùn)行、管理和維護(hù)計(jì)算機(jī)而編制的各種程序的總和。分為系統(tǒng)軟件和用戶軟件兩大類。1. 系統(tǒng)軟件:由計(jì)算機(jī)生產(chǎn)廠家提供給用戶的一組程序。其核心是操作系統(tǒng)。它包括:

23、(1). 操作系統(tǒng)的主要部分是常駐監(jiān)督程序(monitor)。(2). I/O驅(qū)動(dòng)程序:對I/O設(shè)備進(jìn)行控制和管理。(3). 文件管理程序:處理存儲在外存儲器中的大量信息。(4). 文本編輯程序:建立、輸入或修改文本,并存入內(nèi)存儲器或大容量存儲器中(如EDIT等)。(5). 翻譯程序(translator)1). 匯編程序:把由用戶編制的匯編語言源程序翻譯成機(jī)器語言目標(biāo)程序。a. 匯編語言:一種與機(jī)器語言幾乎一 一對應(yīng)的符號語言,但在書寫時(shí)使用由字符串組成的助記符。b. 機(jī)器語言:由二進(jìn)制代碼組成的語言。c. 指令:計(jì)算機(jī)能識別并能直接加以執(zhí)行的二進(jìn)制的語句。2). 編譯程序:把高級語言源程序

24、翻譯成機(jī)器語言程序的系統(tǒng)程序。3). 解釋程序:對高級語言一邊解釋一邊執(zhí)行的翻譯程序。(6). 連接程序(linker):把要執(zhí)行的程序與庫文件或其他已經(jīng)翻譯的子程序連接在一起,形成機(jī)器能執(zhí)行的程序。(7). 裝入程序(loader):把程序從外存儲器裝入內(nèi)存儲器,以便機(jī)器運(yùn)行。(8). 調(diào)試程序(debug):系統(tǒng)提供給用戶能監(jiān)督和控制用戶程序的一種工具。(9). 系統(tǒng)程序庫和用戶程序庫:各種標(biāo)準(zhǔn)程序、子程序及一些文件的集合。2. 用戶軟件:用戶自行編制的各種應(yīng)用程序。2.3 中央處理機(jī)2.3.1 中央處理機(jī)CPU的組成1. CPU的任務(wù)是執(zhí)行存放在存儲器里的指令序列。2. CPU芯片中除高

25、速緩沖存儲器之外,主要由以下三部分組成:(1). 算術(shù)邏輯部件(arithmetic logic unit,ALU):用來進(jìn)行算術(shù)和邏輯運(yùn)算。(2). 控制邏輯:負(fù)責(zé)對全機(jī)的控制工作。(3). 工作寄存器:用來存放計(jì)算過程中所需要的或所得到的各種信息。2.3.2 80x86寄存器組寄存器可以分為程序可見的寄存器和程序不可見的寄存器兩大類。 程序可見的寄存器是指在匯編語言程序設(shè)計(jì)中用到的寄存器,分為通用寄存器、專用寄存器和段寄存器3類。 程序不可見的寄存器是指一般應(yīng)用程序設(shè)計(jì)中不用而由系統(tǒng)所用的寄存器。1. 通用寄存器(1). 數(shù)據(jù)寄存器:AX、BX、CX、DX,四個(gè)16位通用寄存器,用來暫時(shí)存

26、放計(jì)算過程中所用到的操作數(shù)、結(jié)果和其他信息。既可以以字形式(如AX)也可以以字節(jié)形式(如AH、AL)訪問。1). AX(accumulator):累加器,算術(shù)運(yùn)算的主要寄存器。所有的I/O指令都使用這一寄存器與外部設(shè)備傳送信息。2). BX(base):通用寄存器,在計(jì)算存儲器地址時(shí)常用作基址寄存器。3). CX(count):通用寄存器,在循環(huán)和串操作指令中用作隱含的計(jì)數(shù)器。4). DX(data):通用寄存器,在作雙字長運(yùn)算時(shí)把DX和AX合在一起存放一個(gè)雙字長數(shù),DX用來存放高位字。對某些I/O操作,DX用于對I/O端口的寄存器間接尋址。(2). 指針及變址寄存器:SP、BP、SI、DI,

27、四個(gè)16位寄存器。1). SP:堆棧指針寄存器。2). BP:基址指針寄存器。3). SI:源變址寄存器。4). DI:目的變址寄存器。(3). 對于80386及其后繼機(jī)型則是32位的通用寄存器,包括EAX、EBX、ECX、EDX、ESP、EBP、EDI和ESI。這些寄存器都可以存放數(shù)據(jù),也可以當(dāng)32位的地址寄存器使用。2. 專用寄存器:IP、SP、FLAGS,3個(gè)16位寄存器。(1). IP:指令指針寄存器。存放代碼段中的偏移地址。80386及其后繼機(jī)型則是EIP。(2). SP:堆棧指針寄存器,指示棧頂?shù)钠频刂贰?0386及其后繼機(jī)型則是ESP。(3). FLAGS:標(biāo)志寄存器,又稱為程

28、序狀態(tài)字寄存器(program status word, PSW)。由條件碼標(biāo)志(flag)、控制標(biāo)志和系統(tǒng)標(biāo)志構(gòu)成。80386及其后繼機(jī)型則是EFLAGS。8086/8088的FLAGS如下所示:OFDFIFTFSFZFAFPFCF1). 條件碼:用來記錄程序中運(yùn)行結(jié)果的狀態(tài)信息,它們是根據(jù)有關(guān)指令的運(yùn)行結(jié)果由CPU自動(dòng)設(shè)置的。由于這些狀態(tài)信息往往作為后續(xù)條件轉(zhuǎn)移指令的轉(zhuǎn)移控制條件,所以稱為條件碼。a. OF:溢出標(biāo)志(overflow flag)。結(jié)果溢出OF=1,否則OF=0。b. SF:符號標(biāo)志(sign flag)。結(jié)果為負(fù)SF=1,否則SF=0。c. ZF:零標(biāo)志(zero fla

29、g)。結(jié)果為0時(shí)ZF=1,否則ZF=0。d. CF:進(jìn)位標(biāo)志(carry flag)。最高有效位有進(jìn)位或借位CF=1,否則CF=0。e. AF:輔助進(jìn)位標(biāo)志或半進(jìn)位標(biāo)志(auxiliary carry flag)。半個(gè)字節(jié)產(chǎn)生的進(jìn)位或借位時(shí)AF=1,否則AF=0。f. PF:奇偶標(biāo)志(parity flag)。結(jié)果低8位中所含的1的個(gè)數(shù)為偶數(shù)時(shí)PF=1,否則PF=0。2). 控制標(biāo)志位:為方向標(biāo)志(direction flag, DF),在串處理指令中控制處理信息的方向用。a. DF=1:變址寄存器SI和DI減量,使串處理從高地址向低地址方向處理。b. DF=0:變址寄存器SI和DI增量,使串

30、處理從低地址向高地址方向處理。3). 系統(tǒng)標(biāo)志位:可以用于I/O、可屏蔽中斷、程序調(diào)試、任務(wù)切換和系統(tǒng)工作方式等的控制。a. TF:陷阱標(biāo)志(trap flag, TF),又稱單步標(biāo)志。用于調(diào)試時(shí)的單步方式操作。TF=1時(shí)每條指令執(zhí)行完后產(chǎn)生陷阱(中斷),TF=0時(shí)不產(chǎn)生陷阱。b. IF:中斷標(biāo)志(interrupt flag, IF)。IF=1時(shí)允許可屏蔽中斷請求,IF=0時(shí)禁止可屏蔽中斷。c. I/O 特權(quán)級(I/O privilege level, IOPL),在保護(hù)模式下,用于控制對I/O地址空間的訪問。(4). 標(biāo)志位的測試:用調(diào)試程序DEBUG測試。測試含義見書24頁表2.2所示。

31、3. 段寄存器:是一種專用寄存器,它們專用于存儲器尋址,用來直接或間接地存放段地址。在80286以前的處理器中只有CS、DS、SS、ES四個(gè)16位寄存器。從80386起增加了FS和GS兩個(gè)附加的數(shù)據(jù)段寄存器。2.4 存儲器2.4.1 存儲單元的地址和內(nèi)容:1. 字節(jié):每8位二進(jìn)制數(shù)組成一個(gè)字節(jié)(Byte)。在存儲器里是以字節(jié)為單位存儲信息。2. 字:16位二進(jìn)制數(shù)(2個(gè)字節(jié))組成一個(gè)字。分成低位字節(jié)和高位字節(jié)存儲。3. 存儲單元的地址:為了正確的存放或取得信息,每一個(gè)字節(jié)單元給以一個(gè)唯一的存儲器地址,稱為物理地址。以字節(jié)為單位給存儲單元按二進(jìn)制從0開始順序進(jìn)行的編號。它是無符號的二進(jìn)制整數(shù),書

32、寫格式為十六進(jìn)制數(shù)。(1). 選址能力:若干位(如x位)二進(jìn)制數(shù)(相當(dāng)于若干根地址線)所能選擇的最大存儲單元的地址數(shù)(2x)。(2). 1K=1024=210。所以16位二進(jìn)制數(shù)的選址能力為216=64KB。用0FFFFH表示。IBM PC機(jī)(8086/8088 CPU)的選址能力為220=1MB。4. 存儲單元的內(nèi)容:該存儲單元存放的信息。存儲器的內(nèi)容取之不盡。(1). 字節(jié)的存儲:直接存入某存儲單元。(2). 字的存儲:一個(gè)字存入存儲器要占用兩個(gè)單元。存放時(shí),低位字節(jié)存入低地址單元,高位字節(jié)存入高位地址單元。字單元的地址用它的低地址表示,應(yīng)盡量為偶數(shù)地址。(3). 如果用X表示某存儲單元的

33、地址,則X單元的內(nèi)容可以表示為(X);假如X單元中存放著Y,而Y又是一個(gè)地址,則可用(Y)=(X)來表示Y單元的內(nèi)容。(4). 存儲器的內(nèi)容取之不盡。2.4.2 實(shí)模式存儲器尋址80x86中除8086/8088只能在實(shí)模式下工作外,其他微處理器均可在實(shí)模式或保護(hù)模式下工作。實(shí)模式就是為8086/8088而設(shè)計(jì)的工作方式,實(shí)模式下允許的最大尋址空間為1MB。它要解決在16位字長的機(jī)器里怎么提供20位地址的問題,而解決的辦法是采用存儲器地址分段的方法。1. 存儲器地址的分段(1). 段:程序員在編制程序時(shí)要把存儲器劃分成段,在每個(gè)段內(nèi)地址空間是線性增長的。段的最大長度為64KB,以便能用16位二進(jìn)

34、制數(shù)表示段內(nèi)地址。1). 小段:從0地址開始,每16字節(jié)為一小段。小段的首地址用16進(jìn)制數(shù)表示時(shí)其最低位為0。2). 段的起始地址:段不能起始于任意地址,而必須從任一小段(paragraph)的首地址開始。(2). 物理地址、段地址、偏移地址1). 物理地址(PA):在1MB的存儲器里,每一個(gè)存儲單元都有一個(gè)唯一的20位地址,稱為該存儲單元的物理地址(20位)。20位物理地址由16位段地址和16位偏移地址組成。2). 段地址:段起始地址的高16位值(16位),低4位固定為0被省去。3). 偏移地址(偏移量EA):指在段內(nèi)相對于段起始地址的偏移值(16位)。4). 物理地址 = 段地址×

35、;10H + 偏移地址。用段地址:偏移地址表示。2. 段寄存器:在808680286中,有4個(gè)專門存放段地址的寄存器。(1). 代碼段CS:存放當(dāng)前正在運(yùn)行的程序。(2). 數(shù)據(jù)段DS:存放當(dāng)前運(yùn)行程序所用的數(shù)據(jù)。(3). 堆棧段SS:定義堆棧的所在區(qū)域。(4). 附加段ES:附加的數(shù)據(jù)段。在80386及其后又增加了FS和GS兩個(gè)附加數(shù)據(jù)段寄存器。除非專門指定,一般情況下,各段在存儲器中的分配是由操作系統(tǒng)負(fù)責(zé)的。而且允許段重疊。如果段超過64KB則將其作為2個(gè)以上的段,并動(dòng)態(tài)修改段地址。2.4.3 保護(hù)模式存儲器尋址從80286起,就引出了保護(hù)模式的存儲器尋址,其直接原因:首先是實(shí)模式的尋址空

36、間為1MB,這不能滿足80286的16MB和80386等的4GB或更多的地址空間尋址。其次是為了使微機(jī)系統(tǒng)能支持多任務(wù)處理。在系統(tǒng)支持多任務(wù)功能的同時(shí),系統(tǒng)也支持了虛擬存儲器特性。1. 邏輯地址(1). 在實(shí)模式下邏輯地址即為段地址:偏移地址。物理地址 = 段地址×10H + 偏移地址(2). 在保護(hù)模式下邏輯地址則由選擇器和偏移地址兩部分組成。選擇器存放在段寄存器中,但它不能直接表示段基地址,而由操作系統(tǒng)通過一定的方法取得段基地址,再和偏移地址相加,從而求得所選存儲單元的物理地址。2. 描述符(1). 描述符用來描述段的大小、段在存儲器中的位置及其控制和狀態(tài)信息,它由基地址、界限、

37、訪問權(quán)和附加字段四部分組成。描述符的內(nèi)容是由系統(tǒng)設(shè)置的,而不是由用戶建立的。1). 基地址(base)部分用來指定段的起始地址;2). 界限(limit)部分存放著該段的段長度;3). 訪問權(quán)(access rights)部分用來說明該段在系統(tǒng)中的功能,并給出該段的一些控制信息;4). 附加字段部分在386及其后繼機(jī)型中存在,它用來表示該段的一些屬性。(2). 系統(tǒng)按選擇器的內(nèi)容,根據(jù)指定的途徑可以找到所選段對應(yīng)的描述符,從而可以根據(jù)其給出的基地址和界限值,確定所要找的存儲單元所在的段,再加上邏輯地址中指定的偏移地址,就可以找到相應(yīng)的存儲單元。2.5 外部設(shè)備1. 端口寄存器:外部設(shè)備與主機(jī)(

38、CPU和存儲器)的通信是通過接口進(jìn)行的。每個(gè)接口包括一組寄存器稱為端口寄存器。(1). 數(shù)據(jù)寄存器:存放要在外設(shè)和主機(jī)之間傳送的數(shù)據(jù)。(2). 狀態(tài)寄存器:保存外設(shè)或接口的狀態(tài)信息。(3). 命令寄存器:CPU發(fā)給外設(shè)或接口的控制命令通過它傳送。2. 端口地址(端口號):主機(jī)給外設(shè)中的每個(gè)寄存器定義一個(gè)二進(jìn)制數(shù)的編號即為端口地址。其地址空間獨(dú)立于內(nèi)存地址之外可達(dá)64KB。其范圍為0000FFFFH。3. 主機(jī)與外設(shè)交換信息:通過輸入/輸出指令完成。4. BIOS、DOS功能調(diào)用:操作系統(tǒng)提供的中斷服務(wù)子程序。(1). BIOS存放在機(jī)器的ROM中,比DOS的層次還要低。(2). DOS功能調(diào)用

39、是DOS的一個(gè)組成部分,在開機(jī)時(shí)由操作系統(tǒng)從系統(tǒng)磁盤裝入存儲器。第 3 章 80x86的指令系統(tǒng)和尋址方式【教學(xué)目的】本章內(nèi)容是本課程的重點(diǎn),通過本章學(xué)習(xí),使學(xué)生掌握80x86系列CPU(特別是8086CPU)的指令系統(tǒng)和尋址方式。對傳送類指令、算術(shù)運(yùn)算類指令、控制轉(zhuǎn)移類指令要非常熟悉。【重點(diǎn)難點(diǎn)】傳送類指令、算術(shù)運(yùn)算類指令、控制轉(zhuǎn)移類指令、存儲器尋址方式、段內(nèi)直接尋址的地址位移量?!菊n 時(shí) 數(shù)】12學(xué)時(shí)。1. 指令系統(tǒng):計(jì)算機(jī)能夠提供給用戶的一組指令集即為該計(jì)算機(jī)的指令系統(tǒng)。2. 指令的組成:計(jì)算機(jī)中的指令由操作碼字段和操作數(shù)字段組成。(1). 操作碼字段:指示計(jì)算機(jī)所要執(zhí)行的操作。(2).

40、 操作數(shù)字段:指出在指令執(zhí)行操作的過程中所需要的操作數(shù)。3. 指令的格式:操作碼 操作數(shù) ,操作數(shù) ,操作數(shù) 。8086/8088 CPU規(guī)定操作數(shù)不能超過兩個(gè)。但在80286及其后的CPU可以使用3操作數(shù)指令。4. 源操作數(shù)和目的操作數(shù):使用兩地址指令的兩個(gè)操作數(shù)分別稱為源操作數(shù)和目的操作數(shù)。5. 操作數(shù)的表示方法使用的是尋址方式。尋址方式是規(guī)定尋找操作數(shù)的方法。6. 匯編語言:符號語言。用助記符來表示操作碼,用符號或符號地址來表示操作數(shù)或操作數(shù)地址。它與機(jī)器指令一 一對應(yīng)。3.1 80x86的尋址方式3.1.1 與數(shù)據(jù)有關(guān)的尋址方式這種尋址方式用來確定操作數(shù)地址從而找到操作數(shù)。1. 立即數(shù)

41、尋址方式:操作數(shù)直接存放在指令中,緊跟在操作碼之后,這種操作數(shù)稱為立即數(shù)。它作為指令的一部分存放在代碼段里。如:MOV AL, 6;MOV AX, 300AH;MOV EAX, 2030300AH2. 寄存器尋址方式:操作數(shù)在寄存器中,指令指定寄存器號。如:MOV AL, AH3. 直接尋址方式:操作數(shù)的有效地址只包含位移量一種成份,其值就存放在代碼段中的指令的操作碼之后。位移量的值即操作數(shù)的有效地址EA。如:MOV AX, VALUE; MOV AX, 2000H(1). 由此及往下的各種尋址方式的操作數(shù)都在除代碼段以外的存儲區(qū)中。用方括號(“ ”)括起來的為存儲器操作數(shù)。寄存器名稱外加小括

42、號“( )”表示是該寄存器的內(nèi)容。(2). 有效地址 (effective address, EA):即操作數(shù)的偏移地址。自此開始的尋址方式即為求得有效地址(EA)的不同途徑。有效地址的計(jì)算可以用下式表示:EA基址(變址×比例因子)位移量有效地址可以由以下四種成分組成:1). 位移量(displacement)是存放在指令中的一個(gè)8位、16位或32位的數(shù),但它不是立即數(shù),而是一個(gè)地址。2). 基址(base)是存放在基址寄存器中的內(nèi)容。它是有效地址中的基址部分,通常用來指向數(shù)據(jù)段中數(shù)組或字符串的首地址。3). 變址(index) 是存放在變址寄存器中的內(nèi)容。它通常用來訪問數(shù)組中的某個(gè)

43、元素或字符串中的某個(gè)字符。4). 比例因子(scale factor)是386及其后繼機(jī)型新增加的尋址方式中的一個(gè)術(shù)語,其值可為1、2、4或8。在尋址中可用變址寄存器的內(nèi)容乘以比例因子來取得變址值。(3). 段跨越前綴:80x86允許數(shù)據(jù)存放在數(shù)據(jù)段以外的段中,應(yīng)在指令中用該段寄存器加冒號(“:”)即段跨越前綴來指定該段。只要有BP則隱含的段寄存器為SS。否則隱含的段寄存器為DS。如:MOV AX, ES: VALUE。但是在以下三種情況下,不允許使用段跨越前綴,它們是:1). 串處理指令的目的串必須使用ES段;2). PUSH指令的目的和POP指令的源必須用SS段;3). 指令代碼必須存放在

44、CS段中。(4). 80x86 CPU中為了使指令字不要過長,規(guī)定雙操作數(shù)指令的兩個(gè)操作數(shù)中,只能有一個(gè)使用存儲器尋址方式,這就是一個(gè)變量常常先要送到寄存器的原因。4. 寄存器間接尋址方式:操作數(shù)的有效地址只包含基址寄存器或變址寄存器內(nèi)容一種成份。有效地址就在某個(gè)寄存器中,而操作數(shù)則在存儲器中??墒褂枚慰缭角熬Y。如:MOV AX, ES: BX5. 寄存器相對尋址方式(或稱直接變址尋址方式):操作數(shù)的有效地址為基址寄存器或變址寄存器的內(nèi)容和指令中指定的位移量之和,有效地址由兩部分組成??墒褂枚慰缭角熬Y(又稱為段超越)。如:MOV ES: STRINGSI, DL對80386及以后機(jī)型。寄存器為

45、EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP。位移量可增加到32位的位移量(無16位位移量)。下同。6. 基址變址尋址方式:操作數(shù)的有效地址EA是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和??墒褂枚慰缭角熬Y。如:MOV AX, ES: BXSI7. 相對基址變址尋址方式:操作數(shù)的有效地址EA是一個(gè)基址寄存器與一個(gè)變址寄存器的內(nèi)容和指令中指定的位移量之和??墒褂枚慰缭角熬Y。如:MOV ES: MASKBXSI, AX8. 比例變址尋址方式:操作數(shù)的有效地址EA是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上位移量之和。如:MOV MASKESI*4, EAX9. 基址比例變址尋址

46、方式:操作數(shù)的有效地址EA是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上基址寄存器的內(nèi)容之和。如:MOV EAXESI*4, EAX10. 相對基址比例變址尋址方式:操作數(shù)的有效地址EA是變址寄存器的內(nèi)容乘以指令中指定的比例因子,加上基址寄存器的內(nèi)容,再加上位移量之和。如:MOV TABLEEAXESI*4, EAX11. 端口(輸入/輸出)尋址方式:一個(gè)操作數(shù)必須為AX或AL或EAX,另一個(gè)用端口直接尋址方式(端口號256)或端口間接尋址方式(DX的內(nèi)容為端口號)。如:IN AL, 0ADH ; OUT DX, AX3.1.2 與轉(zhuǎn)移地址有關(guān)的尋址方式這種尋址方式用來確定轉(zhuǎn)移指令及CALL

47、指令的轉(zhuǎn)向地址。1. 段內(nèi)直接尋址:轉(zhuǎn)向的有效地址是當(dāng)前IP內(nèi)容和指令中指定的8位或16位位移量之和。(操作數(shù)OPR采用相對尋址方式。) 當(dāng)它用于條件轉(zhuǎn)移指令時(shí),位移量只能是8位(386及其后繼機(jī)型條件轉(zhuǎn)移指令的位移量可為8位或32位)。2. 段內(nèi)間接尋址:轉(zhuǎn)向的有效地址是一個(gè)寄存器或是一個(gè)存儲單元的內(nèi)容。(操作數(shù)OPR采用除立即數(shù)以外的任一數(shù)據(jù)尋址方式。)3. 段間直接尋址:指令中直接提供了轉(zhuǎn)向的段地址和偏移地址。(操作數(shù)OPR采用立即數(shù)尋址方式。)(IP)EA=OFFSET OPR ;OPR的偏移地址(IP)(CS)SEG OPR ;OPR的段地址(CS)4. 段間間接尋址:用存儲器中兩個(gè)

48、相連字來取代IP和CS的內(nèi)容。(操作數(shù)OPR采用存儲器尋址方式。)(IP)EA=存儲器中雙字單元的低字內(nèi)容(CS)EA+2=存儲器中雙字單元的高位字內(nèi)容附:書上3.1.2所用到的操作符意義:1. SHORT:屬性操作符,表示段內(nèi)短程轉(zhuǎn)移。2. PTR:屬性操作符,建立一個(gè)符號地址(取后面內(nèi)容的地址)。3. NEAR:類型操作符,距離類型,段內(nèi)近程。4. FAR:類型操作符,距離類型,段間遠(yuǎn)程。5. WORD:類型操作符,數(shù)據(jù)類型,字。6. DWORD:類型操作符,數(shù)據(jù)類型,雙字。7. NEAR PTR:取段內(nèi)近程地址值操作符。8. FAR PTR:取段間遠(yuǎn)程地址值操作符。9. WORD PTR

49、:取字長地址值操作符。10. DWORD PTR:取雙字長地址值操作符。3.2 程序占有的空間和執(zhí)行時(shí)間1. 80x86的機(jī)器指令是可變字節(jié)指令,即不同指令或不同尋址方式的機(jī)器指令長度不同。程序量越大,占有的存儲空間也越大。2. 當(dāng)程序在計(jì)算機(jī)上運(yùn)行時(shí),訪問存儲器取得操作數(shù)或者存放結(jié)果需要時(shí)間,運(yùn)算器執(zhí)行指令也需要時(shí)間。3. 完成同樣功能的不同程序,可能在占有存儲空間和執(zhí)行時(shí)間上有很大差別。程序員在編制程序時(shí),應(yīng)盡量考慮節(jié)省程序所占用的空間和所使用的時(shí)間。3.3 80x86的指令系統(tǒng)3.3.1 數(shù)據(jù)傳送指令:負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲單元中。1. 通用數(shù)據(jù)傳送指令(1). MO

50、V傳送指令指令格式:MOV DST,SRC;(DST)(SRC)。DST表示目的操作數(shù), SRC表示源操作數(shù)說 明:.DST為除CS外的各寄存器尋址方式或任意存儲器尋址方式。SRC為任意數(shù)據(jù)尋址方式。.DST、SRC不能同時(shí)為存儲器尋址方式,也不能同時(shí)為段寄存器尋址方式,而且在DST為段寄存器時(shí),SRC不能為立即數(shù)。.MOV指令不影響標(biāo)志位。(2). MOVSX帶符號擴(kuò)展傳送指令(386及其后繼機(jī)型可用)指令格式:MOVSX DST,SRC;(DST)符號擴(kuò)展(SRC)說 明:.DST必須為16位或32位寄存器。SRC為8位或16位的寄存器或存儲單元的內(nèi)容。傳送時(shí)把源操作數(shù)符號擴(kuò)展送入目的寄存

51、器。.MOVSX指令不影響標(biāo)志位。(3). MOVZX帶零擴(kuò)展傳送指令(386及其后繼機(jī)型可用)指令格式:MOVZX DST,SRC;(DST)零擴(kuò)展(SRC)說 明:.DST必須為16位或32位寄存器。SRC為8位或16位的寄存器或存儲單元的內(nèi)容。傳送時(shí)把源操作數(shù)零擴(kuò)展送入目的寄存器。.MOVZX指令不影響標(biāo)志位。(4). PUSH進(jìn)棧指令指令格式:PUSH SRC;16位指令:(SP)(SP) 2 (SP)+1,(SP)(SRC)32位指令:(ESP)(ESP) 4 (ESP)+3, (ESP)+2, (ESP)+1, (ESP)(SRC)說 明:.堆棧:計(jì)算機(jī)開辟的以“后進(jìn)先出”方式工作

52、的存儲區(qū)。它必須存在于堆棧段中,只有一個(gè)出入口,所以只有一個(gè)堆棧指針SP或ESP。SP或ESP的內(nèi)容在任何時(shí)候都指向當(dāng)前的棧頂。.8086中的SRC不能為立即數(shù)尋址方式。286及其后繼機(jī)型可用立即數(shù)尋址方式。.PUSH指令不影響標(biāo)志位。(5). POP出棧指令指令格式:POP DST;16位指令:(DST)(SP)+1,(SP) (SP)(SP)+232位指令:(DST)(ESP)+3, (ESP)+2, (ESP)+1, (ESP) (ESP)(ESP)+4說 明:.DST為除立即數(shù)及CS寄存器以外的任意數(shù)據(jù)尋址方式。.POP指令不影響標(biāo)志位。(6). PUSHA/ PUSHAD所有寄存器進(jìn)

53、棧指令指令格式:PUSHA;16位通用寄存器依次進(jìn)棧,進(jìn)棧次序?yàn)椋篈X、CX、DX、BX、指令執(zhí)行前的SP、BP、SI、DI。指令執(zhí)行后(SP)(SP) 16仍指向棧頂。指令格式:PUSHAD;32位通用寄存器依次進(jìn)棧,進(jìn)棧次序?yàn)椋篍AX、ECX、EDX、EBX、指令執(zhí)行前的ESP、EBP、ESI、EDI。指令執(zhí)行后(SP)(SP) 32仍指向棧頂。32位地址時(shí)用ESP。(7). POPA/ POPAD所有寄存器出棧指令指令格式:POPA;16位通用寄存器依次出棧,出棧次序?yàn)椋篋I、SI、BP、SP、BX、DX、CX、AX。指令執(zhí)行后(SP)(SP) +16仍指向棧頂。注意SP內(nèi)容并未恢復(fù)。指

54、令格式:POPAD;32位通用寄存器依次出棧,出棧次序?yàn)椋篍DI、ESI、EBP、ESP、EBX、EDX、ECX、EAX。指令執(zhí)行后(SP)(SP) +32仍指向棧頂。注意ESP內(nèi)容并未恢復(fù)。32位地址時(shí)用ESP。說 明:.PUSHA和POPA可用于286及其后繼機(jī)型。PUSHAD和POPAD可用于386及其后繼機(jī)型。.PUSHA、POPA、PUSHAD、POPAD指令均不影響標(biāo)志位。(8). XCHG交換指令指令格式:XCHG OPR1,OPR2 ;(OPR1)(OPR2)。其中OPR表示操作數(shù)說 明:.OPR1、OPR2為除段寄存器以外的各寄存器尋址方式或任意存儲器尋址方式。.OPR1、O

55、PR2不能同時(shí)為存儲器尋址方式。.XCHG指令不影響標(biāo)志位。2. 累加器專用傳送指令(1). IN輸入指令長格式為:IN AL,PORT(字節(jié));(AL)(PORT) (字節(jié))IN AX,PORT(字);(AX)(PORT+1,PORT) (字)IN EAX,PORT(雙字);(EAX)(PORT+3, PORT+2, PORT+1,PORT) (雙字)短格式為:IN AL,DX(字節(jié));(AL)(DX) (字節(jié))IN AX,DX(字);(AX)(DX)+1,(DX) (字)IN EAX,DX(雙字);(EAX)(DX)+3, (DX)+2, (DX)+1, (DX) (雙字)說 明:.80x86 CPU規(guī)定只能用低16位地址總線(A1

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論