版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 警械使用課件
- 2023年國(guó)家公務(wù)員考試《申論》真題(地市卷)及答案解析
- 9.2《永遇樂(lè)·京口北固亭懷古》-高一語(yǔ)文上學(xué)期同步備課拓展(統(tǒng)編版必修上冊(cè))
- 西南林業(yè)大學(xué)《材料加工工藝與設(shè)備》2022-2023學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《微機(jī)原理與接口技術(shù)》2023-2024學(xué)年期末試卷
- 西京學(xué)院《漢語(yǔ)國(guó)際教育概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 幼兒園小班打擊樂(lè)活動(dòng)《小鱷魚(yú)之歌》課件
- 西華師范大學(xué)《中學(xué)思想政治學(xué)科教學(xué)論》2022-2023學(xué)年第一學(xué)期期末試卷
- 西華師范大學(xué)《舞臺(tái)劇創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 房地產(chǎn)金融與投資概論教學(xué)課件第六章房地產(chǎn)開(kāi)發(fā)建設(shè)融資
- 2024-2030年船用發(fā)動(dòng)機(jī)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- RFID智能倉(cāng)庫(kù)管理系統(tǒng)方案
- DB35T 772-2023 行業(yè)用水定額
- 農(nóng)村自建房接受贈(zèng)與協(xié)議書(shū)范文
- 2023年溫州瑞安農(nóng)商銀行招聘考試真題
- 手術(shù)室護(hù)理病歷臨床病案
- 2023-2024學(xué)年江西省萍鄉(xiāng)市八年級(jí)(上)期末物理試卷
- 房屋與市政工程第三方質(zhì)量安全巡查標(biāo)準(zhǔn)
- 2024年廣東省第一次普通高中學(xué)業(yè)水平合格性考試歷史試卷(解析版)
- 工程項(xiàng)目建設(shè)程序及審批部門(mén)
- 物體打擊事故應(yīng)急求援措施
評(píng)論
0/150
提交評(píng)論