第三章 8086指令系統(tǒng)教材_第1頁
第三章 8086指令系統(tǒng)教材_第2頁
第三章 8086指令系統(tǒng)教材_第3頁
第三章 8086指令系統(tǒng)教材_第4頁
第三章 8086指令系統(tǒng)教材_第5頁
已閱讀5頁,還剩172頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章8086指令系統(tǒng)本章內(nèi)容簡介:1、本章為微機(jī)原理的重點(diǎn)之一;2、8086微處理器的指令系統(tǒng)本章講綱3.18086微處理器的尋址方式

3.1.18086微處理器的指令結(jié)構(gòu)

3.1.28086微處理器的尋址方式3.28086微處理器的指令系統(tǒng)

3.2.1相關(guān)符號(hào)約定

3.2.28086指令系統(tǒng)詳解3.18086微處理器的尋址方式

3.1.18086微處理器的指令結(jié)構(gòu)1、指令的構(gòu)成計(jì)算機(jī)中的指令由操作碼字段和操作數(shù)字段構(gòu)成操作碼字段用于表述操作的類型,以指示計(jì)算機(jī)需要執(zhí)行的動(dòng)作;操作數(shù)字段用于為動(dòng)作提供處理的對(duì)象,即提供指令執(zhí)行中所需的操作數(shù);指令中的操作數(shù)可以是操作數(shù)本身操作數(shù)所在的地址或地址的一部分一個(gè)指向操作數(shù)的地址指針、寄存器編號(hào)等信息3.18086微處理器的尋址方式

3.1.18086微處理器的指令結(jié)構(gòu)2、指令格式指令的匯編描述格式標(biāo)號(hào):助記符參數(shù)1,參數(shù)2,參數(shù)3標(biāo)號(hào):標(biāo)識(shí)符后加一個(gè)冒號(hào);助記符:利用具有自然語言意義的字符串表示一類具有相同功能的指令的操作碼;參數(shù):8086指令中,根據(jù)指令的不同,操作數(shù)可以為0到3個(gè)參數(shù);對(duì)于雙參數(shù)指令,左邊為目的操作數(shù),右邊為源操作數(shù);3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式1、操作數(shù)的存放位置操作數(shù)在指令中操作數(shù)包含于指令中,這種操作數(shù)稱為立即數(shù);例:MOVAX,1234H操作數(shù)在某寄存器中操作數(shù)存在于CPU中的某寄存器中,而在指令中,這些寄存器往往使用寄存器編號(hào)來表示;例:INCCX3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式2、操作數(shù)的存放位置操作數(shù)在某存儲(chǔ)單元中8086系統(tǒng)的每個(gè)存儲(chǔ)單元的物理地址由段起始地址及段內(nèi)偏移量兩部分構(gòu)成;指令中,為了實(shí)現(xiàn)不同的數(shù)據(jù)結(jié)構(gòu),存放操作數(shù)的存儲(chǔ)單元的段內(nèi)偏移量可以由幾部分組成,程序中常稱這個(gè)偏移量為有效地址(EA);尋址方式不一樣,則段內(nèi)偏移量的構(gòu)成不一樣,也就是說,EA構(gòu)成決定了存放于存儲(chǔ)單元中的操作數(shù)的尋址方式;3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式2、操作數(shù)的存放位置操作數(shù)在某IO端口8086處理器可以尋址64K個(gè)IO端口,但如果端口號(hào)在指令中直接給出,則只能尋址256個(gè)端口;使用DX間接尋址,則可以尋址全部端口;3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式3、8086微處理器的尋址方式立即尋址寄存器尋址直接尋址寄存器間址尋址寄存器相對(duì)尋址(變址尋址)基址加變址尋址相對(duì)基址加變址尋址20060920TuesdayC2033.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(1)、立即尋址操作數(shù)存在于指令中

MOVAX,1234H操作碼12H34H12H34H……代碼段低地址高地址CSCHCL3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(2)、寄存器尋址操作數(shù)存在于指令所規(guī)定的寄存器中

MOVAX,DX12H34HCS12H34HDSDHDLCHCL3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(3)、直接尋址指令中的操作數(shù)部分直接給出操作數(shù)的有效地址EA,操作數(shù)可以是16位或32位整數(shù),操作數(shù)默認(rèn)在DS段中;

MOVAX,[1234H]…操作碼34H2000HDS12H78H5EH……代碼段數(shù)據(jù)段200001234+20000H21234H212345E78HAX……低地址高地址3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(4)、寄存器間接尋址操作數(shù)的有效地址存放于某寄存器中,這些寄存器包括:BP、BX、SI和DI;如果偏移量在SI、DI或BX中,則默認(rèn)操作數(shù)在數(shù)據(jù)段中如果偏移量在BP中,則默認(rèn)操作數(shù)在堆棧段中3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(4)、寄存器間接尋址有效地址在SI、DI或BX中;

MOVAX,[SI]操作碼2000HDS78H5EH……代碼段數(shù)據(jù)段2000010002000H21000H210005E78HAX……1000HSI+低地址高地址3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(4)、寄存器間接尋址有效地址在BP中;

MOVAX,[BP]操作碼3000HDS78H5EH……代碼段堆棧段3000010003000H31000H210005E78HAX……1000HBP+低地址高地址3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(5)、相對(duì)寄存器尋址(基址、變址尋址)操作數(shù)存放于存貯單元中,操作數(shù)的偏移量由指令所指定的寄存器內(nèi)容與該指令提供的位偏移量給出;當(dāng)寄存器的BX或BP時(shí),又稱基址尋址;為SI或DI時(shí)又稱變址尋址;根據(jù)使用的寄存器不同,默認(rèn)的段寄存器不同;寄存器為SI、DI或BX時(shí)PA形成寄存器為BP時(shí)PA形成3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式低地址高地址CS段操作碼00H15H34H12H34H12HDXFS段7000073500BX150073500+例:MOVDX,[BX+1500]DS7000020003.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(6)、基址加變址尋址操作數(shù)存放于存貯單元中,操作數(shù)的偏移地址由指令所指定的基址寄存器(BX、BP)及變址寄存器(SI、DI)內(nèi)容相加;基址寄存器BX時(shí)PA形成基址寄存器為BP時(shí)PA形成3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(6)、基址加變址尋址例:(I)MOVAX,[BX][SI]或MOVAX,[BX+SI]

將DS+BX+SI結(jié)果作為地址,尋址內(nèi)存單元,并傳送到AX中;(II)MOVAX,[BP][SI]或MOVAX,[BP+SI]

將SS+BX+SI結(jié)果作為地址,尋址內(nèi)存單元,并傳送到AX中;3.18086微處理器的尋址方式

3.1.28086微處理器的尋址方式(7)、相對(duì)基址加變址尋址操作數(shù)存放于存貯單元中,操作數(shù)的偏移地址由指令所指定的基址寄存器(BX、BP)、變址寄存器(SI、DI)內(nèi)容及指令給出的偏移量相加;基址寄存器BX時(shí)PA形成基址寄存器為BP時(shí)PA形成3.28086微處理器的指令系統(tǒng)

3.2.1相關(guān)符號(hào)約定8位寄存器:AH、BH、CH、DH、AL、BL、CL、DL;16位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;堆棧指針:SP;指令指針:IP(或PC)標(biāo)志位:Flags目的和源變址寄存器:SI、DI;段寄存器:CS、DS、SS、ES;r:通用寄存器組a:AL或AX3.28086微處理器的指令系統(tǒng)

3.2.1相關(guān)符號(hào)約定scr,dst:源和目的操作數(shù),下列尋址方式均可用:[BX+SI+n][BX+DI+n][BP+SI+n][BP+DI+n][SI+n][DI+n][BP+n][BX+n][n]:直接尋址r:寄存器尋址(相對(duì))基址加變址尋址(相對(duì))寄存器間址3.28086微處理器的指令系統(tǒng)

3.2.1相關(guān)符號(hào)約定ADR(scr):源操作數(shù)的地址[]:存儲(chǔ)單元內(nèi)容ES:[]:附加存儲(chǔ)器段的內(nèi)容OPRD:操作數(shù)seg:段寄存器(CS、DS、SS、ES)im:立即數(shù)n:8位nn:16位nnnn:32位3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解一、數(shù)據(jù)傳送指令(一)通用數(shù)據(jù)傳送指令(二)累加器專用傳送指令(三)地址-目的傳送指令(四)標(biāo)志寄存器傳送指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令(一)通用數(shù)據(jù)傳送指令8086提供方便靈活的數(shù)據(jù)傳送操作,這些指令適合于大多數(shù)操作數(shù);通用傳送指令(XCHG除外)是唯一允許以段寄存器為操作數(shù)的指令;通用傳送指令包括MOV(Movement)PUSH/POP(Push/PopWordOnto/OffStack)XCHG(Exchange)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令MOV目的操作數(shù),源操作數(shù)功能:將一個(gè)字或字節(jié)的操作數(shù)從源傳送到目的;該指令可實(shí)現(xiàn)寄存器寄存器/存儲(chǔ)器的數(shù)據(jù)傳送;立即數(shù)寄存器/存儲(chǔ)器的數(shù)據(jù)傳送;寄存器/存儲(chǔ)器段寄存器間的數(shù)據(jù)傳送3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令具體講,一條通用數(shù)據(jù)傳送指令可以實(shí)現(xiàn):CPU內(nèi)部寄存器(CS及IP除外)間數(shù)據(jù)的傳送;

例:

MOVDL,CH;8位寄存器

8位寄存器

MOVAX,DX;16位寄存器

16位寄存器

MOVSI,BP MOVDS,BX;通用寄存器段寄存器

MOVAX,CS;段寄存器

通用寄存器3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令具體講,一條通用數(shù)據(jù)傳送指令可以實(shí)現(xiàn):立即數(shù)傳送到CPU內(nèi)部通用寄存器組(AX、BX、CX、DX、BP、SP、SI或DI),為這些寄存器賦值;

例:

MOVCL,04H ;立即數(shù)

8位寄存器

MOVAX,03FFH ;立即數(shù)

16位寄存器

MOVSI,1234H;(SI)=1234H3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令具體講,一條通用數(shù)據(jù)傳送指令可以實(shí)現(xiàn):CPU內(nèi)部寄存器(CS及IP除外)與存儲(chǔ)器(所有尋址方式)將的數(shù)據(jù)傳送,但存儲(chǔ)單元間不能直接傳送;

例:

MOVMEM,AX ;累加器

存儲(chǔ)器,直接尋址

MOVMEM,DS ;段寄存器

存儲(chǔ)器,直接尋址

MOVDISP[BX],CX;寄存器

存儲(chǔ)器,變址尋址

MOVAX,DISP[SI];存儲(chǔ)器

累加器,變址尋址

MOVDS,MEM

;存儲(chǔ)器

段寄存器,直接尋址

MOVAX,DISP[BX][SI];存儲(chǔ)器

累加器,相對(duì)基址加變址3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令對(duì)于通用傳送指令,需注意:MOV指令不能進(jìn)行如下操作存儲(chǔ)單元間的直接傳送;立即數(shù)直接傳送到段寄存器;段寄存器間的直接傳送;CS和IP不能作為目的操作數(shù),但CS可作為源操作數(shù);當(dāng)使用BX、SI、DI間址時(shí)默認(rèn)段為DS,BP時(shí)為SS;對(duì)SS賦值時(shí),CPU會(huì)自動(dòng)禁止外部中斷,直到執(zhí)行完本條及下一條指令會(huì)自動(dòng)恢復(fù)中斷狀態(tài);MOV指令不影響標(biāo)志位;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令錯(cuò)誤指令舉例:MOVES,DSMOVAX,DSMOVES,AXMOVMEM1,MEM2MOVAX,MEM2MOVMEM1,AXMOVDS,2000HMOVAX,2000HMOVDS,AXMOVCS,AXMOVIP,AX20060921ThursdayC2033.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令PUSH/POPOPRD:PUSHOPRD:入棧指令,將一個(gè)字傳送到SP所指向的堆棧的頂部;入棧指令分兩步執(zhí)行SP-1SP,OPRD的高字節(jié)到SP所指向的單元;SP-1SP,OPRD的低字節(jié)到SP所指向的單元;8086堆棧為向下生長滿堆棧;PUSH指令的具體形式PUSHr; W SP=SP-2,(SP)=rPUSHseg; W SP=SP-2,(SP)=segPUSHsrc; W SP=SP-2,(SP)=src3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令PUSH/POPOPRD:POPOPRD:出棧指令,將SP所指向的單元內(nèi)容傳送到OPRD;出棧指令分兩步執(zhí)行SP所指向的單元到OPRD的低字節(jié),SP+1SP;SP所指向的單元到OPRD的高字節(jié),SP+1SP;POP指令的具體形式POPr; W SP=SP+2,(SP)=rPOPseg; W SP=SP+2,(SP)=segPOPsrc; W SP=SP+2,(SP)=src3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解使用堆棧操作指令時(shí)需注意堆棧的操作數(shù)只能是字;指令操作數(shù)有三種類型寄存器(通用寄存器,地址指針,變址寄存器)段寄存器(PUSHCS合法,但POPCS非法)存儲(chǔ)器堆棧按先進(jìn)后出原則,以“小端模式”運(yùn)作,類型為向下生長滿堆棧;堆棧最大容量為SP初值-SS內(nèi)容;堆棧必須平衡,即PUSH和POP成對(duì)使用;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-通用數(shù)據(jù)傳送指令堆棧應(yīng)用舉例例:

壓入堆棧的內(nèi)容與彈出內(nèi)容順序相反…PUSH AXPUSHBXPUSHCX…POPCXPOPBXPOPAX 例:使用合適的指令替代POP指令…PUSHBXPUSHAX…POPAXPOPBX…MOVBP,SPMOVAX,[BP-2]MOVBX,[BP-4]3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-累加器專用傳送指令(二)累加器專用傳送指令

1.IN(InputByteOrWord)

2.OUT(OutputByteOrWord)

3.XLAT(Translat)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-累加器專用傳送指令1、輸入輸出指令I(lǐng)N,OUTINAL/AX,n;將一個(gè)字節(jié)/字由輸入口n傳送到AL/AXINAL/AX,DX;將DX內(nèi)容所示的輸入口內(nèi)容(字節(jié)/ 字)傳送到AL/AX;OUTn,AL/AX;將AL/AX內(nèi)容輸出到輸出口n上;OUTDX,AL/AX;將AL/AX內(nèi)容輸出到DX所指示的輸出 口上;不能直接利用OUT指令將立即數(shù)輸出到某端口;IN/OUT指令所涉及到的數(shù)據(jù)必須使用AL/AX作為中轉(zhuǎn);3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-累加器專用傳送指令2.XLAT(查表指令)功能:將寄存器AL的內(nèi)容作為一個(gè)256個(gè)字節(jié)的表的下標(biāo),而這個(gè)表的基地址在BX中,轉(zhuǎn)換后所得的表項(xiàng)存放在AL中;指令格式為:

XLATB;式中B為表的起始地址;指令執(zhí)行完成后,AL=[BX+AL];由前面所講,BX對(duì)應(yīng)的段為DS段;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-累加器專用傳送指令XLAT指令的使用方法先建立一個(gè)字節(jié)表格將表格的首地址偏移量裝入BX中將表項(xiàng)號(hào)(相對(duì)于表首地址)裝入AL中執(zhí)行XLAT指令,即可于AL中得到表中指定序號(hào)的值;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-累加器專用傳送指令累加器專用傳送指令舉例例: 將端口號(hào)為1的輸入口內(nèi)容轉(zhuǎn)換為格雷碼,并輸出到 端口號(hào)為1的輸出口上;

MOVBX,OFFSETTABLE;將格雷碼表首地址裝入BX中

INAL,1;

將輸入口1的內(nèi)容讀入到AL中

XLATTABLE;

查表,得到輸入碼對(duì)應(yīng)的格雷碼

OUT1,AL;

將轉(zhuǎn)換結(jié)果輸出到輸出口1上

…3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-地址-目的傳送指令(三)地址-目的傳送指令8086提供三條指令,用于將地址指針寫入寄存器1、LEA(LoadEffectiveAddress)2、LDS(LoadPointerUseDS)3、LES(LoadPointerUseES)綜合舉例:設(shè):

(DS)=5000HTABLE=1000H分析下列指令執(zhí)行結(jié)果:

MOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLESBX,TABLE;(BX)=0040H,(ES)=3000HLDSBX,TABLE;(BX)=0040H,(DS)=3000H40H00H00H5000H:1000H(DS)TABLE51001H...存儲(chǔ)器30H...51002H51003H3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-地址-目的傳送指令1、LEAr,src本指令用于將源操作數(shù)的地址偏移量傳送到目的操作數(shù),通常用于建立操作所需要的寄存器地址指針;目的操作數(shù)必須為一個(gè)16位通用寄存器;例:設(shè)(BX)=0200H,(DI)=0123H,執(zhí)行完

LEABX,[BX+DI]后,則EA=BX+DI=0200+0123=0323H,所以BX=0323H3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-地址-目的傳送指令LEA與MOV的區(qū)別40H00H...3000H:1000H(DS)BUFFER31001H...存儲(chǔ)器設(shè):DS內(nèi)容為3000H;BUFFER偏移量為1000H,31001H單元內(nèi)容為40H則:對(duì)于MOVBX,BUFFER…①(BX)=0040H

對(duì)于LEABX,BUFFER…②(BX)=1000H

即②相當(dāng)于MOVBX,OFFSETBUFFER3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-地址-目的傳送指令2、LDS(LoadPointerUsingDS)格式:LDSreg16,mem32; (reg16)←(EA) (DS)←((EA)+2)功能:將指令指定的32位地址指針?biāo)偷街噶钏付ǖ募拇嫫骷?DS中;作用過程:將指令指定mem32單元的前兩個(gè)單元內(nèi)容(16位偏移 量)裝入指定通用寄存器,把后兩個(gè)單元內(nèi)容(段地 址)裝入到DS段寄存器。3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-地址-目的傳送指令LDS舉例:設(shè):(DS)=C000H,執(zhí)行LDSSI,[0010H]后

(SI)=0180H; (DS)=2000H;80H01H00H20HC000H:0010H(DS)C0011HC0012HC0013H......存儲(chǔ)器3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-地址-目的傳送指令3、LES(LoadPointerUsingES)格式:LESreg16,mem32; (reg16)←(EA) (ES)←((EA)+2)功能:將指令指定的32位地址指針?biāo)偷街噶钏付ǖ募拇嫫骷?ES中;作用過程:將指令指定mem32單元的前兩個(gè)單元內(nèi)容(16位偏移 量)裝入指定通用寄存器,把后兩個(gè)單元內(nèi)容(段地 址)裝入到ES段寄存器。3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-地址-目的傳送指令LES舉例:設(shè):(DS)=C000H,執(zhí)行LESDI,[0010H]后

(DI)=0180H; (ES)=3000H;80H01H00H30HC000H:0010H(DS)C0011HC0012HC0013H......存儲(chǔ)器3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-標(biāo)志寄存器傳送指令(四)標(biāo)志寄存器傳送指令

8086提供4條標(biāo)志傳送指令,并均隱含操作數(shù);

1.LAHF(LoadAHWithFlag)

2.SAHF(StoreFlagtoAH)

3.PUSHF(PushFlags)

4.POPF(PopFlags)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-標(biāo)志寄存器傳送指令1.LAHF(LoadAHWithFlag)格式:LAHF;功能:將標(biāo)志寄存器的低8位傳送到AH中SFZFAFPFCF01234567TFIFDFOF8910111213141501234567FLAGSAH3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-標(biāo)志寄存器傳送指令2.SAHF(StoreAHintoFlags)格式:SAHF;功能:將AH中內(nèi)容傳送到標(biāo)志寄存器中SFZFAFPFCF01234567TFIFDFOF8910111213141501234567FLAGSAH3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-標(biāo)志寄存器傳送指令3.PUSHF(PUSHFlags)格式:PUSHF;功能:將PSW內(nèi)容入棧;4.POPF(POPFlags)格式:POPF;功能:將當(dāng)前堆棧棧頂?shù)膬蓚€(gè)字節(jié)傳送到標(biāo)志 寄存器中;20060926C203Tuesday3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解二、算數(shù)運(yùn)算指令(一)加法指令(二)減法指令(三)乘法指令(四)除法指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-加法指令(一)加法指令

8086提供5種加法指令:

1.ADD(Addition)

2.ADC(AddwithCarry)

3.INC(Increment)

4.AAA(unpackedBCD[ASCII]adjustforaddition)

5.DAA(DecimalAdjustforaddition)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-加法指令1.ADDOPRD1,OPRD2功能:完成兩個(gè)操作數(shù)相加,結(jié)果傳送到目的操作數(shù);說明:OPRD1(源操作數(shù)):寄存器、存儲(chǔ)器OPRD2(目的操作數(shù)):寄存器、存儲(chǔ)器或立即數(shù)例:

ADDCL,10 ;寄存器+立即數(shù)

ADDDX,SI ;寄存器+寄存器

ADDAX,MEM ;寄存器+存儲(chǔ)器

ADDDATA[BX],AL ;[DS+BX+DATA]單元+AL3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-加法指令2.ADCOPRD1,OPRD2功能:帶進(jìn)位加法OPRD1=OPRD1+OPRD2+CF;說明:與ADD相同:本指令常用于進(jìn)行多字/字節(jié)加法例:

ADCCL,10 ;寄存器+立即數(shù)+CF ADCDX,SI ;寄存器+寄存器+CF ADCAX,MEM ;寄存器+存儲(chǔ)器+CF ADCDATA[BX],AL ;[DS+BX+DATA]單元+(AL)+CF ADCBYTEPTR[DI],3;[DS+DI]單元(字節(jié))+3+CF3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-加法指令3.INCOPRD功能:對(duì)操作數(shù)進(jìn)行加1操作,并將結(jié)果傳送到同一操作數(shù),即實(shí)現(xiàn)自加操作;說明:本指令通常用于循環(huán)中修改循環(huán)控制變量或地址指針;本指令對(duì)CF沒有影響;例:

INCSP ;SP=SP+1 INCBYTEPTR[CX] ;CX所指向的單元內(nèi)容(B)自加1 INCDATA1 ;DATA1單元內(nèi)容自加13.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-加法指令4.AAA(調(diào)整原理見P81)功能:兩個(gè)非壓縮BCD碼相加后,對(duì)其結(jié)果進(jìn)行調(diào)整,產(chǎn)生正確的非壓縮BCD碼和;說明:本指令必須緊跟在加法指令后;本指令無操作數(shù),默認(rèn)AL為源,AX為目的;結(jié)果的高位BCD碼在AH中,低位在AL中;例:

AL=9,BL=5,則

ADDAL,BL ;AL=0EH AAA ;AX=0104H3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-加法指令5.DAA(調(diào)整原理見P65)功能:兩個(gè)壓縮BCD碼相加后,對(duì)其結(jié)果進(jìn)行調(diào)整,產(chǎn)生正確的壓縮BCD碼和;說明:本指令必須緊跟在加法指令后;本指令無操作數(shù),默認(rèn)AL為源,AX為目的;結(jié)果的高位在AL高4位,低位在低4位,并可能進(jìn)位;例:

AL=99H,BL=55H,則

ADDAL,BL ;AL=9AH DAA ;AL=0504H,CF=13.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令助記符功能SUB減法SBB帶借位的減法DEC減量(減1)NEG求補(bǔ)(變負(fù))CMP比較AAS減法的ASCII調(diào)整DAS減法的十進(jìn)制調(diào)整(二)減法指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令1、SUB/SBBOPRD1,OPRD2功能:SUB:OPRD1=OPRD1–OPRD2;SBB:OPRD1=OPRD1–OPRD2–CF;格式:SUB/SBBr,src; B/WSUB/SBBa,im; B/WSUB/SBBdst,r; B/WSUB/SBBdst,im; B/W3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令SUB/SBB舉例

SUB/SBBCX,BX ;寄存器-寄存器

SUB/SBBDX,TMP[SI];寄存器-存儲(chǔ)器

SUB/SBB[BP+2],CL ;存儲(chǔ)器-寄存器

SUB/SBBAL,10 ;寄存器-立即數(shù)

SUB/SBBSI,5380 ;寄存器-立即數(shù)

SUB/SBBTMP[BP],1000;存儲(chǔ)器-立即數(shù)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令2、DECOPRD功能: 對(duì)OPRD進(jìn)行自減操作:OPRD=OPRD–1;格式:DECr; B/WDECmem; B/W例: DECAX;

DECNUM;

DECBYTEPTR[SI]3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令3、AAS/DAS功能:AAS:將兩個(gè)未組合BCD碼(利用SUB/SBB)減法的結(jié)果調(diào)整為一個(gè)未組合BCD碼,結(jié)果在AL中;AAS:將兩個(gè)組合BCD碼(利用SUB/SBB)減法的結(jié)果調(diào)整為一個(gè)組合BCD碼,結(jié)果在AL中;說明:此兩條指令一般不單獨(dú)使用,應(yīng)緊跟在SUB/SBB指令后,對(duì)結(jié)果進(jìn)行調(diào)整;調(diào)整方法見書P85頁;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令A(yù)AS/DAS例設(shè)AL=3,BL=5 SUBAL,BL; AL=0FEH AAS; AL=2,CF=1設(shè)AL=56H,BL=17H SUBAL,BL; AL=03FH,CF=0,AF=1 DAS; AL=39H3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令4、NEGOPRD功能:求補(bǔ)操作,即OPRD=0-OPRD;說明:本指令將影響標(biāo)志位。一般CF=1,但OPRD=0時(shí),CF=0對(duì)-128(BYTE)或?qū)?32768(WORD)求補(bǔ)時(shí)OF=1,否則OF=0;例: NEGAL NEGTMP3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令NEG應(yīng)用舉例設(shè)在內(nèi)存中從AREA1開始存放有100個(gè)帶符號(hào)數(shù),現(xiàn)需要將這些數(shù)的絕對(duì)值存放在以AREA2開始的內(nèi)存中;開始初始化置源地址,置目的地址指針置循環(huán)次數(shù)取一個(gè)帶符號(hào)數(shù)負(fù)數(shù)?求補(bǔ)送存地址指針+1循環(huán)次數(shù)-1循環(huán)次數(shù)=0?結(jié)束NYNY3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令程序:

LEASI,AREA1 ;置SI,使SI指向源

LEADI,AREA2 ;置DI,使DI指向目的

MOVCX,100 ;置循環(huán)次數(shù)CHECK: MOVAL,[SI] ORAL,AL ;AL內(nèi)容不變,置標(biāo)志

JNSNEXT ;SF=0轉(zhuǎn)NEXT

NEGAL

;負(fù)數(shù)求補(bǔ)

NEXT: MOV[DI],AL ;送目標(biāo)

INCSI ;修改指針,指向下個(gè)數(shù)

INCDI DECCX JNZCHECK ;測(cè)試循環(huán)完成條件

HLT3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令5、CMPOPRD1,OPRD2功能:完成兩個(gè)操作數(shù)相減,結(jié)果反映在標(biāo)志位上;對(duì)標(biāo)志位A、C、O、P、S、Z均有影響;說明:本指令實(shí)際完成OPRD1-OPRD2的虛減操作,即作完減法后并不將結(jié)果送到目標(biāo)操作數(shù);指令具體格式CMPr,src ;r-src

寄存器,寄存器/存儲(chǔ)器CMPa,im ;s-im

累加器,立即數(shù)CMPdst,r ;dst-r

寄存器/存儲(chǔ)器,寄存器CMPdst,im ;dst-im

寄存器/存儲(chǔ)器,立即數(shù)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令CMP指令用于比較兩個(gè)數(shù)的大小關(guān)系兩無符號(hào)數(shù)A,B的比較,利用標(biāo)志位CF當(dāng)A≥B時(shí),CF=0;當(dāng)A<B時(shí),CF=1;兩帶符號(hào)數(shù)A,B的比較,利用標(biāo)志位SF及OF(具體分析見書P63)當(dāng)OF=0時(shí),如果SF=0,則A>B;當(dāng)OF=0時(shí),如果SF=1,則A<B;當(dāng)OF=1時(shí),如果SF=0,則A<B;當(dāng)OF=1時(shí),如果SF=1,則A>B;當(dāng)ZF=1時(shí),則A=B;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令CMP指令用于比較兩個(gè)數(shù)的大小關(guān)系帶符號(hào)數(shù)等于:ZF=1大于:SO=1并ZF=0,用JG/JNLE轉(zhuǎn)移小于:SO=0,用JL/JNGE轉(zhuǎn)移無符號(hào)數(shù)等于:ZF=1大于:CF=0并ZF=0小于:CF=1兩數(shù)關(guān)系3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令例:在BLOCK開始存放有100個(gè)數(shù),現(xiàn)編制一段程序,找出這100個(gè)數(shù)中最大值,并存放于MAX單元中。分析:(1)將第一個(gè)數(shù)傳送到AX中,并假設(shè)第一個(gè)數(shù)為最大值(2)將AX內(nèi)容與第2,3…100數(shù)比較,如果發(fā)現(xiàn)比當(dāng)前AX值大,則AX內(nèi)容更新為較大的值(3)將AX值送到MAX單元3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-減法指令

MOVBX,OFFSETBLOCK MOVAX,[BX] INCBX INCBX MOVCX,99AGAIN:

CMPAX,[BX]

JGNEXT ;(AX)>(16d(ds)+(BX))轉(zhuǎn)NEXT MOVAX,[BX]NEXT: INCBX INCBX DECCX

JNEAGAIN MOVMAX,AX;MAX單元存放最大值20060928C203Thursday3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-乘法指令助記符功能MUL無符號(hào)乘法IMUL帶符號(hào)乘法AAM十進(jìn)制乘法調(diào)整(三)乘法指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-乘法指令1、MULsrc該指令用于兩16位(或8位)無符號(hào)數(shù)的乘法;對(duì)于8位乘法:1個(gè)操作數(shù)在AL中,另一個(gè)在scr中,結(jié)果為16位,高8位在AH中,低8位在AL中;對(duì)于16位乘法:1個(gè)操作數(shù)在AX中,另一個(gè)在scr中,結(jié)果為32位,高16位在DX中,低16位在AX中;指令具體格式MULsrc B AX=AL*srcMULsrc W DX,AX=AX*src3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-乘法指令例:利用乘法指令實(shí)現(xiàn)兩個(gè)字(16位)相乘。 假設(shè)M1、M2為乘數(shù),P1為結(jié)果的高16位,P2為結(jié)果的低16位,則:

… MOVAX,M1 MULM2 MOVP1,DX MOVP2,AX …3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-乘法指令2、IMULsrc該指令用于兩16位(或8位)帶符號(hào)數(shù)的乘法;對(duì)于8位乘法:1個(gè)操作數(shù)在AL中,另一個(gè)在scr中,結(jié)果為16位,高8位在AH中,低8位在AL中;對(duì)于16位乘法:1個(gè)操作數(shù)在AX中,另一個(gè)在scr中,結(jié)果為32位,高16位在DX中,低16位在AX中;如果結(jié)果的高半部分不是低半部分的符號(hào)擴(kuò)展,則CF=OF=1,否則CF=OF=0;指令具體格式IMULsrc B AX=AL*srcIMULsrc W DX,AX=AX*src3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-乘法指令3、AAM該指令用于將AX中的兩個(gè)未組合的十進(jìn)制數(shù)相乘結(jié)果進(jìn)行調(diào)整,以得到正確的未組合十進(jìn)制乘積;該指令一般與MUL連用,用于兩一位未組合BCD碼乘法;其校正操作如下AH=AL/10AL=AL%103.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令助記符功能DIV無符號(hào)除法IDIV帶符號(hào)除法AAD十進(jìn)制除法調(diào)整CBW符號(hào)擴(kuò)展(BYTE)CWD符號(hào)擴(kuò)展(WORD)(三)除法指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令1、DIVsrc該指令用于兩16位(或8位)無符號(hào)數(shù)的除法;對(duì)于8位除法:被除數(shù)在AX中,除數(shù)在scr中,結(jié)果的商在AL中,余數(shù)在AH中;對(duì)于16位除法:被除數(shù)在DX(高半字),AX(低半字)中,除數(shù)在src中,結(jié)果的商在AX中,余數(shù)在DX中;如果除數(shù)為0,則會(huì)產(chǎn)生一個(gè)0中斷;指令具體格式DIVsrc B AL=AX/src,AH=余數(shù)DIVsrc W AX=DX,AX/src,DX=余數(shù)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令2、IDIVsrc該指令用于兩16位(或8位)帶符號(hào)數(shù)的除法;說明與DIV類似;在字節(jié)相除時(shí),商范圍為-127(81H)--+127(7FH);字相除時(shí)商范圍為-32767(8001H)--+32767(7FFFH),如果商在上述范圍外,則也會(huì)產(chǎn)生一個(gè)0中斷;指令具體格式IDIVsrc B AL=AX/src,AH=余數(shù)IDIVsrc W AX=DX,AX/src,DX=余數(shù)3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令3、AAD該指令用于將AX中的兩位未組合十進(jìn)制數(shù)在相除前進(jìn)行校正,以便相除后能得到正確的未組合十進(jìn)制數(shù);該指令必須在除法操作前執(zhí)行,其具體操作為:

AL=AH*10+AL;

AH=0;做完除法后,如果商大于9,并如果商仍需要表達(dá)為未組合十進(jìn)制數(shù),則仍需要對(duì)結(jié)果進(jìn)行人工調(diào)整;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令4、CBW/CWD此兩條指令無操作數(shù),他們用于對(duì)AL/AX中的數(shù)進(jìn)行符號(hào)擴(kuò)展;對(duì)于CBW: 當(dāng)AL<80H時(shí),AH=0; 當(dāng)AL>80H時(shí),AH=FFH;對(duì)于CWD: 當(dāng)AX<8000H時(shí),DX=0; 當(dāng)AX>8000H時(shí),DX=FFH;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令例:如果在內(nèi)存中有一個(gè)緩沖區(qū),如果前兩個(gè)字節(jié)為一個(gè)16位帶符號(hào)的被除數(shù),第3,4字節(jié)為一個(gè)帶符號(hào)的除數(shù),第5,6字節(jié)放結(jié)果的商,7,8字節(jié)放余數(shù)。 則:

LEABX,BUFFER ;偏移量到BX MOVAX,[BX] ;BX指向內(nèi)容(被除數(shù))到AX CWD ;符號(hào)擴(kuò)展

IDIV2[BX] ;16位帶符號(hào)除法

MOV4[BX],AX ;商到BUFFER+4地址處

MOV6[BX],DX ;余到BUFFER+6地址處3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解三、邏輯運(yùn)算指令(一)單操作數(shù)指令(二)雙操作數(shù)指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-邏輯運(yùn)算指令助記符功能NOT取反指令SAL/SHL/SAR/SHR非循環(huán)移位指令ROL/ROR/RCL/RCR循環(huán)移位指令(一)單操作數(shù)邏輯運(yùn)算指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令1、NOTsrc該指令用于對(duì)操作數(shù)進(jìn)行取反操作;指令具體格式NOTsrc例:NOTAXNOTBUFFER3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令2、非循環(huán)移位指令SAL/SAR:算術(shù)左移/右移指令;可對(duì)寄存器或存儲(chǔ)器操作數(shù)進(jìn)行算術(shù)左移/右移操作數(shù)C0操作數(shù)C算術(shù)左移(SAL)操作示意算術(shù)右移(SAR)操作示意

SAL操作使操作數(shù)順次左移,最低位使用0補(bǔ)足,最高位進(jìn)入CF中。

SAR操作使操作數(shù)順次右移,最高位使用原最高位補(bǔ)足,最低位進(jìn)入CF中。3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令2、非循環(huán)移位指令SHL/SHR:邏輯左移/右移指令;可對(duì)寄存器或存儲(chǔ)器操作數(shù)進(jìn)行邏輯左移/右移操作數(shù)C0操作數(shù)C邏輯左移(SHL)操作示意邏輯右移(SHR)操作示意

SHL操作使操作數(shù)順次左移,最低位使用0補(bǔ)足,最高位進(jìn)入CF中。

SHR操作使操作數(shù)順次右移,最高位使用0補(bǔ)足,最低位進(jìn)入CF中。03.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令3、循環(huán)移位指令ROL/ROR:(不帶進(jìn)位的)循環(huán)左移/右移指令;可對(duì)寄存器或存儲(chǔ)器操作數(shù)進(jìn)行不帶進(jìn)位的左移/右移操作數(shù)C操作數(shù)C不帶進(jìn)位循環(huán)左移(ROL)操作示意不帶進(jìn)位循環(huán)右移(ROR)操作示意

ROL操作使操作數(shù)順次左移,最高位進(jìn)入CF中,同時(shí)進(jìn)入最低位。

ROR操作使操作數(shù)順次右移,最低位進(jìn)入CF中,同時(shí)進(jìn)入最高位。3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令3、循環(huán)移位指令RCL/RCR:帶進(jìn)位的循環(huán)左移/右移指令;可對(duì)寄存器或存儲(chǔ)器操作數(shù)進(jìn)行帶進(jìn)位的循環(huán)左移/右移操作數(shù)C操作數(shù)C帶進(jìn)位的循環(huán)左移(RCL)操作示意帶進(jìn)位的循環(huán)右移(RCR)操作示意

RCL操作使操作數(shù)順次左移,最高位進(jìn)入CF中,原CF進(jìn)入操作數(shù)最低位。

RCR操作使操作數(shù)順次右移,原CF進(jìn)入最高位,原最低位進(jìn)入CF。移位指令應(yīng)用思考在實(shí)際問題編程中,經(jīng)常需要對(duì)某多字節(jié)的操作數(shù)進(jìn)行整體左移或整體右移操作,如果操作數(shù)不止16位,如何實(shí)現(xiàn)對(duì)他們的整體左移?編制一段程序,完成一個(gè)4字節(jié)乘法;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-邏輯運(yùn)算指令助記符功能AND/OR/XOR與/或/異或指令TEST測(cè)試指令(二)雙操作數(shù)邏輯運(yùn)算指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令1、AND/OR/XOROPRD1,OPRD2OPRD2與OPRD1進(jìn)行按位與/或/異或操作,并將結(jié)果送到OPRD1;OPRD1可為通用寄存器、存儲(chǔ)器操作數(shù),OPRD2可為通用寄存器、存儲(chǔ)器或立即操作數(shù);例:

AND/OR/XORAL,BL ;寄存器,寄存器

AND/OR/XORASCII[DI],AL ;存儲(chǔ)器,寄存器

AND/OR/XORBETA,01H ;存儲(chǔ)器,立即數(shù)

AND/OR/XORAX,MOD[SI] ;寄存器,存儲(chǔ)器3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-除法指令2、TESTOPRD1,OPRD2本指令對(duì)OPRD1和OPRD2進(jìn)行按位與操作,但結(jié)果并不傳送到OPRD1,而僅反映在標(biāo)志位上;該指令常與JZ/JNZ連用,用于檢測(cè)操作數(shù)的某一位或某幾位的狀態(tài);…TESTAL,01H ;測(cè)試AL的最低位是否為1JNZPRC1 ;如果為1,轉(zhuǎn)移到PRC1開始處執(zhí)行程序TESTAL,02H ;測(cè)試AL的第1位是否為1JNZPRC2 ;如果為1,轉(zhuǎn)移到PRC2開始處執(zhí)行程序…3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解四、串操作指令助記符功能MOVS串傳送指令CMPS串比較指令SCAS串搜索指令LODS串加載指令STOS串存儲(chǔ)指令3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-串指令說明(數(shù)據(jù))串是指連續(xù)存放于存儲(chǔ)器中的數(shù)據(jù)塊;利用重復(fù)操作前綴,所有的基本串操作均可重復(fù)操作;所有的串操作指令均用SI尋址源操作數(shù),并假設(shè)在現(xiàn)行數(shù)據(jù)段中;用DI尋址目的操作數(shù),并假設(shè)在現(xiàn)行附加段中;每執(zhí)行一次串操作指令,SI,DI會(huì)自動(dòng)加1/減1,這由DF決定;如果有重復(fù)前綴,則指令重復(fù)執(zhí)行次數(shù)由CX值決定,并在重復(fù)操作前對(duì)CX進(jìn)行檢測(cè),如果CX=0,則不會(huì)引起重復(fù)操作;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-串指令說明與串操作指令配合使用的重復(fù)前綴有REP:重復(fù)REPE/REPZ:相等/為零時(shí)重復(fù)REPNE/REPNZ:不相等/不為零時(shí)重復(fù)實(shí)際上,重復(fù)前綴與串操作指令有以下情況REP前綴配合MOVS、STOS及LODS工作REPE/REPZ及REPNE/REPNZ配合CMPS、SCAS工作3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令(一)與REP連用的指令REP前綴執(zhí)行流程當(dāng)CX=0時(shí),結(jié)束REP,執(zhí)行REP下一條指令。當(dāng)CX≠0時(shí),CX=CX-1,并執(zhí)行REP后的指令,直到CX=0;(CX)=0?Y(CX)(CX)-1執(zhí)行下一條指令執(zhí)行REP后的串指令N3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令1、MOVS(串傳送指令)串傳送指令有三種格式MOVSdest,src:((ES):(DI))←((DS)(SI))MOVSB:(SI)←(SI)±1,(DI)←(DI)±1MOVSW:(SI)←(SI)±2,(DI)←(DI)±2*注:當(dāng)DF=1時(shí)式中用“+”;DF=0時(shí)用“-”;*本指令不影響標(biāo)志位MOVS指令可以實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送操作;例:MOVSES:BYTEPTR[DI],DS:[SI]20061010TuesdayC2033.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令

MOVAX,SEGAREA1 ;AREA1段地址到DS MOVDS,AX MOVAX,SEGAREA2 ;AREA2段地址到ES MOVES,AX MOVSI,OFFSETAREA1 ;AREA1偏移量到SI MOVDI,OFFSETAREA2 ;AREA2偏移量到DI MOVCX,100 ;數(shù)據(jù)塊長度法哦CX CLD;

規(guī)定地址方向,DF=0,增址傳送REPMOVSES:BYTEPTR[DI],DS:[SI]3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令

MOVAX,SEGAREA1 MOVDS,AX MOVAX,SEGAREA2 MOVES,AX MOVSI,OFFSETAREA1;將ARE1偏移地址→SI MOVDI,OFFSETAREA2 MOVCX,100LOOP1:MOVAL,[SI] ;(AL)←((DS):(SI))

MOVES:[DI],AL;((ES):(DI))←(AL)

INCSI INCDI DECCX JNELOOP13.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令2、LODS(串加載指令)此指令用于將串中的數(shù)據(jù)傳送到AX/AL中指令形式為LODSscr; AL←DS:SI,SI=SI±1 AX←DS:SI,SI=SI±2LODSB:AL←DS:SI,SI=SI±1LODSW:AX←DS:SI,SI=SI±23.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令LODS應(yīng)用注意:(1)指令允許用段跨越前綴來指定非數(shù)據(jù)段的存儲(chǔ)區(qū)。(2)該指令不影響條件碼。一般說來:它不與REP聯(lián)用,每重復(fù)一次,累加器的內(nèi)容就改變一次,而AL中只能保持最后一個(gè)元素。有時(shí)緩沖區(qū)中的一串字符需要多次取出測(cè)試時(shí)可用本指令。適用于在一個(gè)循環(huán)中,用基本串操作指令構(gòu)成復(fù)雜串操作時(shí)很有用。3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令3、STOS(串存儲(chǔ)指令)此指令用于將AL/AX的內(nèi)容傳送到ES:DI單元;指令形式為STOSscr; ES:DI←AL,DI=DI±1 DS:SI←AX,SI=SI±2STOSB:DS:SI←AL,SI=SI±1STOSW:DS:SI←AX,SI=SI±2此指令與REP連用時(shí),一般用于在存儲(chǔ)器中建立一組值相同的串;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令LDOS及STOS指令應(yīng)用舉例: 內(nèi)存中有一個(gè)首地址為BLOCK的補(bǔ)碼表示的有符號(hào)數(shù)的數(shù)據(jù)塊?,F(xiàn)需要編制一段程序,將該數(shù)據(jù)塊中的正負(fù)數(shù)分開,分別存于二個(gè)緩沖區(qū):

存放正數(shù)的緩沖區(qū)首址為POS_DATA; 存放負(fù)數(shù)的緩沖區(qū)首址為NEG_DATA。3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令分析:假設(shè):

1、源數(shù)據(jù)塊用SI尋址;2、正數(shù)的目的區(qū)用DI尋址;3、負(fù)數(shù)的目的區(qū)用BX尋址;4、循環(huán)次數(shù)使用CX控制;傳送過程:1、用LODS指令把源數(shù)據(jù)取入(AL)中;2、檢查其符號(hào),確定正、負(fù);3、若為正數(shù)用STOS指令送至正數(shù)緩沖區(qū);4、若是負(fù)數(shù),把(DI)與(BX)交換,仍使用STOS傳送;5、傳送完后再將(DI)與(BX)交換,恢復(fù)原值;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REP連用的指令START: MOVSI,OFFSETBLOCK MOVDI,OFFSETPOS-DATA;正數(shù)緩沖區(qū) MOVBX,OFFSETNEG-DATA;負(fù)數(shù)緩沖區(qū)

MOVCX,COUNT;置重復(fù)次數(shù)

CLDGOON: LODSB

TESTAL,80H;判斷符號(hào)位,確定正負(fù)

JNZMINS;若負(fù)數(shù)轉(zhuǎn)MINS

STOSB;正數(shù),DI←AL,DI←DI+1 JMPAGAINMINS: XCHGBX,DI

STOSB;負(fù)數(shù),(DI)←(AL),(DI)←(DI)+1 XCHGBX,DIAGAIN: DECCX JNZ,GOON HLT3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令(i)REPE/REPZ前綴執(zhí)行流程1、當(dāng)(CX)=0,結(jié)束REPZ,執(zhí)行REPZ下一條指令;2、當(dāng)(CX)≠0,CX內(nèi)容減1,執(zhí)行REPZ后的串指令;3、當(dāng)ZF=1,返回1;4、當(dāng)ZF≠1,則結(jié)束REPZ,執(zhí)行REPZ下一條指令。注意:(CX)減1操作不影響標(biāo)志ZF標(biāo)志由串操作決定當(dāng)(CX)=0或ZF=0時(shí)退出循環(huán)(二)與REPZ/REPE或REPNZ/REPNE連用的指令CX=0?CX=CX-1執(zhí)行前綴后的串操作指令ZF=1?重復(fù)執(zhí)行結(jié)束YNNY3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令(ii)REPNE/REPNZ前綴執(zhí)行流程1、當(dāng)(CX)=0,結(jié)束REPZ,執(zhí)行REPNZ下一條指令;2、當(dāng)(CX)≠0,CX內(nèi)容減1,執(zhí)行REPNZ后的串指令;3、當(dāng)ZF=0,返回1;4、當(dāng)ZF≠0,則結(jié)束REPNZ,執(zhí)行REPZ下一條指令。注意:(CX)減1操作不影響標(biāo)志ZF標(biāo)志由串操作決定當(dāng)(CX)=0或ZF=1時(shí)退出循環(huán)(二)與REPZ/REPE或REPNZ/REPNE連用的指令CX=0?CX=CX-1執(zhí)行前綴后的串操作指令ZF=0?重復(fù)執(zhí)行結(jié)束YNNY3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令1、CMPS(串比較指令)此指令用于對(duì)兩串進(jìn)行比較,通過判斷標(biāo)志位得到比較結(jié)果,其實(shí)際所作的也是一個(gè)虛減操作,利用虛減影響相應(yīng)的標(biāo)志位,此虛減操作為:

(ES):(DI)-(DS):(SI)指令形式為CMPS/CMPSB/CMPSWdest,scr ES:DI-DS:SI,SI=SI±1,DI=DI±1 ES:DI-DS:SI,SI=SI±2,DI=DI±23.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令CMPS應(yīng)用舉例例:在存儲(chǔ)器中有兩個(gè)待比較的串Str1和Str2,現(xiàn)編制一段程序,對(duì)兩串進(jìn)行比較,比較結(jié)果存放在Result單元中,如果Str1與Str2相同,則結(jié)果為0,否則結(jié)果為1。3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令

MOVSI,OFFSETStr1;Str1偏移量到SI MOVDI,OFFSETStr2;Str2偏移量到DI MOVCX,COUNT;比較次數(shù)(串長度)到CX CLD; 地址遞增

REPZCMPSB;串比較

JNZUNMAT

;若串不同,在RESULT單元中置0FFH MOVAL,0;若串相等,在RESULT單元中置00H

JMPOUTPTUNMAT:MOVAL,0FFHOUTPT:MOVRESULT,AL

HLT3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令2、SCAS(串掃描/搜索指令)此指令用于測(cè)試在某數(shù)據(jù)串中是否包含關(guān)鍵字;所謂的關(guān)鍵字為一個(gè)預(yù)先存放于AL/AX中的數(shù)據(jù);指令形式為SCASscr;ES:DI–AL/AX,DI=DI±1/2SCASBscr;ES:DI–AL,DI=DI±1SCASWscr;ES:DI–AX,DI=DI±2本指令實(shí)際也為虛減操作,對(duì)標(biāo)志位有影響;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令SCAS應(yīng)用舉例例:在存儲(chǔ)器中有一數(shù)據(jù)串Str1,現(xiàn)編制一段程序檢測(cè)該數(shù)據(jù)串中是否包含有存放于KeyWord單元(Byte)的關(guān)鍵字,將關(guān)鍵字第一次出現(xiàn)的位置記錄到KW_Pos單元中,如果未找到關(guān)鍵字,則KW_Pos=ffffh;3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令

MOVDI,0FFSETStr1;設(shè)置數(shù)據(jù)塊地址指針 MOVCX,COUNT ;設(shè)置數(shù)據(jù)塊長度

MOVAL,KeyWord

;關(guān)鍵字送入AL或AX REPNESCASB ;(CX)≠0,Z=0繼續(xù)SCASB JZFOUND ;如果ZF=1,則串包含關(guān)鍵字

MOVKW_Pos,0ffffh;如果未找到,KW_Pos=0ffffh JMPDONEFOUND:DECDI ;記錄關(guān)鍵字首次出現(xiàn)位置

MOVKW_Pos,DIDONE:HLT3.28086微處理器的指令系統(tǒng)

3.2.28086指令系統(tǒng)詳解-與REPZ/REPE或REPNZ/REPNE連用的指令應(yīng)用舉例:例:一個(gè)數(shù)據(jù)塊由大小寫英文字母、數(shù)字、其他符號(hào)組成,用CR(ASCII碼0DH)結(jié)束。數(shù)據(jù)塊首地址為BLOCK1。將其傳送到BLOCK2為首地址的內(nèi)存區(qū),并將英文中小寫英文字母(a~z)轉(zhuǎn)換成大寫英文字母(A~Z),其余不變。分析:大小寫英文字母中相應(yīng)ASCII碼的關(guān)系:a~z

相應(yīng)ASCII碼為:61H~7AHA~Z相應(yīng)ASCII碼為:41H~5AH只要將小寫的ASCII碼減去20H即可英文中小寫英文字母(a~z)轉(zhuǎn)換成大寫英文字母(A~Z)。程序和流程圖如下:

LEASI,BLOCK1;源串首地址到SI LEADI,BLOCK2;目的串首地址到DI CLD; 地址遞增NEXT:LODSB; 串?dāng)?shù)據(jù)到AL CMPAL,0DH; 判斷串?dāng)?shù)據(jù)是否結(jié)束

JZDONE

CMPAL,61H; 判斷串?dāng)?shù)據(jù)是否為小寫

JCOK CMPAL,7BH;

JNCOK

SUBAL,20H; 將小寫字母轉(zhuǎn)換為大寫字母OK: STOSB; 將當(dāng)前處理的數(shù)據(jù)送入目的

JMPNEXTDONE:HLT指令重復(fù)前綴操作數(shù)地址指針寄存器MOVSREP源,目標(biāo)(DS):(SI),(ES):(DI)CMPSREPE/REPNE源,目標(biāo)(DS):(SI),(ES):(DI)SCASREPE/REPNE目標(biāo)(ES):(DI)LODS無源(DS):(SI)STOSREP目標(biāo)(ES):(DI)小結(jié)

溫馨提示

  • 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)論