版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育與創(chuàng)新的交匯:2024年級(jí)3dmax教案探討
- 統(tǒng)編版五年級(jí)下冊(cè)語文第四單元試卷
- 2024簡易場地租賃協(xié)議模板
- 家庭簡裝合同范本
- 物料轉(zhuǎn)讓合同范本
- 高三備考講座模板
- epc建設(shè)合同范本
- 小件加工合同范本
- 初一家長家校有效溝通模板
- 2024學(xué)校教官服務(wù)與管理工作協(xié)議
- 乳腺結(jié)節(jié)課件
- 班前安全技術(shù)交底記錄表
- 2023年大學(xué)生《思想道德與法治》考試題庫附答案(712題)
- 國家開放大學(xué)《監(jiān)督學(xué)》形考任務(wù)1-4參考答案
- 建筑CAD測試多選題
- 支座鑄造工藝設(shè)計(jì)
- 2022年學(xué)校禁毒工作計(jì)劃
- GB-T-30512-2014-汽車禁用物質(zhì)要求
- 生物相容性試驗(yàn)檢測報(bào)告
- 精品資料(2021-2022年收藏)云南白藥財(cái)務(wù)報(bào)表分析精講
- 七年級(jí)上冊(cè)數(shù)學(xué)期中考試試題(含答案)
評(píng)論
0/150
提交評(píng)論