計(jì)算機(jī)三級(jí)偏軟包過之三級(jí)匯編_第1頁
計(jì)算機(jī)三級(jí)偏軟包過之三級(jí)匯編_第2頁
計(jì)算機(jī)三級(jí)偏軟包過之三級(jí)匯編_第3頁
計(jì)算機(jī)三級(jí)偏軟包過之三級(jí)匯編_第4頁
計(jì)算機(jī)三級(jí)偏軟包過之三級(jí)匯編_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

計(jì)算機(jī)三級(jí)偏軟包過之三級(jí)匯編1/1318086寄存器組8086有14個(gè)寄存器,它們都是16位的,這些寄存器按功能可為6類:(1)通用寄存器(4個(gè))(2)地址指針寄存器(2個(gè))(3)變址寄存器(2個(gè))(4)段寄存器(4個(gè))(5)指令指針寄存器(1個(gè))(6)標(biāo)志寄存器(1個(gè))1/1318086寄存器組1/1311)、通用寄存器(1)數(shù)據(jù)寄存器(AX、BX、CX、DX)數(shù)據(jù)寄存器用來保存操作數(shù)或運(yùn)算結(jié)果等信息。

AX寄存器稱為累加器。使用頻度最高,用于所有的輸入/輸出操作。某些字串操作以及算術(shù)運(yùn)算,如乘法、除法,某些翻譯指令也使用AX寄存器。

BX寄存器稱為基址寄存器。常用于存放存儲(chǔ)器地址。用于擴(kuò)展尋址,起變址作用。

CX寄存器稱為計(jì)數(shù)器。一般作為循環(huán)或串操作等指令中的隱含計(jì)數(shù)器。

DX寄存器稱為數(shù)據(jù)寄存器。常用于字乘法和除法中存放雙字?jǐn)?shù)據(jù)的高16位,或用來存放外設(shè)端口地址。1/131(2)變址寄存器

A、SI寄存器源變址寄存器。在字串操作中,常用SI表示字串的源地址,段地址在DS中。

B、DI寄存器目的變址寄存器。在字串操作中,常用DI表示操作的目的地址,它常和附加段寄存器ES相關(guān)連,如前述的字符串傳遞操作,DI就表示了傳送的目的地地址偏移。在字符串操作中,SI和DI都具有自動(dòng)增量或減量的功能。1/131(3)地址指針寄存器

A、SP寄存器堆棧指針寄存器。在訪問堆棧時(shí),段地址在SS中,SP則表示偏移地址。

B、BP寄存器基址指針寄存器。在通過堆棧傳遞數(shù)據(jù)和地址時(shí),段地址在SS,BP存放要傳遞的數(shù)據(jù)和地址的偏移地址。BP也可作為通用寄存器用。當(dāng)SI、DI、BP不用作變址寄存器和指針寄存器時(shí),也可以作16位數(shù)據(jù)寄存器使用,用來保存操作數(shù)和運(yùn)算結(jié)果。1/1312)、段寄存器

8086設(shè)立了4個(gè)16位的段寄存器用來保存4個(gè)當(dāng)前段的起始基址(省略了地址的低4位,即每段從內(nèi)存段界開始,低4位認(rèn)為是0),分別稱為代碼段寄存器CS、數(shù)據(jù)段寄存器DS、堆棧段寄存器SS和附加數(shù)據(jù)段寄存器ES。(1)CS寄存器代碼段寄存器。它含有當(dāng)前執(zhí)行程序所在段的首地址,這個(gè)段寄存器內(nèi)容左移4位(即乘16)再加上指令指針寄存器(IP)的內(nèi)容,就是下一條要執(zhí)行的指令地址。

(2)DS寄存器數(shù)據(jù)段寄存器。它含有當(dāng)前數(shù)據(jù)段的首地址,通常數(shù)據(jù)段用來存放數(shù)據(jù)和變量,數(shù)據(jù)段寄存器內(nèi)容加上指令中的偏移值,即為對(duì)數(shù)據(jù)段指定單元操作的地址。1/131(3)SS寄存器堆棧段寄存器。它保存當(dāng)前堆棧的首地址。堆棧是存儲(chǔ)器中設(shè)置的一種數(shù)據(jù)結(jié)構(gòu),用于存放數(shù)據(jù)和地址,有先進(jìn)后出的特點(diǎn),在調(diào)用子程序時(shí),保留返回主程序的地址,也用來保留進(jìn)入子程序?qū)⒁淖兤渲档母骷拇嫫鞯膬?nèi)容等。(4)ES寄存器附加段寄存器。附加段是在進(jìn)行字符串操作時(shí),作為目的段地址使用,這個(gè)附加段是附加的一個(gè)數(shù)據(jù)段,如用DS作為數(shù)據(jù)段段地址,SI為源地址偏移,將一個(gè)字串從源傳送到目的區(qū)去,這個(gè)目的區(qū)可設(shè)在附加段中,即ES裝附加段地址,DI寄存目的區(qū)地址的偏移。如果要使用附加段,用戶程序必須對(duì)ES初始化,即設(shè)置值,否則ES=DS,即數(shù)據(jù)段和附加數(shù)據(jù)段重合。1/1313)、指令指針寄存器

8086CPU中有一個(gè)很重要的16位指令指針寄存器IP,它總是保存下一次將要從主存中取出指令的偏移地址(簡稱EA),其值為該指令到所在代碼段段首址的字節(jié)距離。在目標(biāo)程序運(yùn)行時(shí),IP的內(nèi)容由微處理器硬件自動(dòng)設(shè)置,程序不能直接訪問IP,但一些指令卻可改變IP的值,如轉(zhuǎn)移指令、子程序調(diào)用指令等。1/1314)、標(biāo)志寄存器

程序有時(shí)需根據(jù)上次指令執(zhí)行的結(jié)果,判斷以決定執(zhí)行的方向,為此8086設(shè)有一個(gè)很重要的16位標(biāo)志寄存器,它包含9個(gè)標(biāo)志位,共占用2個(gè)字節(jié)。它們主要用于保存一條指令執(zhí)行后,CPU所處狀態(tài)信息及運(yùn)算結(jié)果的特征,其中六位作為指令執(zhí)行結(jié)果的條件標(biāo)志,三位用作控制標(biāo)志。這些標(biāo)志位在標(biāo)志寄存器中的位置如下:1/131A.條件標(biāo)志(1)符號(hào)標(biāo)志SF

第7位。對(duì)帶符號(hào)的數(shù)操作時(shí),若產(chǎn)生一個(gè)負(fù)的結(jié)果,則SF=1,否則為0,當(dāng)算術(shù)、邏輯、移位或循環(huán)移位操作時(shí),都將影響此位。(2)零標(biāo)志ZF

第6位。當(dāng)運(yùn)算結(jié)果為零時(shí),ZF=1,結(jié)果非零,則ZF=0。(3)溢出標(biāo)志OF

第11位。當(dāng)帶符號(hào)數(shù)算術(shù)運(yùn)算時(shí),商位溢出,則OF=1,否則為0,它用來作錯(cuò)誤指示標(biāo)志。1/131(4)進(jìn)位標(biāo)志CF

第0位。如果算術(shù)指令執(zhí)行完后,最高位產(chǎn)生進(jìn)位或借位,則CF=1,否則CF=0。CF還可保存移位或循環(huán)移位時(shí)移出的一位值,也可給出比較操作的結(jié)果,也可作為乘法結(jié)果的指示器。(5)輔助進(jìn)位標(biāo)志AF第4位。當(dāng)操作數(shù)第3位產(chǎn)生進(jìn)位或借位時(shí),AF=1,否則AF=0,這個(gè)標(biāo)志多用于壓縮的十進(jìn)制數(shù)操作。(6)奇偶標(biāo)志PF第2位。當(dāng)操作結(jié)果含有偶數(shù)個(gè)1時(shí),PF=1,否則PF=0,這個(gè)標(biāo)志多用于數(shù)據(jù)輸中。1/131B.狀態(tài)控制標(biāo)志

(1)方向標(biāo)志DF第10位??捎弥噶铑A(yù)置。當(dāng)DF=0時(shí),執(zhí)行串操作指令后,變址寄存器自動(dòng)遞增,當(dāng)DF=1時(shí),則動(dòng)遞減。即該標(biāo)志可控制地址朝增加的方向或減少的方向改變。(2)中斷允許標(biāo)志IF第9位。當(dāng)用指令置為1時(shí),則允許8088響應(yīng)中斷請(qǐng)求,若為0時(shí),則禁止響應(yīng)中斷請(qǐng)求。(3)跟蹤標(biāo)志TF第8位。當(dāng)置為1時(shí),則8088處于單步執(zhí)行指令方式,每執(zhí)行一條指令,自產(chǎn)動(dòng)產(chǎn)生一個(gè)類型為1的中斷。1/131主存儲(chǔ)器和堆棧

1.主存儲(chǔ)器存儲(chǔ)單元的地址和內(nèi)容

存儲(chǔ)器是計(jì)算機(jī)的記憶部件,用來存放程序和數(shù)據(jù)。按所在的位置,存儲(chǔ)器可以分成主存儲(chǔ)器和輔助存儲(chǔ)器。主存儲(chǔ)器的基本存儲(chǔ)單位是位,它能容納一個(gè)二進(jìn)制數(shù)的0和1。整個(gè)主存由許多存儲(chǔ)位構(gòu)成,這些存儲(chǔ)位每8位組合成一個(gè)字節(jié),每相鄰的2個(gè)字節(jié)又可組成一個(gè)字。一個(gè)字節(jié)或一個(gè)字就構(gòu)成一個(gè)字節(jié)或字存儲(chǔ)單元。

存儲(chǔ)單元地址:8086系統(tǒng)中,為了標(biāo)識(shí)和存取每一個(gè)存儲(chǔ)單元,給每個(gè)存儲(chǔ)單元規(guī)定一個(gè)編號(hào),這就是存儲(chǔ)單元的物理地址(簡稱PA)。1/131

右圖表明了存儲(chǔ)器中部分存儲(chǔ)單元存放信息情況。從圖1.4可看到,地址為34560H的字節(jié)的存儲(chǔ)單元中的內(nèi)容是34H,而地址為34561H的字節(jié)存儲(chǔ)單元中的內(nèi)容是12H。1/1312、物理地址的形成

8086CPU的地址線是20位的,這樣最大可尋址空間應(yīng)為220=1MB,其物理地址范圍從00000H~FFFFFH。而8086CPU寄存器都是16位的。那么,這1MB空間如何用16位寄存器表達(dá)呢?根據(jù)要求可把1M字節(jié)地址空間劃成若干邏輯段。每個(gè)邏輯段必須滿足兩個(gè)條件:一是邏輯段的起始地址(簡稱段首址)必須是16的倍數(shù),這就使段首址的最低4位總為0,高16位正好裝入一個(gè)段寄存器中;二是邏輯段的最大長度為64K,這樣某單元在段內(nèi)的相對(duì)位置可用16位段內(nèi)偏移地址表示。

由于CPU只設(shè)置了4個(gè)段寄存器,因此,CPU在當(dāng)前某一時(shí)刻最多只能訪問4個(gè)段,即當(dāng)前代碼段、當(dāng)前堆棧段、當(dāng)前數(shù)據(jù)段和當(dāng)前附加數(shù)據(jù)段,它們的首址分別由CS、SS、DS、ES給出。1/1311)、代碼段代碼段是程序代碼的存儲(chǔ)區(qū)。當(dāng)前代碼段在主存中的起始地址由代碼段寄存器CS確定,指令指示器IP總是保存著下一條將要取出指令相對(duì)于CS的偏移地址,如果要取出這條指令執(zhí)行,它的物理地址PA應(yīng)為:

PA=(CS)左移4位+(IP)2)、堆棧段堆棧段可以用來作程序的臨時(shí)數(shù)據(jù)存儲(chǔ)區(qū),存放暫時(shí)不用的數(shù)據(jù)。往堆棧中壓入數(shù)據(jù)和從棧中彈出數(shù)據(jù)時(shí),棧頂?shù)奈锢淼刂窞椋海?/p>

PA=(SS)左移4位+(SP)1/1313)、數(shù)據(jù)和附加數(shù)據(jù)段數(shù)據(jù)段是程序中所使用的數(shù)據(jù)存儲(chǔ)區(qū),分為數(shù)據(jù)段和附加數(shù)據(jù)段,其段首址分別由數(shù)據(jù)段寄存器DS與附加數(shù)據(jù)段寄存器ES確定。當(dāng)訪問數(shù)據(jù)段中某一變量時(shí),其物理地址為:

PA=(DS或ES)左移4位+該變量的偏移地址4)、段的分配存儲(chǔ)器分段方式并非把1M字節(jié)劃分成16個(gè)64K字節(jié)的段使用,而是指CPU每次只能訪問4個(gè)段。這4個(gè)段可以分配在1M字節(jié)內(nèi)的任何地方,它們可以是完全重疊的,也可以是部分重疊或不重疊的,而且可以按任意順序存放在主存的可尋址空間中。1/131訪問存儲(chǔ)器的方式

默認(rèn)的段寄存器可跨越的段寄存器偏移地址取指令CS無IP堆棧操作SS無SP一般數(shù)據(jù)訪問DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無DI段寄存器的使用規(guī)定1/131跨段前綴示例。

MOV AX,DS:[BP]MOV CX,SS:[SI]

該例中,DS:,SS:均為跨段前綴,此時(shí)默認(rèn)狀態(tài)無效,操作數(shù)的物理地址PA由段寄存器內(nèi)容左移4位加偏移EA形成。上述2條指令的源操作數(shù)物理地址分別為:

PA1=(DS)左移4位+[BP]PA2=(SS)左移4位+[SI]1/131匯編語言指令格式如下:

[標(biāo)號(hào)場:]操作場[操作數(shù)場][;注釋場]其中:

[]:表示該項(xiàng)內(nèi)容可要可不要。

[標(biāo)號(hào)場]:表示該指令的在代碼段中的偏移地址,可以不要,標(biāo)號(hào)后用“:”與操作場連接。

操作場:表示該操作的功能,不能省略。

[操作數(shù)場]:表示該指令所需的操作數(shù),各操作數(shù)之間用“,”隔開。當(dāng)操作數(shù)為兩個(gè)時(shí),一般地前面的稱為目的操作數(shù)DST,后面的稱為源操作數(shù)SRC。

[;注釋場]:對(duì)該指令進(jìn)行說明,起到幫助讀者閱讀理解的作用,不參加指令的執(zhí)行。

例如:NEXT1:MOVAX,0;MOVE0TOAX1/1318086/8088尋址方式

計(jì)算機(jī)指令尋找操作數(shù)存放地址的方式稱為指令的尋址方式。數(shù)據(jù)類型操作數(shù)分為:(1)立即數(shù)操作數(shù):指令中所需的操作數(shù)為立即數(shù),即我們常說的常量或常數(shù)。(2)寄存器操作數(shù):指令中所需的操作數(shù)放在指定的寄存器中。(3)存儲(chǔ)器操作數(shù):指令中所需的操作數(shù)放在指定的存儲(chǔ)器中的存儲(chǔ)單元中,而指令中的操作數(shù)提供存儲(chǔ)單元的偏移地址。(4)I/O操作數(shù):指令中所需的操作數(shù)來源于I/O端口。1/131以

MOV

指令為例

立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]寄存器相對(duì)尋址MOVAX,COUNT[SI]基址變址尋址MOVAX,[BP][DI]相對(duì)基址變址尋址MOVAX,MASK[BX][SI]1/131

數(shù)據(jù)傳送指令

算術(shù)指令

邏輯指令

串處理指令

控制轉(zhuǎn)移指令

處理機(jī)控制與雜項(xiàng)操作指令8086/8088指令系統(tǒng)

8086的指令系統(tǒng)可以分為6組:

1/131一、數(shù)據(jù)傳送指令:

通用數(shù)據(jù)傳送指令

MOV、PUSH、POP、XCHG

累加器專用傳送指令

IN、OUT、XLAT

地址傳送指令

LEA、LDS、LES

標(biāo)志寄存器傳送指令

LAHF、SAHF、PUSHF、POPF

類型轉(zhuǎn)換指令

CBW、CWD1/131(1)傳送指令:MOVDST,SRC

執(zhí)行操作:(DST)(SRC)注意:*DST不能是

CS*DST、SRC不能同時(shí)為段寄存器

MOVDS,ES

*

立即數(shù)不能直接送段寄存器

MOVDS,2000H

*

DST不能是立即數(shù)*

DST、SRC不能同時(shí)為存儲(chǔ)器尋址1、

通用數(shù)據(jù)傳送指令1/131(2)進(jìn)棧指令:PUSHSRC

執(zhí)行操作:(SP)

(SP)–2((SP)+1,(SP))

(SRC)(3)出棧指令:POPDST

執(zhí)行操作:(DST)

((SP)+1,(SP))(SP)

(SP)+2堆棧:‘先進(jìn)后出’的存儲(chǔ)區(qū),存在于堆棧段中,SP

在任何時(shí)候都指向棧頂。

注意:*堆棧操作必須以字為單位。

*不影響標(biāo)志位

*不能用立即尋址方式

PUSH1234H

*DST不能是CSPOPCS

1/131例:假設(shè)(AX)=2107H,執(zhí)行

PUSHAX********(SP)

PUSHAX執(zhí)行前(SP)

********07H21H低地址

高地址PUSHAX執(zhí)行后進(jìn)棧方向1/131(SP)

********07H21HPOPBX執(zhí)行前(SP)

********07H21H低地址

高地址POPBX執(zhí)行后

(BX)=2107H例:POPBX出棧方向1/131例:PUSHDSSUBAX,AXPUSHAX……RET例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCXPOPBXPOPAX1/131(4)交換指令:XCHGOPR1,OPR2

執(zhí)行操作:(OPR1)

(OPR2)注意:

*

不影響標(biāo)志位

*不允許使用段寄存器例:XCHGBX,[BP+SI]XCHGAL,BH1/1312、累加器專用傳送指令(只限使用AX或AL)(1)輸入指令(I/O

CPU)

長格式:INAL,PORT

(字節(jié))

INAX,PORT

(字)執(zhí)行操作:(AL)

(PORT)(字節(jié))

(AX)

(PORT+1,PORT)(字)短格式:INAL,DX

(字節(jié))

INAX,DX

(字)執(zhí)行操作:(AL)((DX))(字節(jié))

(AX)((DX)+1,(DX))(字)

1/131(2)輸出指令(CPU

I/O)長格式:OUTPORT,AL

(字節(jié))

OUTPORT,AX

(字)執(zhí)行操作:(PORT)

(AL)(字節(jié))

(PORT+1,PORT)

(AX)(字)短格式:OUTDX,AL

(字節(jié))

OUTDX,AX

(字)執(zhí)行操作:((DX))

(AL)(字節(jié))

((DX)+1,(DX))

(AX)(字)1/131注意:*

不影響標(biāo)志位*

前256個(gè)端口號(hào)00H~FFH可直接在指令中指定(長格式)*如果端口號(hào)

256,端口號(hào)

DX(短格式)例:測試某狀態(tài)寄存器(端口號(hào)27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,

轉(zhuǎn)ERROR處理1/131(BX)

30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H(3)換碼指令:XLAT

或XLATOPR

執(zhí)行操作:(AL)

((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令執(zhí)行后(AL)=33H注意:*

不影響標(biāo)志位*

字節(jié)表格(長度不超過256)

首地址

(BX)*

需轉(zhuǎn)換代碼(AL)1/1313、地址傳送指令

(1)有效地址送寄存器指令:

LEAREG,SRC

執(zhí)行操作:(REG)

SRC

(2)指針?biāo)图拇嫫骱虳S指令:

LDSREG,SRC

執(zhí)行操作:(REG)

(SRC)(DS)

(SRC+2)

4個(gè)相繼字節(jié)

寄存器(通常是SI)、DS

(3)指針?biāo)图拇嫫骱虴S指令:

LESREG,SRC

執(zhí)行操作:(REG)

(SRC)(ES)

(SRC+2)

4個(gè)相繼字節(jié)

寄存器(通常是DI)、ES1/1314、標(biāo)志寄存器傳送指令

(1)標(biāo)志送AH指令:

LAHF

執(zhí)行操作:(AH)

(PSW的低字節(jié))

(2)AH送標(biāo)志寄存器指令:

SAHF

執(zhí)行操作:(PSW的低字節(jié))

(AH)

(3)標(biāo)志進(jìn)棧指令:

PUSHF

執(zhí)行操作:(SP)

(SP)-2((SP)+1,(SP))

(PSW)

(4)標(biāo)志出棧指令:

POPF

執(zhí)行操作:(PSW)

((SP)+1,(SP))(SP)

(SP)+2*影響標(biāo)志位1/1315、類型轉(zhuǎn)換指令

(1)CBWAL

AX執(zhí)行操作:若(AL)的最高有效位為0,則(AH)=00H

若(AL)的最高有效位為1,則(AH)=0FFH(2)CWDAX

(DX,AX)執(zhí)行操作:若(AX)的最高有效位為0,則(DX)=0000H

若(AX)的最高有效位為1,則(DX)=0FFFFH注意:

*

無操作數(shù)指令

*隱含對(duì)AL或AX進(jìn)行符號(hào)擴(kuò)展

*不影響條件標(biāo)志位1/131二、算術(shù)指令:

加法指令

ADD、ADC、INC

減法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV

十進(jìn)制調(diào)整指令

DAA、DAS、

AAA、AAS、AAM、AAD1/1311、加法指令(1)加法指令:

ADDDST,SRC

執(zhí)行操作:(DST)

(SRC)+(DST)(2)帶進(jìn)位加法指令:

ADCDST,SRC

執(zhí)行操作:(DST)

(SRC)+(DST)+CF(3)加1指令:

INCOPR

執(zhí)行操作:(OPR)

(OPR)+1注意:*

除INC指令不影響CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響1/131加法指令對(duì)條件標(biāo)志位(CF/OF/ZF/SF)的影響:CF位表示無符號(hào)數(shù)相加的溢出。OF位表示帶符號(hào)數(shù)相加的溢出。1結(jié)果為負(fù)0否則SF=1結(jié)果為00否則ZF=1和的最高有效位有向高位的進(jìn)位0否則CF=1兩個(gè)操作數(shù)符號(hào)相同,而結(jié)果符號(hào)與之相反0否則OF=1/131n=8bit帶符號(hào)數(shù)(-128~127)無符號(hào)數(shù)(0~255)

00000100+0000101100001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶符號(hào)數(shù)和無符號(hào)數(shù)都不溢出00001001+0111110010000101

帶:(+9)+(+124)=-123OF=1

無:9+124=133CF=0帶符號(hào)數(shù)溢出無符號(hào)數(shù)溢出00000111+1111101100000010帶:(+7)+(-5)=+2OF=0無:7+251=2CF=1帶符號(hào)數(shù)和無符號(hào)數(shù)都溢出10000111+1111010101111100帶:(-121)+(-11)=+124OF=1無:135+245=124CF=11/1312、減法指令(1)減法指令:

SUBDST,SRC

執(zhí)行操作:(DST)

(DST)-(SRC)

(2)帶借位減法指令:SBBDST,SRC

執(zhí)行操作:(DST)

(DST)-(SRC)-CF(3)減1指令:

DECOPR

執(zhí)行操作:(OPR)

(OPR)-11/131(4)求補(bǔ)指令:

NEGOPR

執(zhí)行操作:(OPR)

-(OPR)(5)比較指令:

CMPOPR1,OPR2

執(zhí)行操作:(OPR1)-(OPR2)注意:*除DEC指令不影響

CF標(biāo)志外,均對(duì)條件標(biāo)志位有影響。1/131減法指令對(duì)條件標(biāo)志位(CF/OF/ZF/SF)的影響:CF

位表示無符號(hào)數(shù)減法的溢出。OF

位表示帶符號(hào)數(shù)減法的溢出。1被減數(shù)的最高有效位有向高位的借位0否則CF=1兩個(gè)操作數(shù)符號(hào)相反,而結(jié)果的符號(hào)與減數(shù)相同0否則OF=1減法轉(zhuǎn)換為加法運(yùn)算時(shí)無進(jìn)位0否則CF=或1/131NEG指令對(duì)CF/OF的影響:0操作數(shù)為01否則CF=1操作數(shù)為-128(字節(jié)運(yùn)算)或操作數(shù)為-32768(字運(yùn)算)0否則OF=1/1313、乘法指令(1)無符號(hào)數(shù)乘法指令:

MULSRC

執(zhí)行操作:字節(jié)操作數(shù)(AX)

(AL)*(SRC)

字操作數(shù)(DX,AX)

(AX)*(SRC)(2)帶符號(hào)數(shù)乘法指令:

IMULSRC

執(zhí)行操作:同上注意:*AL(AX)為隱含的乘數(shù)寄存器。*

AX(DX,AX)為隱含的乘積寄存器。*

SRC不能為立即數(shù)。*除CF和OF外,對(duì)條件標(biāo)志位無定義。1/131乘法指令對(duì)CF/OF的影響:00乘積的高一半為零11否則MUL指令:CF/OF=00乘積的高一半是低一半的符號(hào)擴(kuò)展11否則

IMUL指令:CF/OF=1/1314、除法指令

無符號(hào)數(shù)除法指令:DIVSRC

執(zhí)行操作:字節(jié)操作(AL)

(AX)/(SRC)的商

(AH)

(AX)/(SRC)的余數(shù)字操作(AX)

(DX,AX)/(SRC)的商

(DX)

(DX,AX)/(SRC)的余數(shù)

帶符號(hào)數(shù)除法指令:IDIVSRC注意:

*AX(DX,AX)為隱含的被除數(shù)寄存器。

*

AL(AX)為隱含的商寄存器。

*

AH(DX)為隱含的余數(shù)寄存器。

*

SRC不能為立即數(shù)。

*

對(duì)所有條件標(biāo)志位均無定義。1/1315、十進(jìn)制調(diào)整指令BCD碼:用二進(jìn)制編碼的十進(jìn)制數(shù),又稱二--十進(jìn)制數(shù)壓縮的BCD碼:用4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼

DIGIT ASCII BCD0 30H 001100001 31H 00110001… … …9 39H 001110011/131例:寫出(3590)10的壓縮BCD碼和非壓縮BCD碼,并分別把它們存入數(shù)據(jù)區(qū)

PAKED

和UNPAK壓縮BCD: (3590)10=(0011010110010000)BCD非壓縮BCD:

(3590)10=(00000011000001010000100100000000)BCDPAKED

90H35HUNPAK

00H09H05H03H1/131問題的提出:十進(jìn)制調(diào)整指令19壓縮BCD:000110012700100001+110+08+00001000(00100111)BCDAF=11/131A、壓縮BCD碼調(diào)整指令:

加法的壓縮BCD碼調(diào)整指令DAA

減法的壓縮BCD碼調(diào)整指令DAS1/131(1)加法的十進(jìn)制調(diào)整指令DAA

調(diào)整指令:DAA執(zhí)行操作:如果AL寄存器中低4位大于9或輔助進(jìn)位(AF)=1,則(AL)=(AL)+6且(AF)=1;如果(AL)>=0A0H或(CF)=1,則(AL)=(AL)+60H且(CF)=1。同時(shí),SF、ZF、PF均有影響。例:壓縮BCD碼的加法運(yùn)算。

MOVAL,68H

;(AL)=68H,表示壓縮BCD碼68

MOVBL,28H

;(BL)=28H,表示壓縮BCD碼28

ADDAL,BL

;二進(jìn)制加法:(AL)=68H+28H=90H

DAA

;十進(jìn)制調(diào)整:(AL)=96H

;實(shí)現(xiàn)壓縮BCD碼加法:68+28=961/131

(2)減法的十進(jìn)制調(diào)整指令DAS調(diào)整指令:

DAS執(zhí)行操作:

如果(AF)=1或AL寄存器中低4位大于9,則(AL)=(AL)-6且(AF)=1;如果(AL)>=0A0H或(CF)=1,則(AL)=(AL)-60H且(CF)=1。同時(shí)SF、ZF、PF均受影響。例:壓縮BCD碼的減法運(yùn)算。

MOV AL,68H

;(AL)=68H,表示壓縮BCD碼68

MOV BL,29H

;(BL)=29H,表示壓縮BCD碼29

SUB AL,BL

;二進(jìn)制減法:(AL)=68H-29H=03FH

DAS

;十進(jìn)制調(diào)整:(AL)=39H

;實(shí)現(xiàn)壓縮BCD碼減法:68-29=391/131B、非壓縮BCD碼調(diào)整指令:

加法的非壓縮BCD碼調(diào)整指令A(yù)AA

減法的非壓縮BCD碼調(diào)整指令A(yù)AS

乘法的非壓縮BCD碼調(diào)整指令A(yù)AM

除法的非壓縮BCD碼調(diào)整指令A(yù)AD1/131(1)加法的非壓縮BCD碼調(diào)整指令A(yù)AA

語句格式:AAA

指令功能:如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)+6

(AH)=(AH)+1

(AF)=(CF)=1

且AL高4位清零。否則:(CF)=(AF)=0AL高4位清零。1/131

(2)減法的非壓縮BCD碼調(diào)整指令A(yù)AS

語句格式:AAS

指令功能:如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)-6

(AH)=(AH)-1

(AF)=(CF)=1AL高4位清零。否則:(CF)=(AF)=0

AL高4位清零。其他標(biāo)志位OF、PF、SF、ZF不確定。1/131(3)乘法的非壓縮BCD碼調(diào)整指令A(yù)AM

語句格式:AAM

指令功能:

被調(diào)整的乘積在AX中,對(duì)AL按10取模,則:(AL)/0AH→AH(商):AL(余數(shù))其中AH為商,AL為余數(shù),標(biāo)志位AF、CF、OF、

PF、SF、ZF受影響。

1/131(4)除法的非壓縮BCD碼調(diào)整指令A(yù)AD

語句格式:AAD

指令功能:

除法運(yùn)算前,先調(diào)整被除數(shù)AX內(nèi)容,使:(AL)=(AL)+(AH)*0AH

(AH)=0

即把非壓縮型十進(jìn)制數(shù)變成二進(jìn)制數(shù)。1/131三、邏輯指令:

邏輯運(yùn)算指令

AND、OR、NOT、XOR、TEST

移位指令

SHL、SHR、SAL、SAR、

ROL、ROR、RCL、RCR1/131邏輯非指令:NOTOPR*OPR不能為立即數(shù)執(zhí)行操作:(OPR)

(OPR)*不影響標(biāo)志位

邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)

(DST)

(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)

(DST)

(SRC)異或指令:XORDST,SRC執(zhí)行操作:(DST)

(DST)

(SRC)測試指令:TESTOPR1,OPR2

執(zhí)行操作:(OPR1)

(OPR2)CFOFSFZFPFAF00***無定義

根據(jù)運(yùn)算結(jié)果設(shè)置1、邏輯運(yùn)算指令1/131例:屏蔽AL的第0、1兩位

ANDAL,0FCH例:置AL的第5位為1

ORAL,20H

例:使AL的第0、1位變反

XORAL,3例:測試某些位是0是1

TESTAL,1JZEVEN

********OR00100000**1*****

********XOR00000011

********

********AND11111100******001/1312、移位指令邏輯左移SHLOPR,CNT邏輯右移SHROPR,CNT算術(shù)左移SALOPR,CNT(同邏輯左移)算術(shù)右移SAROPR,CNT

CF0

0CFCF1/131循環(huán)左移ROLOPR,CNT循環(huán)右移ROROPR,CNT帶進(jìn)位循環(huán)左移RCLOPR,CNT帶進(jìn)位循環(huán)右移RCROPR,CNTCF

CFCFCF1/131注意:

*OPR可用除立即數(shù)以外的任何尋址方式*

CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例*條件標(biāo)志位:

CF=移入的數(shù)值

1CNT=1時(shí),最高有效位的值發(fā)生變化0CNT=1時(shí),最高有效位的值不變移位指令:

SF、ZF、PF根據(jù)移位結(jié)果設(shè)置,AF無定義

循環(huán)移位指令:

不影響SF、ZF、PF、AFOF=1/131四、串處理指令:

設(shè)置方向標(biāo)志指令

CLD、STD

串處理指令

串重復(fù)前綴

MOVSB/MOVSWREP

STOSB/STOSW

REPE/REPZ

LODSB/LODSW

REPNE/REPNZ

CMPSB/CMPSWSCASB/SCASW

1/131與REP

配合工作的MOVS/STOS/LODS

REPMOVS/STOS/LODS

執(zhí)行操作:(1)如(CX)=0則退出

REP,否則轉(zhuǎn)(2)(2)(CX)(CX)-1(3)執(zhí)行MOVS/STOS/LODS(4)重復(fù)(1)~(3)1/1311、MOVS串傳送指令:MOVSDST,SRCMOVSB(字節(jié))MOVSW(字)例:MOVSES:BYTEPTR[DI],DS:[SI]

執(zhí)行操作:

(1)((DI))←((SI))(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1

字操作:(SI)←(SI)±2,(DI)←(DI)±2

方向標(biāo)志DF=0時(shí)用+,DF=1時(shí)用-。REPMOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。源串(數(shù)據(jù)段)→目的串(附加段)1/131執(zhí)行REPMOVS之前,應(yīng)先做好:(1)源串首地址(末地址)→SI(2)目的串首地址(末地址)→DI(3)串長度→CX(4)建立方向標(biāo)志

(CLD

使DF=0,STD

使DF=1)

1/131(SI)

(DI)

DF=0DF=1數(shù)據(jù)段附加段(SI)

(DI)

1/131datasegmentmess1db‘personal_computer’dataendsextrasegmentmess2db17dup(?)extraendscodesegment…

leasi,mess1leadi,mess2movcx,17cld

repmovsb…codeendsleasi,mess1+16leadi,mess2+16movcx,17stdrepmovsb1/1312、STOS存入串指令:STOSDSTSTOSB(字節(jié))STOSW(字)執(zhí)行操作:

字節(jié)操作:((DI))←(AL),(DI)←(DI)±1

字操作:((DI))←(AX),(DI)←(DI)±2

例:把附加段中的10個(gè)字節(jié)緩沖區(qū)置為20Hleadi,mess2moval,20Hmovcx,10cldrepstosbleadi,mess2movax,2020Hmovcx,5cldrepstosw1/1313、LODS從串取指令:

LODSSRCLODSB(字節(jié))

LODSW(字)執(zhí)行操作:字節(jié)操作:(AL)←((SI)),(SI)←(SI)±1

字操作:(AX)←((SI)),(SI)←(SI)±2注意:*LODS指令一般不與REP聯(lián)用*

源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來修改),

目的串必須在附加段中*不影響條件標(biāo)志位1/131與REPE/REPZ(REPNE/REPNZ)配合工作的

CMPS

和SCASREPE/REPZ(REPNE/REPNZ)CMPS/SCAS

執(zhí)行操作:

(1)如(CX)=0或ZF=0(ZF=1)則退出,否則轉(zhuǎn)(2)(2)(CX)←(CX)-1(3)執(zhí)行CMPS/SCAS(4)重復(fù)(1)~(3)1/1314、CMPS串比較指令:

CMPSSRC,DSTCMPSB(字節(jié))

CMPSW(字)

執(zhí)行操作:

(1)((SI))-((DI))

根據(jù)比較結(jié)果置條件標(biāo)志位:相等ZF=1

不等ZF=0(2)字節(jié)操作:(SI)←(SI)±1,(DI)←(DI)±1

字操作:(SI)←(SI)±2,(DI)←(DI)±21/1315、SCAS串掃描指令:

SCASDSTSCASB(字節(jié))

SCASW

(字)執(zhí)行操作:字節(jié)操作:(AL)-((DI)),(DI)←(DI)±1

字操作:(AX)-((DI)),(DI)←(DI)±21/131五、控制轉(zhuǎn)移指令:

無條件轉(zhuǎn)移指令

JMP

條件轉(zhuǎn)移指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE/JNLE、JCXZ

循環(huán)指令

LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE

子程序調(diào)用和返回指令

CALL、RET

中斷與中斷返回指令

INT、INTO、IRET1/1311、無條件轉(zhuǎn)移指令:段內(nèi)直接短轉(zhuǎn)移:JMPSHORTOPR

執(zhí)行操作:(IP)←(IP)+8位位移量段內(nèi)直接近轉(zhuǎn)移:JMPNEARPTROPR

執(zhí)行操作:(IP)←(IP)+16位位移量段內(nèi)間接轉(zhuǎn)移:JMPWORDPTROPR

執(zhí)行操作:(IP)←(EA)1/131段間直接遠(yuǎn)轉(zhuǎn)移:JMPFARPTROPR

執(zhí)行操作:(IP)←OPR的段內(nèi)偏移地址

(CS)←OPR所在段的段地址段間間接轉(zhuǎn)移:JMPDWORDPTROPR

執(zhí)行操作:(IP)←(EA)(CS)←(EA+2)1/1312、條件轉(zhuǎn)移指令:

(1)根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移

格式測試條件

JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1JNPOPRPF=0JCOPRCF=1JNCOPRCF=01/131(2)比較兩個(gè)無符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移*

格式測試條件

<JB(JNAE,JC)OPRCF=1>=

JNB(JAE,JNC)OPRCF=0<=

JBE(JNA)OPRCF∨ZF=1>JNBE(JA)OPRCF∨ZF=0*

適用于地址或雙精度數(shù)低位字的比較1/131(3)比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移*

格式測試條件

<JL(JNGE)OPRSF

OF=1>=

JNL(JGE)OPRSF

OF=0<=JLE(JNG)OPR(SF

OF)∨ZF=1>JNLE(JG)OPR(SF

OF)∨ZF=0*

適用于帶符號(hào)數(shù)的比較(4)測試CX的值為0則轉(zhuǎn)移

格式測試條件

JCXZOPR(CX)=01/131例:如果X>50,轉(zhuǎn)到TOO_HIGH;計(jì)算

X-Y,如果溢出轉(zhuǎn)到OVERFLOW,否則|X-Y|→RESULT

JGJOJNS

MOVAX,XCMPAX,50

TOO_HIGHSUBAX,Y

OVERFLOW

NONNEGNEGAXNONNEG:MOVRESULT,AXTOO_HIGH:……OVERFLOW:……1/1313、循環(huán)指令:注意:*

CX中存放循環(huán)次數(shù)*

只能使用段內(nèi)直接尋址的8位位移量LOOPLOOPZ/LOOPELOOPNZ/LOOPNE

執(zhí)行步驟:

(1)(CX)←(CX)-1(2)檢查是否滿足測試條件,如滿足則

(IP)←(IP)+8位位移量,實(shí)行循環(huán);不滿足則IP不變,退出循環(huán)。先減cx,再判斷1/131循環(huán)指令:LOOPOPR測試條件:(CX)

0為零或相等時(shí)循環(huán)指令:LOOPZ(LOOPE)OPR測試條件:ZF=1且(CX)

0不為零或不相等時(shí)循環(huán)指令:LOOPNZ(LOOPNE)OPR測試條件:ZF=0且(CX)

0LOOPAGAIN

DECCXJNZAGAIN1/131RET返回指令段內(nèi)近返回:RET執(zhí)行操作:(IP)←((SP)+1,(SP))(SP)←(SP)+2段內(nèi)帶立即數(shù)近返回:RETEXP段間遠(yuǎn)返回:RET執(zhí)行操作:(IP)←((SP)+1,(SP))(SP)←(SP)+2(CS)←((SP)+1,(SP))(SP)←(SP)+2段間帶立即數(shù)遠(yuǎn)返回:RETEXP1/131六、處理機(jī)控制與雜項(xiàng)操作指令:

標(biāo)志處理指令

CLC、STC、CMC、

CLD、STD、

CLI、STI

其他處理機(jī)控制與雜項(xiàng)操作指令

NOP、HLT、WAIT、ESC、LOCK

1/1311、標(biāo)志處理指令:

CLCCF←0

CMCCF←

CF

STCCF←1

CLDDF←0

STDDF←1

CLIIF←0

STIIF←1

注意:*

只影響本指令指定的標(biāo)志1/1312、其他處理機(jī)控制與雜項(xiàng)操作指令:

NOP

無操作(機(jī)器碼占一個(gè)字節(jié))HLT

暫停機(jī)(等待一次外中斷,之后繼續(xù)執(zhí)行程序)WAIT

等待(等待外中斷,之后仍繼續(xù)等待)ESC

換碼

LOCK

封鎖

(維持總線的鎖存信號(hào),直到其后的指令執(zhí)行完)

注意:*

不影響條件標(biāo)志

1/131一、偽操作(偽指令)

偽操作是匯編程序?qū)υ闯绦蜻M(jìn)行匯編時(shí)處理的操作,完成處理器選擇、存儲(chǔ)模式定義、數(shù)據(jù)定義、存儲(chǔ)器分配、指示程序開始結(jié)束等功能。Directives8086/8088偽指令

1/131匯編語言程序格式標(biāo)號(hào)

指令寄存器說明程序或語句變量偽指令標(biāo)號(hào)的功能宏指令變量常數(shù)

表達(dá)式源程序的每條語句可表示為:

[名字]操作操作數(shù)[;注釋]標(biāo)號(hào)/變量:段值、偏移量、類型三種屬性表達(dá)式:數(shù)字表達(dá)式地址表達(dá)式1/131表達(dá)式操作符:(1)算術(shù)操作符:、、、、modMOVDX,BLOCK+(6-1)*2ARRAYDW1,2,3,4,5,6,7ARYENDDW?MOVCX,(ARYEND-ARRAY)/2ADDAX,BLOCK+2;符號(hào)地址常數(shù)

有意義

;

時(shí)意義不明確MOVAX,BX+1;

1/131OPR1EQU25OPR2EQU7

ANDAX,OPR1ANDOPR2(2)邏輯操作符:AND、OR、XOR、NOT;ANDAX,11/131關(guān)系操作符:EQ、NE、LT、LE、GT、GE(數(shù)字和地址)計(jì)算結(jié)果為邏輯值:真

0FFFFH

0000HMOVFID,

(OFFSETY-OFFSETX)LE128X:…………Y:……若

128(真)

匯編結(jié)果:

MOVFID,-1若128(假)

匯編結(jié)果:MOVFID,01/131(4)數(shù)值回送操作符:OFFSE

溫馨提示

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