微機(jī)原理2.3課件_第1頁(yè)
微機(jī)原理2.3課件_第2頁(yè)
微機(jī)原理2.3課件_第3頁(yè)
微機(jī)原理2.3課件_第4頁(yè)
微機(jī)原理2.3課件_第5頁(yè)
已閱讀5頁(yè),還剩119頁(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)介

PrincipleofMicrocomputer

微機(jī)原理YSU第二章微處理器指令系統(tǒng)小練習(xí)1、對(duì)錯(cuò)判斷

MOVCS,AXMOVAX,IP

MOVDS,ESMOVDS,2000H

2、將字節(jié)變量WV2的內(nèi)容復(fù)制給字節(jié)變量WV1?

MOVWV1,WV2可以嗎?3、堆棧操作順序?PUSHSP先____,再____數(shù)據(jù)POP先____數(shù)據(jù),SP再____4、尋址方式

MOVAX,4567H

MOVAX,[4567H]

MOVAX,[BX]

MOVAX,[BX+4567H]

MOVAX,SI

MOVAX,[BX+SI]堆棧堆棧(Stack)

內(nèi)存中開(kāi)辟的用于暫時(shí)存放數(shù)據(jù)的一個(gè)特殊區(qū)域。

按先進(jìn)后出(FILO)或后進(jìn)先出(LIFO)的原則管理。

堆棧段的段地址存放于段寄存器SS中,

偏移地址存放于寄存器SP中。BP用于尋址,可用存儲(chǔ)器尋址方式隨機(jī)存取堆棧中數(shù)據(jù)如MOVDX,[BP+4];SS:[BP+4]傳送給DX堆棧操作指令示例MOVAX,1234H

MOVBX,5678H

PUSHAX

PUSHBX

POPCX

POPDX入棧操作示意向下生長(zhǎng)棧頂?shù)刂?lt;=棧底地址出棧操作示意堆棧操作注意事項(xiàng)堆棧操作均為16位(字)操作;

不能將立即數(shù)壓入堆棧;

進(jìn)棧和出棧的操作伴隨著堆棧指針SP的調(diào)整,SS:SP永遠(yuǎn)指向堆棧段的棧頂。

堆棧只有一個(gè)出口。堆棧段向下生長(zhǎng),棧底在高地址,堆棧是從高地址向低地址延伸的。堆棧指令練習(xí)順序執(zhí)行PUSHAX;將AX內(nèi)容推入棧頂POPBX;將當(dāng)前棧頂內(nèi)容彈給BX其功能等同于MOVBX,AX標(biāo)志操作指令(1)CLC;CF=0

;ClearCarry(進(jìn)位)FlagSTC;CF=1

;SetCarryFlagCMC;CF取反

;ComplementCarryFlag標(biāo)志操作指令(3)PUSHF;SP=SP-2,SS:SP=FLAGS

POPF;FLAGS=SS:SP,SP=SP+2地址傳送指令

LEA指令(LoadEffectiveAddress)LEAr16,mem;r16=mem的偏移地址

LEABX,[SI+06H];若SI=1000H,則BX=1006HLEASI,[DX];錯(cuò)誤,操作數(shù)的偏移地址存放于

寄存器BX/BP/SI/DI中LEA指令示例WVARDW1234H;設(shè)其偏移地址為0001H

MOVBX,WVAR;BX=1234H

LEASI,WVAR;SI=0001H

MOVDX,[SI];DX=1234HDS=1000H,SI=0010H,[10010H]=2000HLEABX,[SI];BX=0010H

MOVBX,[SI];BX=2000H加減法指令A(yù)DDdest,src;dest=dest+src

SUBdest,src;dest=dest-src

ADD加法指令(Addition)ADDreg,imm/reg/mem

ADDmem,imm/reg

目的操作數(shù)不能為立即數(shù)。

兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。

兩操作數(shù)類型要一致。

按定義影響6個(gè)狀態(tài)標(biāo)志位。ADDAX,[BX]

;寄存器間接尋址對(duì)狀態(tài)標(biāo)志位影響情況的說(shuō)明不影響;如:MOV指令。

按定義影響;如:ADD指令。

強(qiáng)制(規(guī)定)影響;如:CLC指令。

無(wú)定義(隨機(jī)影響);如:MUL指令。加減法指令示例MOVAL,57H

;01010111B87DADDAL,4FH;01001111B

79D

;AL=0A6H

10100110B

166D;CF=0,無(wú)進(jìn)位,OF=1,變號(hào)MOVAL,62H

;01100010B98DSUBAL,0A6H;10100110B

166D;AL=0BCH

10111100B

-68D;CF=1,有借位,SF=1,符號(hào)標(biāo)志為1ADC指令(AddwithCarry)ADCreg,imm/reg/mem

ADCmem,imm/reg

目的操作數(shù)不能為立即數(shù)。

兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。

兩操作數(shù)類型要一致。

按定義影響6個(gè)狀態(tài)標(biāo)志位。ADCDX,BX

;

DX=DX+BX+以前的CFSBB指令(SubtractwithBorrow)SBBreg,imm/reg/mem

SBBmem,imm/reg

目的操作數(shù)不能為立即數(shù)。

兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。

兩操作數(shù)類型要一致。

按定義影響6個(gè)狀態(tài)標(biāo)志位。SBBBX,‘+’+’-’

;ASCII碼4BH+4DHSBB指令的應(yīng)用SBB指令用于與SUB指令結(jié)合實(shí)現(xiàn)多精度數(shù)的減法。

先將兩個(gè)操作數(shù)的低16位相減(用SUB指令)。

再減高位部分、并減去借位(用SBB指令)。帶進(jìn)/借位加減法指令示例XDD12345678H

YDD9ABCDEF0H

MOVAX,WORDPTRX;改變類型

ADDAX,WORDPTRY;5678+DEF0

13568H

MOVDX,WORDPTRX+2;DX雙字的高16位

ADCDX,WORDPTRY+2;DX=1234+9ABC+CF(AX)

ACF1HCMP比較指令(Compare)CMPdest,src;dest-src

按定義影響6個(gè)狀態(tài)標(biāo)志位。

CMP指令通過(guò)減法運(yùn)算影響狀態(tài)標(biāo)志位,

常用于比較兩個(gè)操作數(shù)的大小關(guān)系。

CMP指令執(zhí)行前后兩操作數(shù)內(nèi)容均不變。

CMPAX,CL

;錯(cuò)誤,操作數(shù)類型不匹配

CMPAX,200

;立即數(shù)尋址INC增量指令(Increment)INCreg/mem;reg/mem=reg/mem+1

常用于計(jì)數(shù)器和地址指針的調(diào)整。

不影響CF標(biāo)志,但影響其它狀態(tài)標(biāo)志位。MOVAL,FFH;11111111BINCAL

;AL=(00H),CF=(0),ZF=(1)DEC減量指令(Decrement)DECreg/mem;reg/mem=reg/mem-1

常用于計(jì)數(shù)器和地址指針的調(diào)整。

不影響CF標(biāo)志,但影響其它狀態(tài)標(biāo)志位。NEG指令(Negate)NEGreg/mem;reg/mem=0-reg/mem

按定義影響6個(gè)狀態(tài)標(biāo)志位。

當(dāng)操作數(shù)為-128或-32768時(shí),操作數(shù)不變,但OF置1。

通??偸鞘笴F=1,除非操作數(shù)為0。MUL無(wú)符號(hào)乘法指令(Multiplication)MULr8/m8;AX=AL×r8/m8

MULr16/m16;DX.AX=AX×r16/m16

乘法指令隱含使用一個(gè)操作數(shù)AX和DX,源操作數(shù)則顯式給出。若是字節(jié)量相乘,如MULBL,乘積存放在AX。IMUL有符號(hào)乘法指令(IntegerMultiply)IMULr8/m8;AX=AL×r8/m8

IMULr16/m16;DX.AX=AX×r16/m16乘法指令對(duì)標(biāo)志位的影響乘法指令只影響OF和CF,對(duì)其它狀態(tài)標(biāo)志無(wú)定義。

對(duì)于無(wú)符號(hào)乘法,若乘積中AH=00H(8位乘法)或DX=0000H(16位乘法),OF=CF=0;否則均為1。

對(duì)于有符號(hào)乘法,若乘積的高一半是低一半的符號(hào)擴(kuò)展,則OF=CF=0;否則均為1,高一半含有有效數(shù)字。DIV無(wú)符號(hào)除法指令(Division)DIVr8/m8

;AL=AX÷src的商

;AH=AX÷src的余

DIVr16/m16;AX=DX.AX÷src的商

DX=DX.AX÷src的余DIV20H

;錯(cuò)誤,立即數(shù)不能直接操作IDIV有符號(hào)除法指令(IntegerDivision)IDIVr8/m8

;AL=AX÷src的商

;AH=AX÷src的余

IDIVr16/m16;AX=DX.AX÷src的商

;DX=DX.AX÷src的余將AL中的有符號(hào)數(shù)除以CL中的有符號(hào)數(shù)CBW;字節(jié)轉(zhuǎn)換為字,AL符號(hào)擴(kuò)展成AXIDIVCL;AL=AX÷CL的商MOVBL,AH;AH=AX÷CL的余,保存至BL除法指令對(duì)標(biāo)志位的影響除法指令對(duì)6個(gè)狀態(tài)標(biāo)志位均無(wú)定義。

但當(dāng)除數(shù)為0或商溢出時(shí)將產(chǎn)生編號(hào)為0的內(nèi)部中斷,指示除法錯(cuò)誤。DIV溢出:字節(jié)除時(shí)商超過(guò)8位,或字除時(shí)商超過(guò)16位;IDIV溢出:字節(jié)除時(shí)商不在-128~127范圍內(nèi),或字除時(shí)商不在-32768~32767范圍內(nèi)。乘除法指令練習(xí)計(jì)算(X×Y+125)÷Z。設(shè)X、Y、Z均為16位有符號(hào)的字變量,計(jì)算后將商存入X,余數(shù)存入Y。乘除法指令練習(xí)答案MOVAX,X

IMULY

ADDAX,125

ADCDX,0

IDIVZ

MOVX,AX

MOVY,DX注意:乘除法指令均不能使用立即數(shù)操作數(shù)。

;AX=X

;DX.AX←AX*Y

;AX=AX+125

;DX=DX+0+CF(AX)

;AX←DX.AX/Z的商,DX←DX.AX/Z的余數(shù);X=AX

;Y=DX符號(hào)擴(kuò)展指令

CBW指令(ConvertBytetoWord)CBW;AL符號(hào)擴(kuò)展成AX,大小不變?nèi)鬉L的最高有效位是0,則AH=00H;

若AL的最高有效位是1,則AH=FFH;MOVAL,88H;AL=10001000BCBW;AX=FF88HCWD指令(ConvertWordtoDword)CWD;AX符號(hào)擴(kuò)展成DX.AX,大小不變

若AX的最高有效位是0,則DX=0000H;

若AX的最高有效位是1,則DX=FFFFH;CWD;隱含使用累加器AX邏輯運(yùn)算指令A(yù)NDdest,src;dest=dest“與”srcORdest,src;dest=dest“或”srcXORdest,src;dest=dest“異或”srcTESTdest,src;dest“與”srcNOTreg/mem;reg/mem=reg/mem的“非”

TEST指令對(duì)兩個(gè)操作數(shù)執(zhí)行按位的邏輯與運(yùn)算,但結(jié)果不回到目的操作數(shù),只根據(jù)結(jié)果來(lái)設(shè)置狀態(tài)標(biāo)志。

TESTAX,0

;AX的各位保持不變,不能實(shí)現(xiàn)AX清零邏輯運(yùn)算指令注意事項(xiàng)目的操作數(shù)不能為立即數(shù)。

兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù)。

兩操作數(shù)類型要一致。

ANDAX,CL

錯(cuò)誤

雙操作數(shù)邏輯運(yùn)算指令均置OF=CF=0。

按定義影響SF、ZF和PF,對(duì)AF無(wú)定義。

NOT指令不影響狀態(tài)標(biāo)志位。MOVAL,00HNOTAL;AL=(FFH),CF=(0)邏輯“與”運(yùn)算特點(diǎn)0011

0

1

0

10001和0相“與”,結(jié)果為0

;和1相“與”,結(jié)果不變。邏輯“或”運(yùn)算特點(diǎn)0011

0

1

0

10111和1相“或”,結(jié)果為1

;和0相“或”,結(jié)果不變。邏輯“異或”運(yùn)算特點(diǎn)0011

0

1

0

10110和1“異或”,結(jié)果取反;和0“異或”,結(jié)果不變。邏輯運(yùn)算指令練習(xí)使AL最高位為“1”,其他位不變。使AX清0,同時(shí)清CF為0。使AL中的D7~D4位不變,D3~D0位取反。將AL存放的0~9中的一個(gè)數(shù)變成對(duì)應(yīng)的ASCII碼。將AL中的ASCII碼小寫(xiě)字母變成對(duì)應(yīng)的大寫(xiě)字母。將AL中的ASCII碼大寫(xiě)字母變成對(duì)應(yīng)的小寫(xiě)字母。使AL的低4位不變,高4位清零。邏輯運(yùn)算指令練習(xí)答案ORAL,80H;使AL最高位為“1”,其他位不變。XORAX,AX;使AX清0,同時(shí)清CF為0。XORAL,0FH;D7~D4位不變,D3~D0位取反。ORAL,30H;0~9中的數(shù)變成對(duì)應(yīng)ASCII碼(或+30H)。ANDAL,5FH;ASCII碼小寫(xiě)變成大寫(xiě)(或-20H)。ORAL,20H;ASCII碼大寫(xiě)變成小寫(xiě)(或+20H

ADDAL,20H)。ANDAL,0FH

;D7~D4位清零,D3~D0位不變。;使AX清0XORAX,AXMOVAX,0SUBAX,AXSHL邏輯左移位(ShiftLogicLeft)SHLreg/mem,1/CL;reg/mem左移1/CL位

最低位LowestSignificantBit補(bǔ)0,最高位MostSignificantBit進(jìn)入CF

MOVAL,97H;10010111B;SHLAL,1;AL=2EH(00101110B),CF=1

SHLAX,CL;將AX中的數(shù)據(jù)邏輯左移CL位SHR邏輯右移位(ShiftLogicRight)SHRreg/mem,1/CL;reg/mem右移1/CL位

最高位MSB補(bǔ)0,最低位LSB進(jìn)入CF

MOVAL,0B;SHRAL,1;AL=01011111B,CF=0

SAL算術(shù)左移位(ShiftArithmeticLeft)SALreg/mem,1/CL;reg/mem左移1/CL位

和SHL相同MOVAL,10111110B;SALAL,1;AL=01111100B,CF=1

SAR算術(shù)右移位(ShiftArithmeticRight)SARreg/mem,1/CL;reg/mem右移1/CL位

最高位MSB不變,最低位LSB進(jìn)入CF

MOVAL,10111110B;SARAL,1;AL=11011111B,CF=0

邏輯/算術(shù)移位指令對(duì)標(biāo)志位的影響按照移入的位設(shè)置CF;

按定義影響SF、ZF、PF(最低字節(jié));對(duì)AF無(wú)定義。

移位次數(shù)為1,若移位前后操作數(shù)最高位不同,OF=1;否則OF=0。移位次數(shù)大于1,OF無(wú)定義。ROL循環(huán)左移位(RotateLeft)ROLreg/mem,1/CL;循環(huán)左移1/CL位

不帶進(jìn)位

MOVAL,10111110B;ROLAL,1;AL=01111101B,CF=1

ROR循環(huán)右移位(RotateRight)RORreg/mem,1/CL;循環(huán)右移1/CL位

不帶進(jìn)位

MOVAL,0B;RORAL,1;AL=01011111B,CF=0

RCL指令(RotatethroughCFLeft)RCLreg/mem,1/CL;帶進(jìn)位循環(huán)左移

MOVAL,010111110B;假設(shè)CF=0RCLAL,1;AL=01111100B,CF=1

RCR指令(RotatethroughCFRight)RCRreg/mem,1/CL;帶進(jìn)位循環(huán)右移

MOVAL,10B;假設(shè)CF=1RCRAL,1;AL=11011111B,CF=0

循環(huán)移位指令對(duì)標(biāo)志位的影響按照移入的位設(shè)置CF;

不影響SF、ZF、PF、AF。

移位次數(shù)為1,若移位前后操作數(shù)最高位不同,OF=1;否則OF=0。移位次數(shù)大于1,OF無(wú)定義。移位指令練習(xí)用移位指令將AL中的無(wú)符號(hào)數(shù)乘10,結(jié)果存入AX中。

將ASCII碼轉(zhuǎn)換成BCD碼。

ASCIIDB33H,38H

BCDDB?用移位指令實(shí)現(xiàn)乘法SHL邏輯左移一位相當(dāng)于無(wú)符號(hào)數(shù)乘以2SHR邏輯右移一位相當(dāng)于無(wú)符號(hào)數(shù)除以2

XORAH,AH;AH清0,CF=0

SHLAX,1;AX=AL*2

MOVBX,AX;BX=AL*2

SHLAX,1;AX=AL*4

SHLAX,1;AX=AL*8

ADDAX,BX;AX=AL*10ASCII碼轉(zhuǎn)換成BCD碼ASCIIDB33H,38HBCDDB?

MOVAL,ASCII;AL=33HANDAL,0FH;AL=03HMOVAH,ASCII+1;AH=38HMOVCL,4SHLAH,CL;AH=80HORAL,AH;AL=83HMOVBCD,ALAND指令可用于復(fù)位某些位(同0相與),不影響其他位OR指令可用于置位某些位(同1相或),不影響其他位XOR指令可用于求反某些位(同1相異或),不影響其他位邏輯指令SHL/SALSHRSARROLRCLRORRCR移位指令控制轉(zhuǎn)移類指令程序代碼在代碼段中,由CS:IP確定地址。程序順序執(zhí)行,微處理器自動(dòng)增量IP。

控制轉(zhuǎn)移類指令:改變IP,有些也改變CS,

即改變程序執(zhí)行順序,實(shí)現(xiàn)程序控制轉(zhuǎn)移的指令。轉(zhuǎn)移范圍段內(nèi)轉(zhuǎn)移

在當(dāng)前代碼段64K范圍內(nèi)的程序轉(zhuǎn)移,

不需更改CS,只要改變IP。

段間轉(zhuǎn)移

從當(dāng)前代碼段轉(zhuǎn)移到另一代碼段,

需要更改CS和IP。段內(nèi)轉(zhuǎn)移近轉(zhuǎn)移(Near)

轉(zhuǎn)移范圍為±32KB

短轉(zhuǎn)移(Short)

轉(zhuǎn)移范圍為+127~-128字節(jié)段間轉(zhuǎn)移遠(yuǎn)轉(zhuǎn)移(Far)

轉(zhuǎn)移范圍為1MB目標(biāo)地址尋址方式相對(duì)尋址方式

直接尋址方式

間接尋址方式相對(duì)尋址方式相對(duì)尋址方式

提供目標(biāo)地址相對(duì)于當(dāng)前指令指針I(yè)P的位移量。

目標(biāo)地址(轉(zhuǎn)移后的IP)=當(dāng)前IP+位移量。

相對(duì)尋址都是段內(nèi)轉(zhuǎn)移。直接尋址方式直接尋址方式

直接提供目標(biāo)地址。

目標(biāo)地址(轉(zhuǎn)移后的CS和IP)=指令操作數(shù)。間接尋址方式間接尋址方式

目標(biāo)地址來(lái)自寄存器或存儲(chǔ)單元,間接獲得。

寄存器間接尋址:用寄存器保存目標(biāo)地址。

存儲(chǔ)器間接尋址:用存儲(chǔ)單元保存目標(biāo)地址。JMP無(wú)條件轉(zhuǎn)移指令(Jump)JMPLABEL

例如

NEXT:MOVAX,BX

?????

JMPNEXT語(yǔ)句標(biāo)號(hào)LABELLABEL是用戶自定義的標(biāo)識(shí)符,

其作用是用來(lái)指代某條指令的地址。

LABEL的語(yǔ)法特征是其后一定有冒號(hào)。段內(nèi)JMPJMPLABEL;相對(duì)或直接IP←IP+位移量

JMPr16/m16;間接IP←r16/m16段間JMPJMPFARPTRLABEL;直接

IP←偏移地址,CS←段地址JMPFARPTRmem

;間接,雙字存儲(chǔ)單元

IP←[mem],CS←[mem+2]低字高字條件轉(zhuǎn)移指令Jcc根據(jù)指定的條件來(lái)確定程序是否發(fā)生轉(zhuǎn)移

JccLABEL;條件滿足,發(fā)生轉(zhuǎn)移

IP←IP+8位位移量

;否則,順序執(zhí)行下一條指令

LABEL表示目標(biāo)地址,采用段內(nèi)相對(duì)短轉(zhuǎn)移轉(zhuǎn)移條件Conditioncc表示利用標(biāo)志判斷的條件,共16種,分兩類

單個(gè)標(biāo)志狀態(tài)作為條件(TEST邏輯測(cè)試指令)兩數(shù)大小關(guān)系作為條件(CMP減法比較大小指令)轉(zhuǎn)移條件cc:?jiǎn)蝹€(gè)標(biāo)志狀態(tài)(1)JZ/JEZF=1Zero/EqualJNZ/JNEZF=0NotZero/NotEqualJSSF=1SignJNSSF=0NotSignJP/JPEPF=1Parity/ParityEvenJNP/JPOPF=0NotParity/ParityOdd轉(zhuǎn)移條件cc:?jiǎn)蝹€(gè)標(biāo)志狀態(tài)(2)JOOF=1OverflowJNOOF=0NotOverflowJCCF=1CarryJNCCF=0NotCarry轉(zhuǎn)移條件cc:無(wú)符號(hào)數(shù)大小關(guān)系JB/JNAECF=1Below/NotAboveorEqualJNB/JAECF=0NotBelow/AboveorEqualJBE/JNACF=1或ZF=1BeloworEqual/NotAboveJNBE/JACF=0且ZF=0NotBeloworEqual/Above轉(zhuǎn)移條件cc:有符號(hào)數(shù)大小關(guān)系JL/JNGESF≠OFLess/NotGreaterorEqualJNL/JGESF=OFNotLess/GreaterorEqualJLE/JNGSF≠OF或ZF=1LessorEqual/NotGreaterJNLE/JGSF=OF且ZF=0NotLessorEqual/Greater單分支結(jié)構(gòu)Jcc條件滿足?分支語(yǔ)句體YN將有符號(hào)數(shù)轉(zhuǎn)換為絕對(duì)值

CMPAL,0

JGE

NEXT

;為正數(shù)或0,轉(zhuǎn)移到NEXT

NEG

AL;為負(fù)數(shù),轉(zhuǎn)換為絕對(duì)值NEXT:……雙分支結(jié)構(gòu)1Jcc條件滿足?分支語(yǔ)句體1YN分支語(yǔ)句體2雙分支結(jié)構(gòu)2Jcc條件滿足?分支語(yǔ)句體1YN分支語(yǔ)句體2JMP轉(zhuǎn)移類指令練習(xí)通過(guò)判斷符號(hào)實(shí)現(xiàn)CBW指令的功能。

通過(guò)判斷正負(fù)實(shí)現(xiàn)CBW指令的功能。

取三個(gè)無(wú)符號(hào)字變量的最小值到AX。實(shí)現(xiàn)CBW指令功能的程序-1

MOV

AL,

BVAR;取出要判斷的數(shù)據(jù)

TESTAL,

80H

;測(cè)試最高位

JZNEXT

;最高位為0,轉(zhuǎn)移到NEXT

MOV

AH,

0FFH;最高位為1,設(shè)置AH=FFH

JMP

DONE

;無(wú)條件跳過(guò)另一個(gè)分支NEXT: MOV

AH,

0;最高位為0轉(zhuǎn)移到此DONE:……實(shí)現(xiàn)CBW指令功能的程序-2

MOVAL,BVAR;取出要判斷的數(shù)據(jù)

CMPAL,0

;與0比較

JNSNEXT

;最高位為0,轉(zhuǎn)移到NEXT

MOVAH,0FFH;最高位為1,設(shè)置AH=FFH

JMPDONE

;無(wú)條件跳過(guò)另一個(gè)分支NEXT:MOVAH,0

;最高位為0轉(zhuǎn)移到此DONE:……取三個(gè)無(wú)符號(hào)字變量的最小值到AX

MOVAX,V1

;假定V1最小

CMPAX,V2

;與V2比較

JBENEXT;V1<V2,轉(zhuǎn)移到NEXT

MOVAX,V2

;V2<V1NEXT:CMPAX,V3

JBEDONE

;AX(V1或V2)最小

MOVAX,V3

;V3最小DONE:……循環(huán)指令LOOPLOOPLABEL;CX=CX-1,若CX≠0,轉(zhuǎn)移

LOOP指令是針對(duì)CX計(jì)數(shù)器的計(jì)數(shù)循環(huán)指令

指令中的LABEL只能采用相對(duì)短轉(zhuǎn)移尋址方式,

轉(zhuǎn)移范圍為段內(nèi)(-128)~(+127)個(gè)字節(jié)。其他循環(huán)類指令LOOPELABEL;CX=CX-1,若CX≠0且ZF=1,轉(zhuǎn)移

LOOPNELABEL;CX=CX-1,若CX≠0且ZF=0,轉(zhuǎn)移

JCXZLABEL;若CX=0,轉(zhuǎn)移;否則,順序執(zhí)行循環(huán)指令練習(xí)已知字節(jié)數(shù)組ARRAY,將其各元素之和存入變量SUM中(不考慮進(jìn)位和溢出)。

ARRAYDB12H,34H,56H,78H

SUMDB?用循環(huán)指令實(shí)現(xiàn)字節(jié)數(shù)組求和 MOV

CX,4 JCXZDONE

;CX=0,0個(gè)元素,不再求和 XOR

AX,AX

;求和初值為0 MOV

BX,AX

;數(shù)組指針為0AGAIN:ADD

AL,ARRAY[BX]

;求和INC

BXLOOPAGAIN

;CX←CX-1,若CX=0,跳出循環(huán)DONE: MOV

SUM,AL

;保存結(jié)果計(jì)數(shù)循環(huán)示意循環(huán)初始化循環(huán)修改部分循環(huán)體計(jì)數(shù)控制條件YN子程序與主程序子程序

與主程序分開(kāi)的完成特定功能的一段程序

主程序(調(diào)用程序)

執(zhí)行調(diào)用指令CALL調(diào)用子程序

子程序(被調(diào)用程序)

執(zhí)行返回指令RET返回主程序子程序調(diào)用示意RETCALLLABEL主程序子程序子程序調(diào)用指令CALLCALLLABEL;相對(duì)尋址的段內(nèi)調(diào)用

IP入棧SP←SP-2,SS:[SP]←IP實(shí)現(xiàn)轉(zhuǎn)移IP←IP+16位位移量

CALLFAR

PTR

LABEL;直接尋址的段間調(diào)用

CS入棧SP←SP-2,SS:[SP]←CSIP入棧SP←SP-2,SS:[SP]←IP

實(shí)現(xiàn)轉(zhuǎn)移IP←label偏移地址,

CS←label段地址指令中的LABEL為子程序名。其他形式的CALL指令CALLr16/m16;間接尋址的段內(nèi)調(diào)用

IP入棧SP←SP-2,SS:[SP]←IP實(shí)現(xiàn)轉(zhuǎn)移IP←r16/m16

CALLFARPTRmem;間接尋址的段間調(diào)用

CS入棧SP←SP-2,SS:[SP]←CSIP入棧SP←SP-2,SS:[SP]←IP

實(shí)現(xiàn)轉(zhuǎn)移IP←[mem],CS←[mem+2]調(diào)用指令CALL的說(shuō)明匯編程序會(huì)自動(dòng)確定CALL指令

是段內(nèi)調(diào)用還是段間調(diào)用。

CALL指令在改變CS和IP前,

會(huì)將返回的地址保存到堆棧中。子程序返回指令RETRET;無(wú)參數(shù)返回

(段內(nèi))彈出IP

IP←SS:[SP],SP←SP+2

(段間)彈出CSCS←SS:[SP],SP←SP+2RETi16;有參數(shù)返回,

(段內(nèi))彈出IPIP←SS:[SP],SP←SP+2

(段間)彈出CSCS←SS:[SP],SP←SP+2

調(diào)整指針SP=SP+i16RET指令用在子程序中,實(shí)現(xiàn)調(diào)用的返回。返回指令RET的說(shuō)明匯編程序會(huì)自動(dòng)根據(jù)CALL指令來(lái)產(chǎn)生相應(yīng)的RET返回操作。

RET指令執(zhí)行時(shí)伴隨著CS,IP,SP的調(diào)整。子程序定義子程序名

PROC[NEAR/FAR]

……

;過(guò)程體子程序名

ENDP

子程序名為符合語(yǔ)法的標(biāo)識(shí)符

子程序應(yīng)安排在代碼段內(nèi)主程序之外中斷(Interrupt)CPU因某個(gè)特殊事件將當(dāng)前程序掛起(暫停),

轉(zhuǎn)去執(zhí)行處理這個(gè)特殊事件的程序,

處理結(jié)束后再返回被掛起的程序,

此過(guò)程稱為“中斷”。

處理特殊事件的程序稱為“中斷服務(wù)程序”。

中斷是一種特殊的改變程序執(zhí)行順序的方法。中斷向量8086/8088CPU支持256個(gè)中斷。

每個(gè)中斷用一個(gè)中斷編號(hào)來(lái)區(qū)別。

中斷服務(wù)程序的起始地址按中斷向量號(hào)順序存放在00000H~003FFH的內(nèi)存單元(1KB)中,形成“中斷向量表”。中斷向量表003FFH255號(hào)中斷服務(wù)程序的CS003FEH003FDH255號(hào)中斷服務(wù)程序的IP003FCH……00003H0號(hào)中斷服務(wù)程序的CS00002H00001H0號(hào)中斷服務(wù)程序的IP00000H中斷指令I(lǐng)NT

i8

;執(zhí)行i8號(hào)中斷

IRET

;中斷返回指令

INTO;溢出中斷指令DOS系統(tǒng)功能調(diào)用MS-DOS操作系統(tǒng)提供給程序員的“子程序”

系統(tǒng)功能調(diào)用步驟(類似高級(jí)語(yǔ)言調(diào)用函數(shù))(1)在AH寄存器中設(shè)置系統(tǒng)子功能調(diào)用號(hào)(2)在指定寄存器中設(shè)置入口參數(shù)(3)中斷調(diào)用指令“INT21H”執(zhí)行功能(4)根據(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)論