微型計(jì)算機(jī)原理與接口技術(shù) 課件1(孫力娟 清華大學(xué)出版社)第4章指令系統(tǒng)_第1頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù) 課件1(孫力娟 清華大學(xué)出版社)第4章指令系統(tǒng)_第2頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù) 課件1(孫力娟 清華大學(xué)出版社)第4章指令系統(tǒng)_第3頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù) 課件1(孫力娟 清華大學(xué)出版社)第4章指令系統(tǒng)_第4頁(yè)
微型計(jì)算機(jī)原理與接口技術(shù) 課件1(孫力娟 清華大學(xué)出版社)第4章指令系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩176頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

微型計(jì)算機(jī)原理與接口技術(shù)

第4章指令系統(tǒng)

OIOW?4.1概述

?4.280486尋址方式

?4.380486標(biāo)志寄存器

?4.4匯編語(yǔ)言語(yǔ)法規(guī)則之一

?4.580486基本集指令

微型計(jì)算機(jī)原理與接口技術(shù)

4.1概述

1.指令:通知CPU執(zhí)行某種操作的“命令”,CPU全部指令

集合,稱(chēng)為指令系統(tǒng)

2.指令的書(shū)寫(xiě)格式

伊目標(biāo)指令(機(jī)器指令):用一串0,1代碼書(shū)寫(xiě)

注意:硬件只能識(shí)別,存儲(chǔ),運(yùn)行目標(biāo)指令

?符號(hào)指令:用規(guī)定的助記符,規(guī)定的書(shū)寫(xiě)格式書(shū)寫(xiě)

的指令

微型計(jì)算機(jī)原理與接口技術(shù)

3.指令的組成

指令的組成:

操作碼+操作數(shù)

操作碼——告訴計(jì)算機(jī)要執(zhí)行的操作是什么,如:

加、減、邏輯與等。

操作數(shù)——執(zhí)行操作過(guò)程所要操作的數(shù),如加運(yùn)算

的兩個(gè)加數(shù)。

匯編語(yǔ)言的符號(hào)指令

匯編語(yǔ)言是一種符號(hào)語(yǔ)言,它用:

助記符——表示操作碼

符號(hào)或符號(hào)地址——表示操作數(shù)或操作數(shù)地址

微型計(jì)算機(jī)原理與接口技術(shù)

80486符號(hào)指令與機(jī)器指令對(duì)照表

1操作80486符號(hào)指令80486機(jī)器指令

1234H—AXMOVAX,1234HB83412

AX+BX—AXADDAX,BX03C3

CX-DX—CXSUBCX,DX2BCA

|返回調(diào)用程序RETC3

MOV:MOVE傳送ADD:加SUB:減RET:RETURN返回

微型計(jì)算機(jī)原理與接口技術(shù)

4.目標(biāo)程序的生成

CPU只能識(shí)別,存儲(chǔ),運(yùn)行目標(biāo)指令,而用機(jī)器指

令編程非常困難。于是早期的專(zhuān)家們發(fā)明了符號(hào)指令,再經(jīng)過(guò)

軟件把符號(hào)指令一機(jī)器指令。圖示如下:

匯編可執(zhí)行的機(jī)器指令

編輯、編譯、鏈接

源程序程序(目標(biāo)程序)

5.指令長(zhǎng)度

486指令長(zhǎng)度(機(jī)器指令長(zhǎng)度)為1?16字節(jié)

規(guī)定:多字節(jié)指令占用連續(xù)的內(nèi)存單元,存放指令第

一字節(jié)的內(nèi)存地址,稱(chēng)為“指令地址”。

微型計(jì)算機(jī)原理與接口技術(shù)

6.指令存放

先寫(xiě)操作碼,再寫(xiě)操作數(shù)。

多字節(jié)操作數(shù)連續(xù)存放。存放規(guī)律:低位字節(jié)存放在低地

址單元,高位字節(jié)存放在相鄰的高地址單元

如:12345H單元中有一條指令MOVAX,6789H

12345H:操作碼

:MOVAX,6789H

操作數(shù)6789H

J

微型計(jì)算機(jī)原理與接口技術(shù)

7.CPU執(zhí)行指令的過(guò)程

PLA

r--------s(S

ARDK

址?1數(shù)

地?fù)?jù)

址總

AB譯線

碼DB

,

存儲(chǔ)器2,H1播放

微型計(jì)算機(jī)原理與接口技術(shù)

8.符號(hào)指令的書(shū)寫(xiě)格式

標(biāo)號(hào):操作碼助記符空格操作數(shù)助記符;注釋

如:NEXT:ADDAX,BX;AX+BXfAX

INCSI;SI+1-SI

標(biāo)號(hào):以字母開(kāi)頭,后跟字母,數(shù)字,下劃線,長(zhǎng)度W31字符

標(biāo)號(hào)又稱(chēng)符號(hào)地址,代表該指令的邏輯地址。可有可

無(wú),設(shè)置是為了程序的轉(zhuǎn)向

注解:以“;”開(kāi)頭,不執(zhí)行,打印程序清單時(shí)照原樣打印,

“系統(tǒng)保留字”不能做標(biāo)號(hào)。

微型計(jì)算機(jī)原理與接口技術(shù)

“尋址方式”:通俗的講,就是通知CPU本條指令的操

作數(shù)在哪兒?或者說(shuō)用什么方式才能得到操作數(shù)。

2微型計(jì)算機(jī)原理與接口技術(shù)

操作數(shù)存在方式

在微型計(jì)算機(jī)中,操作數(shù)可能以以下三種方式存在:

?操作數(shù)包含在指令中——即指令的操作數(shù)部分就包含著操作數(shù)本身。

MOVAX,1234H;

ADDAL,2

?操作數(shù)包含在CPU的某一個(gè)內(nèi)部寄存器中

——這時(shí)指令中的操作數(shù)是CPU內(nèi)部的某一個(gè)寄存器

MOVDS,AX

?操作數(shù)在內(nèi)存的數(shù)據(jù)區(qū)中——這時(shí)指令中的操作數(shù)包含著此操作數(shù)的地址

MOVAX,[2000];

MOVBUF,AL

微型計(jì)算機(jī)原理與接口技術(shù)

80486有3類(lèi)7種尋址方式

立即尋址方式:獲得立即數(shù)

寄存器尋址方式:獲得寄存器操作數(shù)

存儲(chǔ)器尋址方式:獲得內(nèi)存操作數(shù)(存儲(chǔ)器操作數(shù)))

學(xué)習(xí)重點(diǎn):怎樣在符號(hào)指令中,正確的描述各種尋址方式

微型計(jì)算機(jī)原理與接口技術(shù)

1.立即尋址方式

這種尋址方式

所提供的操作數(shù)直

接放在指令中,緊

跟在操作碼的后面

,與操作碼一起放

在代碼段區(qū)域中。

立即數(shù)可以是8、

16、32位.

立即尋址主要

是用來(lái)給寄存器賦

初值.

微型計(jì)算機(jī)原理與接口技術(shù)

?微型計(jì)算機(jī)原理與接口技術(shù)

如:MOVEAX,12345678H

MOVBL,10101010B;AAH一BL

MOVCL,-4;FCH->CL

MOVDLJA';41H一DL

ADDAL,0C8H

MOVSI,3*5;15一SI

上例源操作數(shù)即為立即尋址,立即數(shù)書(shū)寫(xiě)規(guī)定:

使立即數(shù)以數(shù)字開(kāi)頭,以A?F開(kāi)頭的16進(jìn)制數(shù),必須前綴0。

但立即數(shù)的數(shù)制用后綴表示,B表示二進(jìn)制數(shù),H表示十六進(jìn)制數(shù),D或

缺省為十進(jìn)制數(shù),單引號(hào)括起來(lái)的字符編譯成相應(yīng)的ASCH碼。

使可以用+*/組成立即數(shù)表達(dá)式

P程序員可以按自己的習(xí)慣書(shū)寫(xiě)立即數(shù),各種合法的立即數(shù)經(jīng)匯編

后,一律自動(dòng)轉(zhuǎn)換成等值的二進(jìn)制數(shù),負(fù)數(shù)用補(bǔ)碼表示。

微型計(jì)算機(jī)原理與接口技術(shù)

2.寄存器尋址

操作數(shù)在CPU的

某個(gè)寄存器中,

符號(hào)

指令中直接寫(xiě)

出寄存器名稱(chēng)。

微型計(jì)算機(jī)原理與接口技術(shù)

微型計(jì)算機(jī)原理與接口技術(shù)

如:下述6條指令,目標(biāo)操作數(shù)即為寄存器尋址

MOVEAXJ2345678H

MOVBL,10101010B;AAH一BL

MOVCL,-4;FCH一CL

MOVDLJ5,;35H一DL

ADDAL,0C8H

MOVSI,3*5;15一SI

如:MOVAX,DS;DS內(nèi)容一AX

INCSI;SI+1—>SI(Increase增量)

DECDI;DI-1—>DI(Decrease減量)

微型計(jì)算機(jī)原理與接口技術(shù)

3.存儲(chǔ)器操作數(shù)尋址方式

重申:

P在讀寫(xiě)內(nèi)存操作數(shù)之前,CPU必須知道相關(guān)存儲(chǔ)單元的物理地址。

但由于CPU對(duì)存儲(chǔ)器采用分段管理,因此指令格式中只能寫(xiě)出存放操作數(shù)

的內(nèi)存單元的“邏輯地址”。

?程序員的責(zé)任僅在于正確的書(shū)寫(xiě)邏輯地址表達(dá)式,然后由CPU自動(dòng)運(yùn)

算以求出物理地址。

程序員給出的邏輯地址形式

段寄存器:偏移地址

操作系統(tǒng)將程序調(diào)入內(nèi)存時(shí)才給段寄存器賦實(shí)際值。此時(shí),計(jì)算出的

20位地址才是實(shí)際的物理地址

微型計(jì)算機(jī)原理與接口技術(shù)

有效地址(EA)

實(shí)模式80X86的內(nèi)存地址:段基址+段內(nèi)偏移量

存放在CS存放在BX、BP>SKDI中,

DS或直接地址如[3000H]中,

ES或上述形式的組合中。

2I0W

SS中

段內(nèi)偏移量可以由幾部分組成,組成后的地址稱(chēng)為有效地址EA

EA可以由以下各種情況構(gòu)成:

?直接地址——包含在指令中的16位地址偏移量。

?間接地址——由CPU內(nèi)部某個(gè)16位寄存器的內(nèi)容決定,如BX、BP、SI、DE

?基址—基址寄存器BX或BP加上指令中包含的8位或16位位移量。

?變址——變址寄存器SI或DI加上指令中包含的8位或16位位移量。

?基址加變址——由一個(gè)基址寄存器BX或BP加上一個(gè)變址寄存器SI或DI,再加

上指令中包含的8位或16位位移量。

微型計(jì)算機(jī)原理與接口技術(shù)

(1)直接尋址

①地址表達(dá)式的格式1:段寄存器:[偏移地址]

如:MOVAL,ES:[2CH]

從ES附加段偏移地址為2cH的單元取數(shù)-AL

如:MOVAX,DS:[2000H]

從數(shù)據(jù)段偏移地址為2000H的單元取一字一AX

這種格式很少使用,???通常情況下,程序員不知道某單元的偏移地址

②地址表達(dá)式的格式2:段寄存器:變量名

用變量名代表存儲(chǔ)單元的有效地址

微型計(jì)算機(jī)原理與接口技術(shù)

微型計(jì)算機(jī)原理與接口技術(shù)

設(shè)數(shù)據(jù)段XX字節(jié)單元的內(nèi)容為11H

ES附加段YY字單元的內(nèi)容為2233H

MOVAL,DS:XX;取數(shù)據(jù)段XX字節(jié)單元的內(nèi)容一AL

或MOVAL,XX;.\AL=11H

MOVAX,ES:YY;WES附加段YY字單元的內(nèi)容一AX

或MOVAX,YY;??.AX=2233H

說(shuō)明:

鐘匚編語(yǔ)言允許為某單元起一個(gè)“名字”,這個(gè)名字就稱(chēng)為該單元的“變量

名”,經(jīng)匯編之后,變量名有段基址和偏移量?jī)煞N屬性。

但變量名是唯一的,程序中不能有重復(fù)的變量名,

???“段寄存器:”可以省略。

微型計(jì)算機(jī)原理與接口技術(shù)

(2)寄存器間接尋址

寄存器間接尋址又稱(chēng)間接尋址,間址

什么是間接尋址?

操作數(shù)在內(nèi)存單元,該單元的段基址在段寄存器中,

有效地址在間址寄存器中,CPU首先進(jìn)行地址計(jì)算

①間接尋址的地址表達(dá)式

段寄存器:[間址寄存器]

某單元的物理地址二段寄存器內(nèi)容X16+間址寄存器

②訪問(wèn)約定的邏輯段,間接尋址的地址表達(dá)式簡(jiǎn)

化為:[間址寄存器]

某單元的物理地址二約定的段寄存器內(nèi)容X16+間址寄存器

微型計(jì)算機(jī)原理與接口技術(shù)

③間址寄存器和約定訪問(wèn)的邏輯段

486規(guī)定:

間址寄存器約定訪問(wèn)的邏輯段

BP堆棧段

16位尋址方式

BX,SI,DI數(shù)據(jù)段

EBP,ESP堆棧段

32位尋址方式

EAX-EDX,ESI,EDI數(shù)據(jù)段

微型計(jì)算機(jī)原理與接口技術(shù)

微型計(jì)算機(jī)原理與接口技術(shù)

④舉例:

設(shè)數(shù)據(jù)段BUF字節(jié)單元的內(nèi)容為55H,取出該數(shù)一AL

解L用BX間址

MOVDS,數(shù)據(jù)段段基址

MOVBX,BUF單元的有效地址

MOVAL,DS:[BX];AL=55H

等價(jià)于:MOVAL,[BX]

由于BX間址,約定訪問(wèn)的是數(shù)據(jù)段,???“DS:”可省

微型計(jì)算機(jī)原理與接口技術(shù)

解2:用BP間址

MOVDS,數(shù)據(jù)段段基址

OIOWMOVBP,BUF單元的有效地址

MOVAL,DS:[BP];AL=55H

MOVAL,[BP]

由于BP間址約定訪問(wèn)的是堆棧段,???“DS:”不可省

解3:用變量名直接尋址

MOVDS,數(shù)據(jù)段段基址

MOVAL,BUF;AL=55H

微型計(jì)算機(jī)原理與接口技術(shù)

(3)基址尋址

該尋址方式的有效地址由兩部分組成。一部分在

基址寄存器中,另一部分為常量。

①基址尋址的地址表達(dá)式:

段寄存器:[基址寄存器+位移量]

物理地址二段寄存器內(nèi)容X16+基址寄存器+位移量

②訪問(wèn)約定的邏輯段,簡(jiǎn)化的地址表達(dá)式:

[基址寄存器+位移量]

物理地址二約定的段寄存器內(nèi)容義16+基址寄存器+位移量

微型計(jì)算機(jī)原理與接口技術(shù)

③基址寄存器和約定訪問(wèn)的邏輯段

9皿

基址寄存器約定訪問(wèn)的邏輯段

BP堆棧段

16位尋址方式

BX數(shù)據(jù)段

EBP,ESP堆棧段

32位尋址方式

EAX-EDX,ESI,EDI數(shù)據(jù)段

微型計(jì)算機(jī)原理與接口技術(shù)

④舉例

設(shè)數(shù)據(jù)段BUF單元依次有:78H,56H,34H,12H

則:MOVDS,數(shù)據(jù)段段基址

BUF

MOVBX,BUF單元有效地址

MOVDH,[BX+1];DH=56H

MOVDX,[BX+2];DX=1234H

(4)變址尋址

①有比例因子的變址尋址其地址表達(dá)式為

段寄存器:[比例因子*變址寄存器+位移量]

物理地址二段寄存器義16+比例因子X(jué)變址寄存器+位移量

微型計(jì)算機(jī)原理與接口技術(shù)

②沒(méi)有比例因子的變址尋址其地址表達(dá)式為:

段寄存器:[變址寄存器+位移量]

訪問(wèn)約定的邏輯段可簡(jiǎn)化為:

[變址寄存器+位移量]

OIOW物理地址二約定的段寄存器X16+變址寄存器+位移量

3變址寄存器與約定訪問(wèn)的邏輯段

!變址寄存器約定訪問(wèn)的邏輯段適用于……

SI,DI數(shù)據(jù)段無(wú)比例因子,16位

尋址

|EBP堆棧段有比例因子,32位

EAX-數(shù)據(jù)段尋址

jEDX,ESI,EDI

微型計(jì)算機(jī)原理與接口技術(shù)

說(shuō)明:比例因子只能是1、2、4、8

因此:MOVAL,[8*SI+15];非法,16位尋址不能使用比例因子

MOVAL,[10*ESI+5];非法指令,比例因子錯(cuò)了

MOVAL,ES:[SI];訪問(wèn)附加段

MOVAL,[SI];訪問(wèn)數(shù)據(jù)段

(5)基址加變址尋址

存儲(chǔ)單元的有效地址由3部分組成

有比例因子的基址加變址的地址表達(dá)式為:

段寄存器:[基址寄存器+比例因子*變址寄存器+位移量]

訪問(wèn)約定邏輯段其地址表達(dá)式簡(jiǎn)化為:

[基址寄存器+比例因子*變址寄存器+位移量]

微型計(jì)算機(jī)原理與接口技術(shù)

②無(wú)比例因子基址加變址

地址表達(dá)式:

段寄存器:[基址寄存器+變址寄存器+位移量]

訪問(wèn)約定邏輯段:

[基址寄存器+變址寄存器+位移量]

基址加變址尋址是基址尋址和變址尋址的組合,要求

1基址寄存器和變址寄存器都是16位或都是32位,否

則(16位尋址和32位尋址混合使用)是非法指令

★默認(rèn)的段寄存器不一致,這樣的組合雖然是合法,

|但容易出錯(cuò)

微型計(jì)算機(jī)原理與接口技術(shù)

微型計(jì)算機(jī)原理與接口技術(shù)

微型計(jì)算機(jī)原理與接口技術(shù)

尋址方式的學(xué)習(xí)要點(diǎn):

1.指令中的操作數(shù)有3種:立即數(shù),寄存器數(shù),內(nèi)存操作數(shù)

訪問(wèn)立即數(shù)叫立即尋址方式;訪問(wèn)寄存器數(shù)叫寄存器尋

址方式;訪問(wèn)內(nèi)存操作數(shù)由5種尋址方式:

直接尋址、間址、基址、變址、基址加變址

不同的尋址方式是為了程序員在寫(xiě)指令時(shí)通過(guò)不同的手

段提供操作數(shù).

2.關(guān)于16位尋址和32位尋址

16位尋址:采用16位間址、基址、變址、基址加變址

32位尋址:采用32位間址、基址、變址、基址加變址

微型計(jì)算機(jī)原理與接口技術(shù)

3.在實(shí)模式下,一個(gè)邏輯段的體積最大為64K,存儲(chǔ)單元

的有效地址為16位,不可能超過(guò)FFFFH,???在實(shí)模式下運(yùn)行的

程序通常采用16位尋址

4.關(guān)于段約定和段超越

在用間址、基址、變址、基址加變址尋址內(nèi)存操

作數(shù)時(shí),其地址表達(dá)式都有2種書(shū)寫(xiě)格式一有段前綴和

無(wú)段前綴

①如用BP、EBP、ESP參與尋址,CPU自動(dòng)認(rèn)為是訪問(wèn)堆棧

段,???段超越前綴“SS:”可省

微型計(jì)算機(jī)原理與接口技術(shù)

MOVAL,SS:[BP];訪問(wèn)SS段,用BP間址

MOVAL,[BP]

②如用BP、EBP、ESP參與尋址非堆棧段,必須明確寫(xiě)出段

超越前綴,如:

MOVAL,IDS:I[BP];訪問(wèn)堆棧段,用BP間址

MOVAL,ES:[BP+2]

——>明確寫(xiě)出,不能省

③如用BX、SI、DI、EAX?EDX、ESI、EDI參與尋址,CPU

自動(dòng)認(rèn)為是訪問(wèn)數(shù)據(jù)段,???“DS:”可省

微型計(jì)算機(jī)原理與接口技術(shù)

如:MOVAL,DS:[BX]

MOVAL,[BX]

④如用BX、SI、DI、EAX、EDX、ESI、EDI參與尋址非數(shù)

據(jù)段,必須明確寫(xiě)出段超越前綴,如:

MOVAL,ES:[BX]

MOVAL,FS:[SI+2]

——>明確寫(xiě)出,不能省

5.使用段約定訪問(wèn)內(nèi)存操作數(shù)是最常用的編程風(fēng)格

P微型計(jì)算機(jī)原理與接口技術(shù)

4.3標(biāo)志寄存器

D31D19D18DO

ACVMRNTIOPLODITSzAPC

80486標(biāo)志寄存器

80486標(biāo)志寄存器為32位,實(shí)際使用15位

15位標(biāo)志分為兩類(lèi):狀態(tài)標(biāo)志和控制標(biāo)志

伊狀態(tài)標(biāo)志記錄了當(dāng)前指令執(zhí)行后的狀態(tài)信息

伊控制標(biāo)志用來(lái)控制微處理器操作

本節(jié)首先介紹6種狀態(tài)標(biāo)志

狀態(tài)標(biāo)志寄存器微型計(jì)算機(jī)原理與接口技術(shù)

ODITSZAPC

坐位標(biāo)志C(CarryFlag)——當(dāng)結(jié)果的最高位產(chǎn)生一個(gè)進(jìn)位或借位,則C=l,否則C=0。

溢出標(biāo)志O(OverflowFlag)——在算術(shù)運(yùn)算中,帶符號(hào)數(shù)的運(yùn)算結(jié)果超出了8位或16位

帶符號(hào)數(shù)能表達(dá)的范圍,則0=1,否則0=0。

態(tài)

8位(字節(jié))運(yùn)算-128——+127

標(biāo)

16位(字)運(yùn)算-32768——+32767

志符號(hào)標(biāo)志S(SignFlag)——結(jié)果的最高位(D^或D7)為1,則S=L否則S=0。

零標(biāo)志Z(ZeroFlag)——若運(yùn)算的結(jié)果為0,貝吃=1,否則Z=0。

奇偶標(biāo)志P(ParityFlag)——若結(jié)果中'1,的個(gè)數(shù)為偶數(shù),貝!JP=L否則,P=0。

速助進(jìn)位標(biāo)志A(AuxiliaryFlag)——在操作時(shí),由低半字節(jié)(第3位)向高半字節(jié),

有進(jìn)位或借位,貝IJA=L否則A=0。

為響標(biāo)志(DirectionFlag)——D=1,串操作時(shí)地址自動(dòng)減量,D=0,串操作時(shí)地址自

控動(dòng)增量。

標(biāo)中斷允許標(biāo)志(Interrupt一enableFlag)------1=1,則允許CPU接收外部的中斷請(qǐng)求,

志1=0,則屏蔽外部中斷請(qǐng)求。

追蹤標(biāo)志(TraceFlag)——T=l,使處理進(jìn)入單步方式,以便于調(diào)試。

微型計(jì)算機(jī)原理與接口技術(shù)

二.復(fù)習(xí):有關(guān)溢出的幾個(gè)概念

1.什麼是溢出?

運(yùn)算結(jié)果超出寄存器能表示的范圍,稱(chēng)為溢出。

溢出和操作數(shù)的性質(zhì)有關(guān)。

8位無(wú)符號(hào)數(shù)運(yùn)算,結(jié)果>255有溢出

16位無(wú)符號(hào)數(shù)運(yùn)算,結(jié)果>65535有溢出

32位無(wú)符號(hào)數(shù)運(yùn)算,結(jié)果〉232”有溢出

8位有符號(hào)數(shù)運(yùn)算,?128>結(jié)果>127有溢出

16位有符號(hào)數(shù)運(yùn)算,?32768>結(jié)果>32767有溢出

32位有符號(hào)數(shù)運(yùn)算,?23i>結(jié)果>231-1有溢出

微型計(jì)算機(jī)原理與接口技術(shù)

2.CPU如何判斷溢出

由于溢出和操作數(shù)的性質(zhì)有關(guān),而操作數(shù)的性質(zhì)是由

程序員定義的。CPU只能默認(rèn)一種選擇,即CPU一律

默認(rèn)操作數(shù)是有符號(hào)補(bǔ)碼數(shù),并以此來(lái)設(shè)置溢出標(biāo)志O

3.程序員如何判斷溢出

『有符號(hào)數(shù)運(yùn)算,判0標(biāo)志,0標(biāo)志為1,有溢出

『無(wú)符號(hào)數(shù)加/減,判C標(biāo)志,C標(biāo)志為1,有溢出

微型計(jì)算機(jī)原理與接口技術(shù)

AL=90H,如果C8H為無(wú)符號(hào)數(shù)(值=200),則有溢出。

如果C8H為有符號(hào)數(shù)(值=-56),則無(wú)溢出。

這6個(gè)標(biāo)志中,C.0.P.S.Z可為程序的轉(zhuǎn)移提供測(cè)試條件。

微型計(jì)算機(jī)原理與接口技術(shù)

4.4匯編語(yǔ)言語(yǔ)法規(guī)則

為了在介紹指令的過(guò)程中,穿插一些例題,有必要先介紹一些匯編語(yǔ)言的

語(yǔ)法規(guī)則

??概述

1.可執(zhí)行文件的生成

*編輯

調(diào)編輯程序如:EDIT.EXE

QEDIT.EXE

匯編源程序V

編輯*,ASM文件

微型計(jì)算機(jī)原理與接口技術(shù)

*編譯

2I0W

微型計(jì)算機(jī)原理與接口技術(shù)

2.源程序中的語(yǔ)句類(lèi)型

一個(gè)完整的源程序應(yīng)包含2類(lèi)語(yǔ)句:

符號(hào)指令、匯編偽指令(偽語(yǔ)句)

但符號(hào)指令:經(jīng)匯編后,其目標(biāo)指令通知CPU進(jìn)行什么操作

但偽指令:是非機(jī)器指令,是在匯編期間進(jìn)行操作的。

為匯編程序,鏈接程序提供匯編鏈接信息

符號(hào)指令|標(biāo)號(hào):|符號(hào)指令

偽指令局號(hào)名偽指令

此處無(wú)冒號(hào)

標(biāo)號(hào)名、變量名、段名、過(guò)程名…命名規(guī)則:以字母開(kāi)頭,后跟字

母、數(shù)字…長(zhǎng)度431個(gè)字符

微型計(jì)算機(jī)原理與接口技術(shù)

二.常用的偽指令

1.字節(jié)字義偽指令

變量名DB一串用逗號(hào)間隔的單字節(jié)數(shù)

如:N1DB12H,64,-1,3*3

DB01010101B,JB'

DB0A6H,6HELLO5

N2DB?,?,?;與下條等價(jià)

N2DB3DUP(?)

說(shuō)明:

?DB—DefineByte的縮寫(xiě),“定義字節(jié)”。

??一隨機(jī)數(shù),Dup~Duplicate(重復(fù))

?3Dup(?)代表3個(gè)用逗號(hào)間隔的隨機(jī)數(shù)

?5Dup('A')代表5個(gè)用逗號(hào)間隔的A的ASCII碼

微型計(jì)算機(jī)原理與接口技術(shù)

如:

N1DB12H,64,-1,3*3

DB01010101B「A'JB'

DB0A6HJHELLO'

N2DB?,?,?;與下條等價(jià)

N2DB3DUP(?)

功能:

但通知匯編程序把DB后跟的單字

節(jié)數(shù),依次存入從變量(如N1)

開(kāi)始的單元,負(fù)數(shù)用補(bǔ)碼表示,N2:

單引號(hào)中的字符翻譯成ASCII碼o

微型計(jì)算機(jī)原理與接口技術(shù)

如:N1:

N1DB12H,64,-1,3*3

DB01010101B「A'JB'

DB0A6HJHELLO'

N2DB?,?,?;與下條等價(jià)_____K

N2DB3DUP(?)|匯編耳)

功能:

P用DB定義的這些內(nèi)存單元(Nl~N1+12,

N2~N2+2)的屬性均為“字節(jié)型”。N1+12:

N2:

N2+2:

微型計(jì)算機(jī)原理與接口技術(shù)

2.字定義偽指令

變量名DW一串用逗號(hào)間隔的雙字節(jié)數(shù)

WNUM:

如:

WNUMDW1234H,12JAB'JC'

匯編后

DW9?,??

DW2DUP(?)

功能:

P用DW定義的這些單元的屬性都是“字

型”,

如上例,WNUM~WNUM+11這12個(gè)單元的NUM+11:

屬性都凝二用的高址單元。

微型計(jì)算機(jī)原理與接口技術(shù)

3.雙字定義偽指令

變量名DD一串用逗號(hào)間隔的4字節(jié)數(shù)

如:

DNUMDD12345678H

功能:

P通知匯編程序把DD后跟的數(shù)存入變量名開(kāi)始的單元,

每一個(gè)數(shù)占4個(gè)字節(jié),低位字節(jié)f低址單元,高位字

節(jié)f高址單元。

P用DD定義的這些單元的屬性都是“雙字型”,上例

DNUM~DNUM+3單元,這些單元都是雙字型單元。

微型計(jì)算機(jī)原理與接口技術(shù)

4.多字節(jié)定義偽指令

變量名DF一串用逗號(hào)間隔的6字節(jié)數(shù)

變量名DQ一串用逗號(hào)間隔的8字節(jié)數(shù)

變量名DT一串用逗號(hào)間隔的10字節(jié)數(shù)

功能:通知匯編程序?yàn)镈F/DQ/DT后跟的每一個(gè)數(shù),分配

6/8/10個(gè)單元。

5.等值偽指令

符號(hào)常數(shù)EQU表達(dá)式

如:NUMEQU33

功能:定義符號(hào)常數(shù)NUM的值為33

6.等號(hào)偽指令

符號(hào)常數(shù)二表達(dá)式

如:NUM=33

功能:定義符號(hào)常數(shù)NUM的值為33

2微型計(jì)算機(jī)原理與接口技術(shù)

區(qū)別:

P用EQU定義的符號(hào)常數(shù),其值在后繼語(yǔ)句中不能更改

P用“廿定義的符號(hào)常數(shù),其值在后繼語(yǔ)句中可以重新定義

例如:NUMEQU33

MOVAL,NUM;該指令與下條指令等價(jià)

MOVAL,33

三.常用運(yùn)算符

1.算術(shù)運(yùn)算符:+,*,/

2.關(guān)系運(yùn)算符:

EQ(等于),NE(不等于),GT(大于),LT(小于),

GE(大于或等于)

微型計(jì)算機(jī)原理與接口技術(shù)

3.$運(yùn)算符

P匯編程序?qū)υ闯绦蚴侵鹦袇R編的,$運(yùn)算符可以返回

匯編計(jì)數(shù)器的當(dāng)前值。

應(yīng)用:

穌運(yùn)算符緊跟在DB、DW、DD偽指令之后,統(tǒng)計(jì)字符

串的長(zhǎng)度。

例如數(shù)據(jù)段有:

BUFDB5THEQUICKBROWNFOX5;字符串長(zhǎng)度19

LLLEQU$-BUF

匯編后符號(hào)常數(shù)LLL的值即為19

微型計(jì)算機(jī)原理與接口技術(shù)

4.SEG運(yùn)算符

P格式:SEG段名或變量名或標(biāo)號(hào)名

P功能:計(jì)算某一邏輯段的段基址

01010如:MOVAX,SEGDATA

MOVDS,AX

設(shè)“DATA”是數(shù)據(jù)段的段名,上述兩條指令算出數(shù)據(jù)段

的段基址,先賦給AX,再轉(zhuǎn)賦DS。

5.OFFSET運(yùn)算符

P格式:OFFSET變量名或標(biāo)號(hào)名

P功能:算出某個(gè)變量或標(biāo)號(hào)名所在單元的偏移地址(有效

地址)。

微型計(jì)算機(jī)原理與接口技術(shù)

設(shè)以“DATA”為段名的數(shù)據(jù)段中,存在

BUFDB12,34,56

代碼段:MOVAX,SEGDATA

MOVDS,AX

MOVBX,OFFSETBUF

MOVAL,[BX];AL=12

以下兩條指令等價(jià)的:

MOVBX,OFFSETBUF

LEABX,BUF

微型計(jì)算機(jī)原理與接口技術(shù)

6.PTR運(yùn)算符

格式:類(lèi)型說(shuō)明符PTR地址表達(dá)式

U

BYTE(字節(jié))

WORD(字)>內(nèi)存單元5種尋址方式

DWORD(雙字)

FAR(遠(yuǎn))

子程序的名稱(chēng)

NEAR(近)1

功能:在本條指令中臨時(shí)修改地址表達(dá)式的屬性

微型計(jì)算機(jī)原理與接口技術(shù)

舉例:設(shè)數(shù)據(jù)段有:

BUFDB11,22,11

22

WBUFDW?,?

33

XXDBOFFH,44

OIOW

YYDBOFFH,XX

ZZDBOFFH,XX

XX

代碼段:XX

XX:FFH

1OVAX,BUFx

0

OVAL,BUFYY:FFH

OVAX,WORDPTRBUF;AH=22,AL=11FFH

②MOVBUF,12H

③BUF,1234HX

WORDPTRBUFJ234H;BUF單元為34H,BUF+1單元為12H

微型計(jì)算機(jī)原理與接口技術(shù)

舉例:設(shè)數(shù)據(jù)段有:

BUFDB11,22,33,44

WBUFDW?,?匯編后

OIOWXXDBOFFH,0

YYDBOFFH,OFFH,0,0

ZZDBOFFH,OFFH,OFFH,0

④MOVBX,OFFSETXX

MOVSLOFFSETYY

MOVDI,OFFSETZZ

MOV[BX],12HX

MOVBYTEPTR[BX],12H;XX單元為12H

MOVWORDPTR[BX],12H;XX單元為12H,XX+1單元為0

微型計(jì)算機(jī)原理與接口技術(shù)

7.方括號(hào)

用方括號(hào)括起來(lái)的地址表達(dá)式是訪問(wèn)內(nèi)存操作數(shù)常用的

尋址方式,方括號(hào)的另一用途是標(biāo)注數(shù)組元素的下標(biāo),

OIOW下標(biāo)從0開(kāi)始。

如上例數(shù)據(jù)段:BUFDB11,22,33,44

WBUFDW?,?

XXDBOFFH,0

YYDBOFFH,OFFH,0,0

代碼段:ZZDBOFFH,OFFH,0FFH,0

MOVAL,BUF[3];AL=44

變量名就數(shù)組下標(biāo)

是數(shù)組名

微型計(jì)算機(jī)原理與接口技術(shù)

4.580486基本集指令

分6類(lèi),為講授方便,用

則10:

N代表立即數(shù),N8、N16、N32代表8、16、32位立即數(shù)

R代表寄存器操作數(shù),R8、R16、R32代表8、16、32位

寄存器操作數(shù)

M代表內(nèi)存操作數(shù),M8、M16、M32代表8、16、32位

內(nèi)存操作數(shù)

S代表段寄存器

"微型計(jì)算機(jī)原理與接口技術(shù)

總說(shuō)明:

1.對(duì)于雙操作數(shù)指令(如:MOV,ADD,CMP...)

★源、目操作數(shù)不可同為內(nèi)存操作數(shù)

★源、目操作數(shù)屬性一致(長(zhǎng)度相同)

★當(dāng)目標(biāo)操作數(shù)為間址、變址、基址、基+變址的內(nèi)

存操作數(shù),而源操作數(shù)為單字節(jié)/雙字節(jié)立即數(shù),

則目標(biāo)操作數(shù)必須用PTR說(shuō)明類(lèi)型

2.對(duì)于單操作數(shù)指令(如:INC,DEC...)

若操作數(shù)為間、變、基、基+變的內(nèi)存操作數(shù),則

必須用PTR說(shuō)明類(lèi)型

微型計(jì)算機(jī)原理與接口技術(shù)

第一類(lèi)、傳送類(lèi)

本類(lèi)指令執(zhí)行后,不影響狀態(tài)標(biāo)志

1.通用傳送

(1)數(shù)據(jù)傳送

MOV目,源

R/M,N

R/M/S,R;目標(biāo)不允許是CS

R/M,S

R/S,M;目標(biāo)不允許是CS

功能:源一目,源不變,不影響6種標(biāo)志

微型計(jì)算機(jī)原理與接口技術(shù)

注意事項(xiàng):1.立即數(shù)不能直接送段寄存器MOVDS,3000HX

2.目標(biāo)操作數(shù)不允許用立即數(shù)方式MOV2000H,ALX

3.不允許在兩個(gè)存儲(chǔ)單元間傳送數(shù)據(jù)MOV[2000H],[3000HJ(

4.不允許在兩個(gè)段寄存器之間傳送數(shù)據(jù)MOVDS,ESX

5.源、目屬性要一致

為了深入理解數(shù)值定義偽指令、學(xué)習(xí)PTR運(yùn)算符的使用,請(qǐng)仔細(xì)

閱讀以下例題。

【例】閱讀以下程序,寫(xiě)出指令執(zhí)行后的目標(biāo)操作數(shù)。

微型計(jì)算機(jī)原理與接口技術(shù)

設(shè)數(shù)據(jù)段:BNUMDB12H,34H,56H,78H,90H

WNUMDW1122H,3344H,5566H

DNUMDD13572468H,87654321H

FNUMDF112233445566H

01010

BNUM:

DS,SEG數(shù)據(jù)段段基址

;對(duì)口3初始化

MOVBL,BNUM;BL=?

數(shù)據(jù)段經(jīng)過(guò)匯編之后,

所以,BL=12H

微型計(jì)算機(jī)原理與接口技術(shù)

設(shè)數(shù)據(jù)段:BNUMDB12H,34H,56H,78H,90H

WNUMDW1122H,3344H,5566H

DNUMDD13572468H,87654321H

FNUMDF112233445566H

代碼段:……WNUM:22H

MOVDS,SEG數(shù)據(jù)段段基址

11H

MOVBX,WNUM+2;BX=?

44H

33H

數(shù)據(jù)段經(jīng)過(guò)匯編之后,

66H

55H

所以,BX=3344H

微型計(jì)算機(jī)原理與接口技術(shù)

設(shè)數(shù)據(jù)段:BNUMDB12H,34H,56H,78H,90H

WNUMDW1122H,3344H,5566H

DNUMDD13572468H,87654321H

FNUMDF112233445566H

DNUM:

MOVDS,SEG數(shù)據(jù)段段基址

MOVEBX,DNUM+4;EBX=?

數(shù)據(jù)段經(jīng)過(guò)匯編之后,

所以,EBX=87654321H

微型計(jì)算機(jī)原理與接口技術(shù)

設(shè)數(shù)據(jù)段:BNUMDB12H,34H,56H,78H,90H

WNUMDW1122H,3344H,5566H

DNUMDD13572468H,87654321H

2I0WFNUMDF112233445566H

代碼段:....BNUM:12H

MOVDS,SEG數(shù)據(jù)段段基址34H

MOVBX,WORDPTRBNUM+1;BX=B56H

78H

數(shù)據(jù)段經(jīng)過(guò)匯編之后,

90H

所以,BX=5634H

微型計(jì)算機(jī)原理與接口技術(shù)

設(shè)數(shù)據(jù)段:BNUMDB12H,34H,56H,78H,90H

WNUMDW1122H,3344H,5566H

DNUMDD13572468H,87654321H

FNUMDF112233445566H

代碼段:……

MOVDS,SEG數(shù)據(jù)段段基址

MOVBX,WORDPTR

數(shù)據(jù)段經(jīng)過(guò)匯編之后,

所以,BX=2113H

微型計(jì)算機(jī)原理與接口技術(shù)

BNUMDB12H,34H,56H,78H,90H

WNUMDW1122H,3344H,5566H

DNUMDD13572468H,87654321H

FNUMDF112233445566H

國(guó)代碼段:……BNUM:

1.(\MOVDS,SEG數(shù)據(jù)段段基址12H

34H

yrMOVSI,OFFSETBNUM56H

■MOVBXJSI+1];BX=?78H

費(fèi)數(shù)據(jù)段經(jīng)過(guò)匯編之后,90H

■所以,BX=5634H

微型計(jì)算機(jī)原理與接口技術(shù)

(2)LEA——有效地址送寄存器。

LEAREG,SRC(REG)—(SRC)

目的操作數(shù)源操作數(shù)

(16位通用寄存器)(內(nèi)存操作數(shù))

?該指令常用來(lái)設(shè)置一個(gè)16位的寄存器作為地址指針;

?該指令的執(zhí)行效果與MOVreg,OFFSETsrc相同。

DS=1000h

例:LEABX,[100]

執(zhí)行后BX=100HBUFlOlOOh-oo—OlOOhBX

02

LEABX,BUF

?n

微型計(jì)算機(jī)原理與接口技術(shù)

(3)交換指令XCHGOPRD1,OPRD2

在寄存器間或寄存器與存儲(chǔ)器間交換信息(不允許使用段寄存器)。

2I0W源操作數(shù):寄存器、存儲(chǔ)器

目的操作數(shù):寄存器、存儲(chǔ)器

執(zhí)行的操作:(OPRD1)—(OPRD2)

例:XCHGBX,[BP+SI]

(BX)=6F30H

(BP)=0200H結(jié)果:

(BX尸1234H

(SI)=0046H(2F246H)=6F30H

(SS)=2F00H

(2F246H)=1234H

微型計(jì)算機(jī)原理與接口技術(shù)

(4)查表指令

XLAT表頭變量名

說(shuō)明:一該指令查找數(shù)據(jù)段中的字節(jié)表,即要求數(shù)據(jù)表放

在數(shù)據(jù)段,每個(gè)表元素為單字節(jié)數(shù)

一指令執(zhí)行前:EBX或BX=表頭的有效地址AL=

表元素相對(duì)于表頭的地址位移量

功能:DS:[BX+AL]一AL或DS:[EBX+AL]一AL

微型計(jì)算機(jī)原理與接口技術(shù)

2.堆棧操作指令

堆?!凑障冗M(jìn)后出的原則組織的一段內(nèi)存區(qū)域。8088中規(guī)定堆棧設(shè)

置在堆棧段(SS段)內(nèi),堆棧指針SP的初值決定了堆棧的大小。

SP始終指向堆棧的頂部,即始終指向最后推入堆棧的信息所在

的單元。00000

棧頂:棧區(qū)的低地址ss:oooo

棧底:棧區(qū)的高地址堆

★堆棧段寄存器SS:存放堆棧段段基址SS:SP一

★堆棧指針ESP(SP):存放棧頂單元的偏移地址

★SS、ESP(SP)初值,由程序員賦值或DOS系統(tǒng)自動(dòng)賦值

微型計(jì)算機(jī)原理與接口技術(shù)

★數(shù)據(jù)進(jìn)棧過(guò)程(以16位操作數(shù)進(jìn)棧為例)

SP-2一SP

高位一:

OIOW8SS[SP-1]

雙字節(jié)操作數(shù)堆棧區(qū)

低字節(jié)34H

高字節(jié)12H

XXH一SP

XXH

微型計(jì)算機(jī)原理與接口技術(shù)

★數(shù)據(jù)進(jìn)棧過(guò)程(以16位操作數(shù)進(jìn)棧為例)

SP-2一SP

高8位一SS:[SP-1]

低8位一SS:[SP-2]

堆棧區(qū)

雙字節(jié)操作數(shù)

低字節(jié)34H______<-SP

高字節(jié)12H12H

XXH

XXH

微型計(jì)算機(jī)原理與接口

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論