IBMPC匯編語言教案+習(xí)題_第1頁(yè)
IBMPC匯編語言教案+習(xí)題_第2頁(yè)
IBMPC匯編語言教案+習(xí)題_第3頁(yè)
IBMPC匯編語言教案+習(xí)題_第4頁(yè)
IBMPC匯編語言教案+習(xí)題_第5頁(yè)
已閱讀5頁(yè),還剩158頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄第第 1 章章 基礎(chǔ)知識(shí)基礎(chǔ)知識(shí).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ī)組織計(jì)算機(jī)組織 .42.1 80X86 微處理器.42.2 基于微處理器的計(jì)算機(jī)系統(tǒng)構(gòu)成 .42.3 中央處理機(jī) .52.4 存儲(chǔ)器 .62.5 外部設(shè)備 .7第第 3 章章 80X86 的指令系統(tǒng)和尋址方式的指令系統(tǒng)和尋址方式 .83.1 80X86 的尋址方式.83.2 程序占有的空間和執(zhí)行時(shí)間 .103.3 80X86 的指令系統(tǒng).10第第 4 章章 匯編語言程

2、序格式匯編語言程序格式.264.1 匯編程序功能 .264.2 偽操作 .264.3 匯編語言程序格式 .304.4 匯編語言程序的上機(jī)過程 .33第第 5 章章 循環(huán)與分支程序設(shè)計(jì)循環(huán)與分支程序設(shè)計(jì).355.1 循環(huán)程序設(shè)計(jì) .355.2 分支程序設(shè)計(jì) .365.3 如何在實(shí)模式下發(fā)揮 80386 及其后繼機(jī)型的優(yōu)勢(shì) .36第第 6 章章 子程序結(jié)構(gòu)子程序結(jié)構(gòu).376.1 子程序的設(shè)計(jì)方法 .376.2 子程序的嵌套 .386.3 子程序舉例 .38第第 7 章章 高級(jí)匯編語言技術(shù)高級(jí)匯編語言技術(shù).397.1 宏 匯 編.397.2 重 復(fù) 匯 編.407.3 條 件 匯 編.41第第 8

3、章章 輸入輸入/輸出程序設(shè)計(jì)輸出程序設(shè)計(jì).428.1 I/O 設(shè)備的數(shù)據(jù)傳送方式.428.2 程序直接控制 I/O 方式.438.3 中斷傳送方式 .43第第 9 章章 BIOS 和和 DOS 中斷中斷 .469.1 鍵盤 I/O.469.2 顯示器 I/O.489.3 打印機(jī) I/O.499.4 串行通信口 I/O.50第第 10 章章 圖形與發(fā)聲系統(tǒng)的程序設(shè)計(jì)圖形與發(fā)聲系統(tǒng)的程序設(shè)計(jì).5110.1 顯示方式 .5110.2 視頻顯示存儲(chǔ)器 .5110.3 EGA/VGA 圖形程序設(shè)計(jì).5210.4 通用發(fā)聲程序 .5310.5 樂曲程序 .54第第 11 章章 磁盤文件存取技術(shù)磁盤文件存取

4、技術(shù).5511.1 磁盤的記錄方式 .5511.2 文件代號(hào)式磁盤存取 .5611.3 字符設(shè)備的文件代號(hào)式 I/O.5711.4 BIOS 磁盤存取功能.58附錄:IBMPC 匯編語言程序設(shè)計(jì)習(xí)題參考答案 .59第第 一一 章章.習(xí)習(xí) 題題.59第第 二二 章章.習(xí)習(xí) 題題.60第第 三三 章章.習(xí)習(xí) 題題.61第第 四四 章章.習(xí)習(xí) 題題.74第第 五五 章章.習(xí)習(xí) 題題.79第第 六六 章章.習(xí)習(xí) 題題.97第第 七七 章章.習(xí)習(xí) 題題.110第第 八八 章章.習(xí)習(xí) 題題.117第第 九九 章章.習(xí)習(xí) 題題.122第第 十十 章章.習(xí)習(xí) 題題.125第第 十一十一 章章.習(xí)習(xí) 題題.13

5、6ceedcad444c8beba8ccfe9bc3771a54d.pdf - 1 - 第第 1 章章 基礎(chǔ)知識(shí)基礎(chǔ)知識(shí)【教學(xué)目的教學(xué)目的】本章內(nèi)容是本課程的基礎(chǔ),通過本章學(xué)習(xí),使學(xué)生明確匯編語言程序設(shè)計(jì)的學(xué)科性質(zhì)、基本內(nèi)容和學(xué)習(xí)意義,掌握數(shù)制的轉(zhuǎn)換、數(shù)據(jù)的編碼,了解本門課程的教學(xué)要求和學(xué)習(xí)方法。【重點(diǎn)難點(diǎn)重點(diǎn)難點(diǎn)】二進(jìn)制數(shù)及其與其它數(shù)制的轉(zhuǎn)換、補(bǔ)碼及其運(yùn)算。【課課 時(shí)時(shí) 數(shù)數(shù)】3 學(xué)時(shí)。1.1 進(jìn)進(jìn)位位計(jì)計(jì)數(shù)制與不同基數(shù)的數(shù)之?dāng)?shù)制與不同基數(shù)的數(shù)之間間的的轉(zhuǎn)換轉(zhuǎn)換1.1.1 二進(jìn)制數(shù)1. 十進(jìn)制數(shù):(Decimal)(數(shù)后面加 D 或省略表示的是十進(jìn)制數(shù))(1). 十進(jìn)制數(shù)表示為:anan -

6、1a0.a -1a -2a -m 其含義如下:imniimm2211001n1nnn10a10a10a10a10a10a10aN1). 基數(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.a -1a -2a -m 其含義如下:imniimm2211001n1nnnrrararararararaN1). 基數(shù)為 r2). r 個(gè)數(shù)碼

7、 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 其含義如下:imniimm2211001n1nnn22a2a2a2a2a2a2aN1). 基數(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ù)的值。即如上述

8、多項(xiàng)式展開后所得到的和。4. 十六進(jìn)制數(shù):(Hexadecimal)(數(shù)后面加 H 表示十六進(jìn)制數(shù))(1). 十六進(jìn)制數(shù)表示為:anan -1a0.a -1a -2a -m 其含義如下:imniimm2211001n1nnnH16a16a16a16a16a16a16aNceedcad444c8beba8ccfe9bc3771a54d.pdf - 2 - 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)所得到

9、的乘積之和即為該數(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). 降冪法:首先寫出要轉(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ù)的最低位,把得到的商

10、再除以 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)制小數(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(Bina

11、ry digit 的縮寫)是量度信息的最小單位,1 比特為二進(jìn)制的一位包含的信息量。(2). 字節(jié)(Byte)。作為一個(gè)單位來處理的一串二進(jìn)制數(shù)位,通常由 8 位二進(jìn)制數(shù)位組成一個(gè)字節(jié)。一個(gè)字節(jié)可以代表一個(gè)數(shù)字、一個(gè)字母或一個(gè)特殊符號(hào)。也是計(jì)算機(jī)存儲(chǔ)容量的單位。(3). 字(Word)。在計(jì)算機(jī)中,一般稱兩個(gè)字節(jié)為一個(gè)字。(4). 字長(zhǎng)(Word Length)。計(jì)算機(jī)的每個(gè)字所包含的位數(shù)稱為字長(zhǎng)。字長(zhǎng)是計(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ù)字為

12、一組用一位十六進(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)展開求和即為十進(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)值,并在

13、相應(yīng)位記以十六進(jìn)制的商;再將余數(shù)除以下一位權(quán)值,并記下商和余數(shù);如此不斷反復(fù),直到該數(shù)為 0 為止。2). 除法:同前,整數(shù)部分采用除基(16)取余法,小數(shù)部分采用乘基(16)取整法直到所需的精度為止來進(jìn)行轉(zhuǎn)換。1.2 二二進(jìn)進(jìn)制數(shù)和十六制數(shù)和十六進(jìn)進(jìn)制數(shù)的運(yùn)算制數(shù)的運(yùn)算1.2.1 二進(jìn)制數(shù)的運(yùn)算1. 加法規(guī)則:0+0=0,0+1=1,1+0=1,1+1=0 (進(jìn)位 1)2. 乘法規(guī)則:00=0,01=0,10=0,11=1ceedcad444c8beba8ccfe9bc3771a54d.pdf - 3 - 1.2.2 十六進(jìn)制數(shù)的運(yùn)算:按照逢 16 進(jìn) 1 的原則進(jìn)行計(jì)算。1.3 計(jì)計(jì)算機(jī)中

14、數(shù)和字符的表示算機(jī)中數(shù)和字符的表示1.3.1 數(shù)的補(bǔ)碼表示1. 機(jī)器數(shù):在機(jī)器中以數(shù)值化表示的連同其符號(hào)在內(nèi)的一個(gè)數(shù)稱為機(jī)器數(shù)。一般用最高有效位來表示符號(hào),正數(shù)用 0 表示,負(fù)數(shù)用 1 表示。2. 補(bǔ)碼表示法0X X20X XXn;補(bǔ)3. 補(bǔ)碼求法(1). 正數(shù)的補(bǔ)碼就是其本身;(2). 負(fù)數(shù)的補(bǔ)碼 = 其正數(shù)的補(bǔ)碼按位求反+1。4. 符號(hào)擴(kuò)展(如將 8 位有符號(hào)數(shù)擴(kuò)展成為 16 位有符號(hào)數(shù))(1). 正數(shù)的符號(hào)擴(kuò)展是在前面補(bǔ) 0;(2). 負(fù)數(shù)的符號(hào)擴(kuò)展是在前面補(bǔ) 1。5. n 位補(bǔ)碼所表示數(shù)的范圍:-2 n-1N2 n-1-16. 雙字長(zhǎng)數(shù)或雙精度數(shù):在機(jī)器里,為了擴(kuò)大表數(shù)范圍,可以用兩個(gè)

15、機(jī)器字(高位字和低位字)來表示一個(gè)機(jī)器數(shù),這種數(shù)稱為雙字長(zhǎng)數(shù)或雙精度數(shù)。在 80386 及其后則有 4 字(64 位)。1.3.2 補(bǔ)碼的加法和減法1. 求補(bǔ)運(yùn)算:對(duì)一個(gè)二進(jìn)制數(shù)按位求反后在末尾加 1 的運(yùn)算稱為求補(bǔ)運(yùn)算。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 無符號(hào)整數(shù):把最高有效位也作為數(shù)值處理的數(shù)稱為無符號(hào)整數(shù)。1.3.4 字符表示法(ASCII 碼):80 x86 機(jī)采用目前最常用的美國(guó)信息交換標(biāo)準(zhǔn)代碼 ASCII 碼表示。1.3.5 BCD 碼:4 位二進(jìn)制數(shù)編碼的十進(jìn)制數(shù)稱為 BCD 碼(又

16、叫 8421 碼)。BCD 碼是無符號(hào)整數(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)算運(yùn)算1.4.1 “與”運(yùn)算(AND)Y = AB = A B = A AND B1.4.2 “或”運(yùn)算(OR)Y = A + B = A B = A OR B1.4.3 “非”運(yùn)算(NOT)Y = A1.4.4 “異或”運(yùn)算(XOR)Y = B = A XOR BABA所有的邏輯運(yùn)算都是按位操作的。求補(bǔ)求補(bǔ)ceedcad444c8beba8ccfe9bc3771a54d.pdf - 4 -

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

18、 x86 就是這樣一組微處理器系列。4. 很多計(jì)算機(jī)廠商把微處理器芯片作為中央處理機(jī),再配上存儲(chǔ)器、輸入輸出設(shè)備和系統(tǒng)軟件等構(gòu)成微計(jì)算機(jī)系統(tǒng)。80 x86 微處理器系列的主要技術(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ī)可以訪問的存

19、儲(chǔ)器的最大范圍(尋址空間=2n)。1). 字節(jié)(byte):在計(jì)算機(jī)里,8 個(gè)二進(jìn)制位組成一個(gè)字節(jié),一般存儲(chǔ)器以字節(jié)為存儲(chǔ)信息的基本單位,用符號(hào) B 來表示。在存儲(chǔ)器里一般用 KB、MB、GB 為存儲(chǔ)容量的單位。2). 1KB=1024B=210B,1MB=1024KB=220B,1GB=1024MB=230B5. 在計(jì)算機(jī)里,采用層次結(jié)構(gòu)的存儲(chǔ)器組織是解決存儲(chǔ)器容量、速度、價(jià)格三者矛盾的最有效方法。(1). 中間層次是主存儲(chǔ)器,又稱為內(nèi)存。(2). 比中間層次速度更高、但容量較小的一層稱為高速緩沖存儲(chǔ)器(cache)。(3). 比中間層次速度慢、但容量很大的一層稱為外存儲(chǔ)器。如磁帶、磁盤、光

20、盤等。6. 提高計(jì)算機(jī)的工作速度可以說是微處理器芯片發(fā)展的核心問題。從 80486 起,把協(xié)處理器集成到芯片中的目的也是為了提高浮點(diǎn)處理速度。字長(zhǎng)的增加有利于提高計(jì)算機(jī)解題的精度。7. 從 80286 開始,在機(jī)器的工作方式上,除 8086 提供的實(shí)模式外,還增加了保護(hù)模式的工作方式。在 80386 中還增加了一種虛擬 8086 的工作模式。2.2 基于微基于微處處理器的理器的計(jì)計(jì)算機(jī)系算機(jī)系統(tǒng)統(tǒng)構(gòu)成構(gòu)成2.2.1 硬件:是指能看得見、摸得著的物理部件。1. 組成計(jì)算機(jī)的三要素:CPU、存儲(chǔ)器(memory)和輸入/輸出(I/O)子系統(tǒng)。用系統(tǒng)總線連接。(1). 存儲(chǔ)器(內(nèi)存):計(jì)算機(jī)的記憶部

21、件。(2). 中央處理器 CPU:包括運(yùn)算器和控制器兩部分。1). 運(yùn)算器執(zhí)行所有的算術(shù)和邏輯運(yùn)算指令;2). 控制器則負(fù)責(zé)全機(jī)的控制工作。(3). I/O 子系統(tǒng):包括 I/O 設(shè)備及大容量存儲(chǔ)器兩類外部設(shè)備。1). I/O 設(shè)備是指負(fù)責(zé)與計(jì)算機(jī)的外部世界通信用的輸入、輸出設(shè)備;2). 大容量存儲(chǔ)器是指可存儲(chǔ)大量信息的外部存儲(chǔ)器。2. 系統(tǒng)總線:把 CPU、存儲(chǔ)器和 I/O 設(shè)備連接起來,用來傳送各部件之間的信息。系統(tǒng)總線的動(dòng)作由總線控制邏輯負(fù)責(zé)指揮。(1). 數(shù)據(jù)總線:傳送信息;ceedcad444c8beba8ccfe9bc3771a54d.pdf - 5 - (2). 地址總線:指出信

22、息的來源和目的地;(3). 控制總線:規(guī)定總線的動(dòng)作。2.2.2 軟件:為運(yùn)行、管理和維護(hù)計(jì)算機(jī)而編制的各種程序的總和。分為系統(tǒng)軟件和用戶軟件兩大類。1. 系統(tǒng)軟件:由計(jì)算機(jī)生產(chǎn)廠家提供給用戶的一組程序。其核心是操作系統(tǒng)。它包括:(1). 操作系統(tǒng)的主要部分是常駐監(jiān)督程序(monitor)。(2). I/O 驅(qū)動(dòng)程序:對(duì) I/O 設(shè)備進(jìn)行控制和管理。(3). 文件管理程序:處理存儲(chǔ)在外存儲(chǔ)器中的大量信息。(4). 文本編輯程序:建立、輸入或修改文本,并存入內(nèi)存儲(chǔ)器或大容量存儲(chǔ)器中(如 EDIT 等)。(5). 翻譯程序(translator)1). 匯編程序:把由用戶編制的匯編語言源程序翻譯成

23、機(jī)器語言目標(biāo)程序。a. 匯編語言:一種與機(jī)器語言幾乎一 一對(duì)應(yīng)的符號(hào)語言,但在書寫時(shí)使用由字符串組成的助記符。b. 機(jī)器語言:由二進(jìn)制代碼組成的語言。c. 指令:計(jì)算機(jī)能識(shí)別并能直接加以執(zhí)行的二進(jìn)制的語句。2). 編譯程序:把高級(jí)語言源程序翻譯成機(jī)器語言程序的系統(tǒng)程序。3). 解釋程序:對(duì)高級(jí)語言一邊解釋一邊執(zhí)行的翻譯程序。(6). 連接程序(linker):把要執(zhí)行的程序與庫(kù)文件或其他已經(jīng)翻譯的子程序連接在一起,形成機(jī)器能執(zhí)行的程序。(7). 裝入程序(loader):把程序從外存儲(chǔ)器裝入內(nèi)存儲(chǔ)器,以便機(jī)器運(yùn)行。(8). 調(diào)試程序(debug):系統(tǒng)提供給用戶能監(jiān)督和控制用戶程序的一種工具。

24、(9). 系統(tǒng)程序庫(kù)和用戶程序庫(kù):各種標(biāo)準(zhǔn)程序、子程序及一些文件的集合。2. 用戶軟件:用戶自行編制的各種應(yīng)用程序。2.3 中央中央處處理機(jī)理機(jī)2.3.1 中央處理機(jī) CPU 的組成1. CPU 的任務(wù)是執(zhí)行存放在存儲(chǔ)器里的指令序列。2. CPU 芯片中除高速緩沖存儲(chǔ)器之外,主要由以下三部分組成:(1). 算術(shù)邏輯部件(arithmetic logic unit,ALU):用來進(jìn)行算術(shù)和邏輯運(yùn)算。(2). 控制邏輯:負(fù)責(zé)對(duì)全機(jī)的控制工作。(3). 工作寄存器:用來存放計(jì)算過程中所需要的或所得到的各種信息。2.3.2 80 x86 寄存器組寄存器可以分為程序可見的寄存器和程序不可見的寄存器兩大類

25、。 程序可見的寄存器是指在匯編語言程序設(shè)計(jì)中用到的寄存器,分為通用寄存器、專用寄存器和段寄存器 3 類。 程序不可見的寄存器是指一般應(yīng)用程序設(shè)計(jì)中不用而由系統(tǒng)所用的寄存器。1. 通用寄存器(1). 數(shù)據(jù)寄存器:AX、BX、CX、DX,四個(gè) 16 位通用寄存器,用來暫時(shí)存放計(jì)算過程中所用到的操作數(shù)、結(jié)果和其他信息。既可以以字形式(如 AX)也可以以字節(jié)形式(如 AH、AL)訪問。1). AX(accumulator):累加器,算術(shù)運(yùn)算的主要寄存器。所有的 I/O 指令都使用這一寄存器與外部設(shè)備傳送信息。2). BX(base):通用寄存器,在計(jì)算存儲(chǔ)器地址時(shí)常用作基址寄存器。3). CX(cou

26、nt):通用寄存器,在循環(huán)和串操作指令中用作隱含的計(jì)數(shù)器。4). DX(data):通用寄存器,在作雙字長(zhǎng)運(yùn)算時(shí)把 DX 和 AX 合在一起存放一個(gè)雙字長(zhǎng)數(shù),DX 用來存放高位字。對(duì)某些 I/O 操作,DX 用于對(duì) I/O 端口的寄存器間接尋址。(2). 指針及變址寄存器:SP、BP、SI、DI,四個(gè) 16 位寄存器。1). SP:堆棧指針寄存器。2). BP:基址指針寄存器。3). SI:源變址寄存器。4). DI:目的變址寄存器。ceedcad444c8beba8ccfe9bc3771a54d.pdf - 6 - (3). 對(duì)于 80386 及其后繼機(jī)型則是 32 位的通用寄存器,包括EA

27、X、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)志寄存器,又稱為程序狀態(tài)字寄存器(program status word, PSW)。由條件碼標(biāo)志(flag)、控制標(biāo)志和系統(tǒng)標(biāo)志構(gòu)成。80386 及其后繼機(jī)型則是 EFLAGS。8086/8088 的

28、 FLAGS 如下所示:1514131211109876543210OFDFIFTFSFZFAFPFCF1). 條件碼:用來記錄程序中運(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:符號(hào)標(biāo)志(sign flag)。結(jié)果為負(fù) SF=1,否則 SF=0。c. ZF:零標(biāo)志(zero flag)。結(jié)果為 0 時(shí) ZF=1,否則 ZF=0。d. CF:進(jìn)位標(biāo)志(carry flag)。最高有效位有進(jìn)位或借位

29、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 增量,使串處理從低地址向高地址方向處理。3). 系統(tǒng)標(biāo)志位:可以用于 I/O、可屏蔽中

30、斷、程序調(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í)允許可屏蔽中斷請(qǐng)求,IF=0 時(shí)禁止可屏蔽中斷。c. I/O 特權(quán)級(jí)(I/O privilege level, IOPL),在保護(hù)模式下,用于控制對(duì) I/O 地址空間的訪問。(4). 標(biāo)志位的測(cè)試:用調(diào)試程序 DEBUG 測(cè)試。測(cè)試含義見書 24 頁(yè)表 2.2 所示。3. 段寄存器:是一種專用寄存器,它們專用于存儲(chǔ)器

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

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

33、某存儲(chǔ)單元的地址,則 X 單元的內(nèi)容可以表示為(X);假如 X 單元中存放著 Y,而 Y 又是一個(gè)地址,則可用(Y)=(X)來表示 Y 單元的內(nèi)容。(4). 存儲(chǔ)器的內(nèi)容取之不盡。ceedcad444c8beba8ccfe9bc3771a54d.pdf - 7 - 2.4.2 實(shí)模式存儲(chǔ)器尋址80 x86 中除 8086/8088 只能在實(shí)模式下工作外,其他微處理器均可在實(shí)模式或保護(hù)模式下工作。實(shí)模式就是為 8086/8088 而設(shè)計(jì)的工作方式,實(shí)模式下允許的最大尋址空間為 1MB。它要解決在 16位字長(zhǎng)的機(jī)器里怎么提供 20 位地址的問題,而解決的辦法是采用存儲(chǔ)器地址分段的方法。1. 存儲(chǔ)器

34、地址的分段(1). 段:程序員在編制程序時(shí)要把存儲(chǔ)器劃分成段,在每個(gè)段內(nèi)地址空間是線性增長(zhǎng)的。段的最大長(zhǎng)度為 64KB,以便能用 16 位二進(jìn)制數(shù)表示段內(nèi)地址。1). 小段:從 0 地址開始,每 16 字節(jié)為一小段。小段的首地址用 16 進(jìn)制數(shù)表示時(shí)其最低位為0。2). 段的起始地址:段不能起始于任意地址,而必須從任一小段(paragraph)的首地址開始。(2). 物理地址、段地址、偏移地址1). 物理地址(PA):在 1MB 的存儲(chǔ)器里,每一個(gè)存儲(chǔ)單元都有一個(gè)唯一的 20 位地址,稱為該存儲(chǔ)單元的物理地址(20 位)。20 位物理地址由 16 位段地址和 16 位偏移地址組成。2). 段地

35、址:段起始地址的高 16 位值(16 位),低 4 位固定為 0 被省去。3). 偏移地址(偏移量 EA):指在段內(nèi)相對(duì)于段起始地址的偏移值(16 位)。4). 物理地址 = 段地址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ù)段寄存器。除非專門指定,一般情況下,

36、各段在存儲(chǔ)器中的分配是由操作系統(tǒng)負(fù)責(zé)的。而且允許段重疊。如果段超過 64KB 則將其作為 2 個(gè)以上的段,并動(dòng)態(tài)修改段地址。2.4.3 保護(hù)模式存儲(chǔ)器尋址從 80286 起,就引出了保護(hù)模式的存儲(chǔ)器尋址,其直接原因:首先是實(shí)模式的尋址空間為1MB,這不能滿足 80286 的 16MB 和 80386 等的 4GB 或更多的地址空間尋址。其次是為了使微機(jī)系統(tǒng)能支持多任務(wù)處理。在系統(tǒng)支持多任務(wù)功能的同時(shí),系統(tǒng)也支持了虛擬存儲(chǔ)器特性。1. 邏輯地址(1). 在實(shí)模式下邏輯地址即為段地址:偏移地址段地址:偏移地址。物理地址 = 段地址10H + 偏移地址(2). 在保護(hù)模式下邏輯地址則由選擇器和偏移地

37、址選擇器和偏移地址兩部分組成。選擇器存放在段寄存器中,但它不能直接表示段基地址,而由操作系統(tǒng)通過一定的方法取得段基地址,再和偏移地址相加,從而求得所選存儲(chǔ)單元的物理地址。2. 描述符(1). 描述符用來描述段的大小、段在存儲(chǔ)器中的位置及其控制和狀態(tài)信息,它由基地址、界限、訪問權(quán)和附加字段四部分組成。描述符的內(nèi)容是由系統(tǒng)設(shè)置的,而不是由用戶建立的。1). 基地址(base)部分用來指定段的起始地址;2). 界限(limit)部分存放著該段的段長(zhǎng)度;3). 訪問權(quán)(access rights)部分用來說明該段在系統(tǒng)中的功能,并給出該段的一些控制信息;4). 附加字段部分在 386 及其后繼機(jī)型中存

38、在,它用來表示該段的一些屬性。(2). 系統(tǒng)按選擇器的內(nèi)容,根據(jù)指定的途徑可以找到所選段對(duì)應(yīng)的描述符,從而可以根據(jù)其給出的基地址和界限值,確定所要找的存儲(chǔ)單元所在的段,再加上邏輯地址中指定的偏移地址,就可以找到相應(yīng)的存儲(chǔ)單元。2.5 外部外部設(shè)備設(shè)備1. 端口寄存器:外部設(shè)備與主機(jī)(CPU 和存儲(chǔ)器)的通信是通過接口進(jìn)行的。每個(gè)接口包括一組寄存器稱為端口寄存器。(1). 數(shù)據(jù)寄存器:存放要在外設(shè)和主機(jī)之間傳送的數(shù)據(jù)。(2). 狀態(tài)寄存器:保存外設(shè)或接口的狀態(tài)信息。(3). 命令寄存器:CPU 發(fā)給外設(shè)或接口的控制命令通過它傳送。2. 端口地址(端口號(hào)):主機(jī)給外設(shè)中的每個(gè)寄存器定義一個(gè)二進(jìn)制數(shù)

39、的編號(hào)即為端口地址。其地址空間獨(dú)立于內(nèi)存地址之外可達(dá) 64KB。其范圍為 0000FFFFH。ceedcad444c8beba8ccfe9bc3771a54d.pdf - 8 - 3. 主機(jī)與外設(shè)交換信息:通過輸入/輸出指令完成。4. BIOS、DOS 功能調(diào)用:操作系統(tǒng)提供的中斷服務(wù)子程序。(1). BIOS 存放在機(jī)器的 ROM 中,比 DOS 的層次還要低。(2). DOS 功能調(diào)用是 DOS 的一個(gè)組成部分,在開機(jī)時(shí)由操作系統(tǒng)從系統(tǒng)磁盤裝入存儲(chǔ)器。ceedcad444c8beba8ccfe9bc3771a54d.pdf - 9 - 第第 3 章章 80 x86 的指令系統(tǒng)和尋址方式的指

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

41、3. 指令的格式:操作碼操作碼 操作數(shù)操作數(shù) ,操作數(shù),操作數(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. 匯編語言:符號(hào)語言。用助記符來表示操作碼,用符號(hào)或符號(hào)地址來表示操作數(shù)或操作數(shù)地址。它與機(jī)器指令一 一對(duì)應(yīng)。3.1 80 x86 的的尋尋址方式址方式3.1.1 與數(shù)據(jù)有關(guān)的尋址方式這種尋址方式用來確定操作數(shù)地址從而找到操作數(shù)。1. 立即數(shù)

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

43、括號(hào)“( )”表示是該寄存器的內(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)容。它通

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

45、 - 1). 串處理指令的目的串必須使用 ES 段;2). PUSH 指令的目的和 POP 指令的源必須用 SS 段;3). 指令代碼必須存放在 CS 段中。(4). 80 x86 CPU 中為了使指令字不要過長(zhǎng),規(guī)定雙操作數(shù)指令的兩個(gè)操作數(shù)中,只能有一個(gè)使用存儲(chǔ)器尋址方式,這就是一個(gè)變量常常先要送到寄存器的原因。4. 寄存器間接尋址方式:操作數(shù)的有效地址只包含基址寄存器或變址寄存器內(nèi)容一種成份。有效地址就在某個(gè)寄存器中,而操作數(shù)則在存儲(chǔ)器中??墒褂枚慰缭角熬Y。如:MOV AX, ES: BX5. 寄存器相對(duì)尋址方式(或稱直接變址尋址方式):操作數(shù)的有效地址為基址寄存器或變址寄存器的內(nèi)容和指令

46、中指定的位移量之和,有效地址由兩部分組成??墒褂枚慰缭角熬Y(又稱為段超越)。如:MOV ES: STRINGSI, DL位位移量位位移量168)SI()DI()BP()BX(EA6. 基址變址尋址方式:操作數(shù)的有效地址 EA 是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和。可使用段跨越前綴。如:MOV AX, ES: BXSI)DI()SI()BP()BX(EA7. 相對(duì)基址變址尋址方式:操作數(shù)的有效地址 EA 是一個(gè)基址寄存器與一個(gè)變址寄存器的內(nèi)容和指令中指定的位移量之和??墒褂枚慰缭角熬Y。如:MOV ES: MASKBXSI, AX位位移量位位移量168)DI()SI()BP()BX(EA8.

47、 比例變址尋址方式:操作數(shù)的有效地址 EA 是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上位移量之和。如:MOV MASKESI*4, EAX9. 基址比例變址尋址方式:操作數(shù)的有效地址 EA 是變址寄存器的內(nèi)容乘以指令中指定的比例因子再加上基址寄存器的內(nèi)容之和。如:MOV EAXESI*4, EAX10. 相對(duì)基址比例變址尋址方式:操作數(shù)的有效地址 EA 是變址寄存器的內(nèi)容乘以指令中指定的比例因子,加上基址寄存器的內(nèi)容,再加上位移量之和。如:MOV TABLEEAXESI*4, EAX11. 端口(輸入/輸出)尋址方式:一個(gè)操作數(shù)必須為 AX 或 AL 或 EAX,另一個(gè)用端口直接尋址方式

48、(端口號(hào)256)或端口間接尋址方式(DX 的內(nèi)容為端口號(hào))。如:IN AL, 0ADH ; OUT DX, AX3.1.2 與轉(zhuǎn)移地址有關(guān)的尋址方式這種尋址方式用來確定轉(zhuǎn)移指令及 CALL 指令的轉(zhuǎn)向地址。1. 段內(nèi)直接尋址:轉(zhuǎn)向的有效地址是當(dāng)前 IP 內(nèi)容和指令中指定的 8 位或 16 位位移量之和。(操作數(shù)OPR 采用相對(duì)尋址方式。) 當(dāng)它用于條件轉(zhuǎn)移指令時(shí),位移量只能是 8 位(386 及其后繼機(jī)型條件轉(zhuǎn)移指令的位移量可為 8 位或 32 位)。;段內(nèi)直接近程轉(zhuǎn)移位位移量,如:;段內(nèi)直接短程轉(zhuǎn)移位位移量,如: OPR PTR NEAR JMP16 OPR SHORT JMP8)IP(EA

49、)IP(2. 段內(nèi)間接尋址:轉(zhuǎn)向的有效地址是一個(gè)寄存器或是一個(gè)存儲(chǔ)單元的內(nèi)容。(操作數(shù) OPR 采用除立即數(shù)以外的任一數(shù)據(jù)尋址方式。)為存儲(chǔ)器;存儲(chǔ)器尋址方式存儲(chǔ)器內(nèi)容,如:或?yàn)?;或寄存器?nèi)容,如:OPR PTR ORDW JMPECX BXOPR ECX JMP XB JMPEA)IP(3. 段間直接尋址:指令中直接提供了轉(zhuǎn)向的段地址和偏移地址。(操作數(shù) OPR 采用立即數(shù)尋址方式。)(IP)EA=OFFSET OPR ;OPR 的偏移地址(IP)(CS)SEG OPR ;OPR 的段地址(CS)4. 段間間接尋址:用存儲(chǔ)器中兩個(gè)相連字來取代 IP 和 CS 的內(nèi)容。(操作數(shù) OPR 采用存

50、儲(chǔ)器尋址方式。)(IP)EA=存儲(chǔ)器中雙字單元的低字內(nèi)容(CS)EA+2=存儲(chǔ)器中雙字單元的高位字內(nèi)容附:書上 3.1.2 所用到的操作符意義:對(duì) 80386 及以后機(jī)型。寄存器為EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP。位移量可增加到 32 位的位移量(無 16 位位移量)。下同。ceedcad444c8beba8ccfe9bc3771a54d.pdf - 11 - 1. SHORT:屬性操作符,表示段內(nèi)短程轉(zhuǎn)移。2. PTR:屬性操作符,建立一個(gè)符號(hào)地址(取后面內(nèi)容的地址)。3. NEAR:類型操作符,距離類型,段內(nèi)近程。4. FAR:類型操作符,距離類型,段間遠(yuǎn)程。

51、5. WORD:類型操作符,數(shù)據(jù)類型,字。6. DWORD:類型操作符,數(shù)據(jù)類型,雙字。7. NEAR PTR:取段內(nèi)近程地址值操作符。8. FAR PTR:取段間遠(yuǎn)程地址值操作符。9. WORD PTR:取字長(zhǎng)地址值操作符。10. DWORD PTR:取雙字長(zhǎng)地址值操作符。3.2 程序占有的空程序占有的空間間和和執(zhí)執(zhí)行行時(shí)間時(shí)間1. 80 x86 的機(jī)器指令是可變字節(jié)指令,即不同指令或不同尋址方式的機(jī)器指令長(zhǎng)度不同。程序量越大,占有的存儲(chǔ)空間也越大。2. 當(dāng)程序在計(jì)算機(jī)上運(yùn)行時(shí),訪問存儲(chǔ)器取得操作數(shù)或者存放結(jié)果需要時(shí)間,運(yùn)算器執(zhí)行指令也需要時(shí)間。3. 完成同樣功能的不同程序,可能在占有存儲(chǔ)空

52、間和執(zhí)行時(shí)間上有很大差別。程序員在編制程序時(shí),應(yīng)盡量考慮節(jié)省程序所占用的空間和所使用的時(shí)間。3.3 80 x86 的指令系的指令系統(tǒng)統(tǒng)3.3.1 數(shù)據(jù)傳送指令:負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)傳送到寄存器或存儲(chǔ)單元中。1. 通用數(shù)據(jù)傳送指令(1). MOV傳送指令指令格式:MOV DST,SRC;(DST)(SRC)。DST 表示目的操作數(shù), SRC 表示源操作數(shù)說 明:.DST 為除 CS 外的各寄存器尋址方式或任意存儲(chǔ)器尋址方式。SRC 為任意數(shù)據(jù)尋址方式。.DST、SRC 不能同時(shí)為存儲(chǔ)器尋址方式,也不能同時(shí)為段寄存器尋址方式,而且在 DST 為段寄存器時(shí),SRC 不能為立即數(shù)。.MOV 指令不

53、影響標(biāo)志位。(2). MOVSX帶符號(hào)擴(kuò)展傳送指令(386 及其后繼機(jī)型可用)指令格式:MOVSX DST,SRC;(DST)符號(hào)擴(kuò)展(SRC)說 明:.DST 必須為 16 位或 32 位寄存器。SRC 為 8 位或 16 位的寄存器或存儲(chǔ)單元的內(nèi)容。傳送時(shí)把源操作數(shù)符號(hào)擴(kuò)展送入目的寄存器。.MOVSX 指令不影響標(biāo)志位。(3). MOVZX帶零擴(kuò)展傳送指令(386 及其后繼機(jī)型可用)指令格式:MOVZX DST,SRC;(DST)零擴(kuò)展(SRC)說 明:.DST 必須為 16 位或 32 位寄存器。SRC 為 8 位或 16 位的寄存器或存儲(chǔ)單元的內(nèi)容。傳送時(shí)把源操作數(shù)零擴(kuò)展送入目的寄存器

54、。.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)先出”方式工作的存儲(chǔ)區(qū)。它必須存在于堆棧段中,只有一個(gè)出入口,所以只有一個(gè)堆棧指針 SP 或 ESP。SP 或 ESP 的內(nèi)容在任何時(shí)候都指向當(dāng)前的棧頂。.8086 中的 SRC 不能為立即數(shù)尋址方式。286 及其后繼機(jī)型可用立即數(shù)尋址方式。ceedcad444c8beba8ccfe9bc37

55、71a54d.pdf - 12 - .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)棧指令指令格式:PUSHA;16 位通用寄存器依次進(jìn)棧,進(jìn)棧次序?yàn)椋篈X、CX、DX、BX、指令執(zhí)行前的 SP、BP、SI、DI。指令執(zhí)行后(SP)(SP)

56、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ù)。指令格式:POPAD;32 位通用寄存器依次出棧,出棧次序?yàn)椋篍DI、ESI、EBP、ESP、EBX、EDX、ECX、EAX。指令執(zhí)行后

57、(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 為除段寄存器以外的各寄存器尋址方式或任意存儲(chǔ)器尋址方式。.OPR1、OPR2 不能同時(shí)為存儲(chǔ)器尋址方式。.XCHG 指令不影響標(biāo)志位。2. 累加器專用傳送指令(1)

58、. IN輸入指令長(zhǎng)格式為: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) (雙字)說 明:.80 x86 CPU 規(guī)定只能用低 16 位地址總線(A15A0)來尋址外部設(shè)備,因此外部設(shè)備最

59、多可有 65536 個(gè) I/O 端口,端口地址為(0FFFFH)。.長(zhǎng)格式只適用于端口(PORT)號(hào)255 (FFH)。.短格式適用于任意端口號(hào)(0FFFFH)。但只能用 DX 寄存器對(duì)端口地址進(jìn)行間接尋址。.IN 指令不影響標(biāo)志位。(2). OUT輸出指令長(zhǎng)格式為:OUT PORT, AL(字節(jié)) ;(PORT)(AL) (字節(jié))OUT PORT, AX(字);(PORT+1,PORT)(AX) (字)OUT PORT, EAX(雙字);(PORT+3, PORT+2, PORT+1,PORT)(EAX) (雙字)ceedcad444c8beba8ccfe9bc3771a54d.pdf -

60、13 - 短格式為:OUT DX,AL(字節(jié));(DX)(AL) (字節(jié))OUT DX,AX(字);(DX)+1,(DX)(AX) (字)OUT DX,EAX(雙字) ;(DX)+3, (DX)+2, (DX)+1,(DX)(EAX) (雙字)說 明:.長(zhǎng)格式和短格式的規(guī)定與 IN 指令相同。.OUT 指令不影響標(biāo)志位。(3). XLAT換碼指令指令格式:XLAT OPR;16 位指令:(AL)(BX)+(AL)32 位指令:(AL)(EBX)+(AL)XLAT ;上式的簡(jiǎn)寫,OPR 為閱讀程序用的表格首地址。說 明:.在使用這條指令前,應(yīng)先建立一個(gè)字節(jié)表格,表格的首地址應(yīng)提前存入 BX 寄存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論