第3章-2+8086指令系統(tǒng)NEW_第1頁
第3章-2+8086指令系統(tǒng)NEW_第2頁
第3章-2+8086指令系統(tǒng)NEW_第3頁
第3章-2+8086指令系統(tǒng)NEW_第4頁
第3章-2+8086指令系統(tǒng)NEW_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

微機原理與接口技術朱華貴2016年03月21日微機原理與接口技術3.2指令系統(tǒng)朱華貴2016年03月21日微機原理與接口技術3.38086指令系統(tǒng)8086指令系統(tǒng)包括六大類指令:數據傳送指令算術運算指令邏輯運算和移位指令串操作指令控制轉移指令處理器控制指令1、指令助記符指令類型助記符數據傳送通用傳送MOV,PUSH,POP,XCHG,XLAT地址傳送LEA,LDS,LES標志傳送PUSHF,POPF,LAHF,SAHF輸入輸出IN,OUT算術運算加法ADD,ADC,INC,AAA,DAA減法SUB,SBB,DEC,NEG,CMP,AAS,DAS乘法MUL,IMUL,AAM除法DIV,IDIV,AAD符號擴展CBW,CWD邏輯操作邏輯運算AND,TEST,OR,XOR,NOT移位SHL,SAL,SHR,SAR循環(huán)移位ROL,ROR,RCL,RCR指令類型助記符串處理串操作MOVS,CMPS,SCAS,LODS,STOS重復控制REP,REPZ/REPE,REPNZ,REPNE控制轉移無條件轉移JMP條件轉移JE/JZ,JNE/JNZ,JS,JNS,JO,JNOJP,JNP,JC,JNC,JCXZJA/JNBE,JAE/JNB,JB/JNAE,JBE/JNAJG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG循環(huán)控制LOOP,LOOPZ/LOOPE,LOOPNE/LOOPNZ過程調用CALL,RET中斷指令INT,INTO,IRET處理機控制CLC,STC,CMC,CLD,STD,CLI,STINOP,HLT,WAIT,ESC,LOCK2、學習指令要點從以下幾個方面來掌握一條指令:指令的助記符指令的格式:操作數的個數、類型執(zhí)行的操作:指令執(zhí)行后的結果。包括:哪些寄存器、內存單元的值發(fā)生了變化,對標志位有沒有影響,受哪些影響。特點及注意事項只介紹常用的指令,其他需要時可自學3、利用DEBUG學習尋址方式、指令系統(tǒng)例:D:\>DEBUG;進入DEBUG-A;匯編指令1395:0100MOVBX,20001395:0103MOV[BX],CS-R;查看指令執(zhí)行前寄存器的內容AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=1395ES=1395SS=1395CS=1395IP=0100NVUPEIPLNZNAPONC1395:0100BB0020MOVBX,2000-DDS:2000L20;查看指令執(zhí)行前內存單元的內容1395:20000000000000000000-0000000000000000................1395:20100000000000000000-0000000000000000................-T;單步執(zhí)行指令AX=0000BX=2000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=1395ES=1395SS=1395CS=1395IP=0103NVUPEIPLNZNAPONC1395:01038C0FMOV[BX],CSDS:2000=0000-T;單步執(zhí)行指令AX=0000BX=2000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000DS=1395ES=1395SS=1395CS=1395IP=0105NVUPEIPLNZNAPONC1395:01050000ADD[BX+SI],ALDS:2000=95-DDS:2000L10;查看指令執(zhí)行前內存單元的內容1395:20009513000000000000-0000000000000000................Q;退出4、指令中操作數的表示符號表示內容data立即數操作數reg通用寄存器操作數8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、BP、SP、SI、DIsegreg段寄存器:DS、CS、SS、ESmem或[]存儲器操作數(5種尋址方式)src源操作數dst目的操作數()寄存器、存儲器、端口的內容oprd1、oprd2兩操作數5、書寫指令注意事項不區(qū)分大小寫不添加指令系統(tǒng)沒有的指令,即不自創(chuàng)助記符注意操作數的范圍對無操作數指令,不添加操作數對單操作數指令,操作數不能是立即數…1.數據傳送指令類

◆數據傳送類指令一共有14條。這里主要介紹:

MOV

傳送

PUSH

壓入堆棧 POP

彈出堆棧

XCHG

交換 LEA

取偏移

IN 輸入端口“讀” OUT輸出端口“寫”◆數據傳送類指令均不影響標志位?!魯祿愋妥止?jié)(byte)/字(word)。絕大多數是雙操作數,兩個操作數(字節(jié)/字)類型必須一致。◆尋址方式基本與MOV指令的要求相同。數據傳送指令傳送指令MOV格式:MOVdst,src操作:dst←(src)雙操作數尋址方式:

dst(目的操作數) src(源操作數)

reg(寄存器)reg|mem|data(立即數)|segreg

mem(內存)reg|data|segreg

segreg(段寄存器)reg|mem◆兩個操作數類型(字節(jié)/字)要一致。◆目的操作數不能是立即數,兩個操作數不能都是內存尋址方式。堆棧操作指令

PUSH

和POP是一對堆棧操作指令:◆堆棧是一個“先進后出”的內存數據存取區(qū)域。堆棧邏輯地址SS:SP?!魯祿M入堆棧的操作為壓入(PUSH),從堆棧取出數據的操作為彈出(POP)。堆棧操作是單操作數指令,只能是字類型數據。壓入指令PUSH

格式:PUSHsrc操作:⑴(SP)-2→SP

⑵(src)→(SP)操作數尋址:src=|mem|reg|segreg

SS:0000SS:SP棧頂

棧底彈出指令POP格式:POPdst操作:⑴((SP))→dst ⑵(SP)+2→SP操作數尋址:dst=mem|reg|segreg例如: PUSH AX ;AX→(SS:SP) PUSH [BX] ;(DS:BX)→(SS:SP) POP CX ;(SS:SP)→CX PUSH CL ;錯誤,堆棧操作必須是字類型數據 POP 200 ;錯誤,立即數不能是堆棧操作數據堆棧操作指令交換指令XCHG格式:XCHGopr1,opr2操作:(opr1)←→(opr2)操作數尋址:opr1=reg opr2=reg|mem注意:不可以直接把兩個內存數據交換。例如: MOVAX,[2000H] ;(DS:2000H)→AX XCHGAX,[BX] ;AX和(DS:BX)交換 MOV[2000H],AX ;AX→(DS:2000H)數據交換指令查表換碼指令XLAT格式:XLAT ;無操作數操作:AL←DS:(BX+AL) ;隱含操作數尋址注意:BX為表頭的EA,AL是距離表頭的位移量。表最大容量為256個字節(jié)。例如:MEM DB ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’ MOVBX,OFFSETMEM

或LEABX,MEM

MOVAL,2

XLAT ;AL=43H(‘C’的ASCII碼值)查表換碼指令XLAT指令用法舉例若(DS)=2000H,(BX)=0020H,(AL)=9H,則執(zhí)行指令XLAT后,(AL)=39H。裝偏移指令LEA格式:LEAdst,src操作:src的偏移址→dst操作數尋址:dst=reg src=mem例如:MEMDB ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’

LEABX,MEM ;BX取MEM數據表頭的EA(等同于:MOVBX,OFFSETMEM

) MOVAL,[BX+2] ;AL=43H(‘C’的ASCII碼值)裝偏移地址指令輸入/輸出(I/O)指令◆I/O接口指令的語句格式:

IN

AL,〈端口地址〉

OUT〈端口地址〉,AL

◆I/O接口指令的端口地址16位,地址范圍為0000H~FFFFH。若端口地址為00H~FFH(0~255),可以直接給出;超出該范圍的端口地址必須存放在DX寄存器,間接給出。例如:

IN

AL,80H ;與MOVAL,80H

的區(qū)別

OUT20H,AL ;與MOV[20H],AL

的區(qū)別

MOVDX,100H ;DX=100H OUTDX,AL ;與MOVDX,AX

的區(qū)別

INAL,[80H] ;錯誤,端口尋址不能用方括號(1)取標志指令LAHF格式:LAHF該指令中的源操作數隱含為標志寄存器低8位,目標操作數隱含為AH。功能:把16位的標志寄存器低8位送寄存器AH。(2)置標志指令SAHF格式:SAHF該指令中的源操作數隱含為AH,目標操作數隱含為標志寄存器。功能:把寄存器AH中內容送至16位的標志寄存器低8位,此操作是LAHF的逆操作。標志傳送指令【例3-1】

編寫匯編程序段,把標志寄存器的CF位求反,其他位不變。LAHF ;取標志寄存器的低8位XORAH,01H ;最低位求反,其他位不變SAHF ;送入標志寄存器的低8位OF111512DF10IF9TF8SF7ZF65AF43PF21CF0(3)標志入棧指令PUSHF格式:PUSHF該指令中的源操作數隱含為標志寄存器,目標操作數隱含為堆棧區(qū)。功能:標志寄存器入棧。(4)標志彈出指令POPF格式:POPF該指令中的源操作數隱含為堆棧區(qū),目標操作數隱含為標志寄存器。功能:數據出棧到標志寄存器?!纠?-2】

編寫匯編程序段,把標志寄存器TF位清零,其他標志位不變。PUSHF ;標志寄存器入棧POPAX ;取標志寄存器內容ANDAX,0FEFFH ;TF清零,其他位不變PUSHAX ;新值入棧POPF ;送入標志寄存器OF111512DF10IF9TF8SF7ZF65AF43PF21CF0◆算術運算類指令一共有20條,分成加、減、乘、(整)除指令和BCD碼調整指令五組。這里主要介紹加、減、乘、除14條指令:

ADD

加法 ADC

進位加 INC

加1

SUB

減法 SBB

借位減 DEC

減1

CMP

比較 NEG

求補

MUL無符號乘法 IMUL

有符號乘法

DIV

無符號除法 IDIV

有符號除法

CBW

字節(jié)符號擴展 CWD

字符號擴展◆算術運算類指令基本都均影響標志位(ZF、SF、CF、OF)。◆絕大多數是雙操作數,操作數可為字節(jié)/字類型?!魧ぶ贩绞脚cMOV指令基本相同。2.算術運算指令類加法指令ADD格式:ADDdst,src ;(dst)+(src)→dst進位加指令ADC格式:ADCdst,src ;(dst)+(src)+CF→dst加1指令INC格式:INCdst ;(dst)+1→dst操作數尋址方式:

dst src

reg reg|mem|data

mem reg|data加法運算指令減法指令SUB格式:SUBdst,src ;(dst)-(src)→dst借位減指令SBB格式:SBBdst,src ;(dst)-(src)-CF→dst減1指令DEC格式:DEC dst ;(dst)-1→dst操作數尋址方式:

dst src

reg reg|mem|data

mem reg|data減法運算指令比較指令CMP格式:CMPdst,src操作:(dst)-(src),僅根據計算結果設置相關標志位。求補指令NEG格式:NEG dst操作:0-(dst)→dst ;求互補碼例如:計算 12345678H+80A7FD28HMOVDX,1234HMOVAX,5678H ;DX|AX=12345678HADDAX,0FD28HADCDX,80A7H ;DX|AX=92DC53A0H減法運算指令無符號乘法指令MUL 有符號乘法指令IMUL格式:MULsrc IMULsrc操作數尋址:src=reg|mem操作:有/無符號數的乘法

字節(jié)乘法:(AL)×(src)→AX

字乘法:(AX)×(src)→DX|AX(32位)標志位:ZF,SF無定義。乘積的高階部分如果非0,OF,CF均被置1。例如: 無符號數字節(jié)乘法0FFH×1=00FFH

有符號數字節(jié)乘法0FFH×1=0FFFFH乘法運算指令無符號除法指令DIV 有符號除法指令IDIV格式:DIV src IDIV src操作數尋址:src=reg|mem操作:有/無符號數的除法字節(jié)除法:(AX)/(src)→AL(商),AH(余數)字除法:(DX|AX)/(src)→AX(商),DX(余數)注意:1.除法可能有0作除數錯誤;商超出字節(jié)/字范圍的溢出錯誤。2.有符號數除法的余數與被除數的符號相同。除法運算指令符號擴展指令CBW和CWD格式:CBW ;把有符號數AL擴展為AX

CWD ;把有符號數AX擴展為DX|AX操作數:隱含尋址(AL/AX/DX)標志位:不改變。例如:

MOV AL,07FH

CBW ;AX=007FH MOV AX,8003H

CWD ;AX=8003H,DX=0FFFFH符號擴展指令例如: MUL AH ;無符號數(AL)×(AH)→AX IMUL AL ;有符號數(AL)×(AL)→AX MUL BX ;無符號數(AX)×(BX)→DX|AX MULwordptr[BX];(AX)×((BX))→DX|AX例如:計算30200除以1500。

MOV AX,30200 ;AX=30200

CWD ;AX擴展為DX|AX MOV BX,1500

DIV BX ;AX=20(商),DX=200(余數)例如,如果AX=0010H(+16),BL=0FDH(-3) IDIVBL ;AX=01FBH,商=-5,余數=1乘/除法指令應用例【例3-3】

編寫匯編程序段,計算:(V-(X*Y+Z-100))/X。已知:X、Y、Z、V均為16位符號數,已分別裝入X、Y、Z、V單元中,要求將上式計算結果的商存入AX,余數存入DX。MOVAX,X ;取被乘數XIMULY ;X*Y,結果在DX、AX中MOVCX,AX ;將乘積存在BX、CX中MOVBX,DXMOVAX,Z ;取被加數ZCWD;將符號擴展后的Z加到BX、CX中的乘積上ADDCX,AXADCBX,DXSUBCX,100SBBBX,0 ;從BX、CX中減去100MOVAX,VCWDSUBAX,CX;從符號擴展后的V中減去(BX、CX)SBBDX,BX;并除以X,商在AX中,余數在DX中IDIVX【例3-4】

編寫匯編程序段,用壓縮BCD碼編碼并計算37D-19D。MOVAL,37HSUBAL,19H ;AL=1EH,AF=1,CF=0DAS ;AL=18H,AF=1通過DAS這條指令來確認上述減法計算為十進制運算3.邏輯運算和移位指令◆邏輯運算和移位類指令是以2#數位為單位的“位操作”指令,邏輯運算指令5條,移位指令8條。NOT

邏輯非 AND

邏輯與 OR

邏輯或XOR

邏輯異或 TEST

位測試SHL

邏輯左移 ROL

循環(huán)左移 SHR

邏輯右移 ROR

循環(huán)右移SAL

算術左移 RCL

帶進位循環(huán)左移SAR

算術右移 RCR

帶進位循環(huán)右移◆操作數可為字節(jié)/字類型,按位進行邏輯運算?!舳鄶登闆r不改變標志位。邏輯運算指令邏輯非指令NOT格式:NOT dst ;求(dst)的互反碼邏輯與指令AND邏輯或指令OR邏輯異或指令XOR格式:ANDdst,src 操作:(dst)∧(src)→dstOR dst,src(dst)∨(src)→dst XOR dst,src(dst)⊕(src)→dst測試指令TEST格式:TESTdst,src操作:(dst)∧(src);不保存結果,僅改變標志位【例3-5】

編寫匯編程序段,將寄存器AX清零。

XORAX,AX還有哪些可以將AX清零的指令?比較之。指令時鐘數指令字節(jié)數8088286386486PentiumMOVAX,0432112ANDAX,0432113XORAX,AX322112SUBAX,AX322113MOVBL,0MULBL432112143213842113移位指令邏輯左移SHL

邏輯右移 SHR算術左移SAL

算術右移 SAR循環(huán)左移ROL

循環(huán)右移 ROR帶進位循環(huán)左移RCL

帶進位循環(huán)右移RCR格式:<移位指令>dst,cnt操作數尋址:dst是移位的對象,dst=reg|mem cnt是移位的位數,cnt=1|CL標志位:ZF和SF,指明移位結果的設置。

CF:左移取自dst最高位,右移取自dst的D0位。移位指令移位指令可以對寄存器或存儲單元的內容按字節(jié)或字進行操作。循環(huán)移位指令【例3-6】

設無符號數X在寄存器AL中,用移位指令實現X*10的運算。MOVAH,0SALAX,1 ;AX←數X*2MOVBX,AX MOVCL,2SALAX,CL ;AX←數X*8ADDAX,BX ;AX←數X*10例:設AL=01010100B,CF=1,CL=4,則:ROLAL,1 ;AL=10101000B,CF=0,OF=1RORAL,1 ;AL=00101010B,CF=0,OF=0RCLAL,1 ;AL=10101001B,CF=0,OF=1RCRAL,CL ;AL=10010101B,CF=0,OF無定義邏輯運算和移位指令應用例

ANDAL,50H ;AL=(AL)∧50H ORAX,[8080H] ;AX=(AX)∨(DS:8080H)

XORAX,AX ;AX=0,CF=0 ANDAL,0FH ;AL高4位清0,低4位保留 ORAL,0FH ;AL高4位保留,低4位置1 XORAL,0FH ;AL高4位保留,低4位取反;AX乘以10MOVDX,0SAL AX,1RCLDX,1MOV BX,AXMOVCX,DX;雙字算術右移SAR DX,1RCR AX,1

DXCFAXCFSARDX,1RCRAX,1SAL AX,1

RCLDX,1SAL AX,1RCLDX,1

ADD AX,BXADCDX,CX6.處理器控制指令◆標志位設置指令:CLC CF=0 STC CF=1 CMCCF取反CLD DF=0 STD DF=1CLI IF=0 STI IF=1◆CPU控制指令:NOP

無操作(空操作) HLT

停機(暫停,等待外部中斷,中斷后恢復運行)WAIT

等待(等待測試信號TEST,恢復運行)4.串操作指令所謂“串”是指一組數據。串操作指令的操作對象不是一字節(jié)或一個字,而是內存中地址連續(xù)的一組字節(jié)或一組字。在默認的情況下,串操作指令的源串存于數據段,目標串存于附加段。在每一次基本操作后,能夠自動修改源及目標地址為下一次操作做好準備。串操作指令前通常加上重復前綴,此時,基本操作在滿足條件的情況下得到重復,直至完成預設次數。(1)基本串操作指令(1)串傳送指令格式一:MOVSdst,src格式二:MOVSB格式三:MOVSW功能:(ES:DI)←(DS:SI);SI←SI+1/2;DI←DI+1/2MOVS指令使用說明格式一中的dst,src僅為了增加程序的可讀性。字節(jié)操作時,使用格式二,地址調整量是1;字操作時,使用格式三,地址調整量是2。地址是增或減由標志位DF決定:DF=0,地址增;DF=1,地址減。尋址方式規(guī)定為寄存器間接尋址:源操作數隱含為數據段,偏移地址由寄存器SI指明,允許段超越。目標操作數隱含為附加段,偏移地址由寄存器DI指明,不允許段超越。(2)串裝入指令格式一:LODSsrc格式二:LODSB格式三:LODSW 功能:AL←(DS:SI);SI←SI+1/2 (3)串送存指令格式一:STOSdst格式二:STOSB格式三:STOSW 功能:(ES:DI)←AL;DI←DI+1/2 (4)串比較指令格式一:CMPSsrc,dst格式二:CMPSB格式三:CMPSW 功能:(DS:SI)-(ES:DI);SI←SI+1/2;DI←DI+1/2(5)串掃描指令格式一:SCASdst格式二:SCASB格式三:SCASW 功能:AL/AX-(ES:DI);DI←DI+1/2說明:指令STD、CLD用于設置方向標志。STD使DF為1,CLD使DF為0。(2)重復前綴指令基本串操作指令完成一個數據的操作,如果要操作一組數據,就需要在基本串操作指令前加上重復前綴。重復前綴指明該指令的基本操作是否被重復、重復的條件是什么?;静僮鞯闹貜痛螖惦[含在寄存器CX中。(1)無條件重復前綴指令格式:REP功能:REP前綴加在串指令MOVS、STOS之前,控制串指令重復執(zhí)行。串指令重復執(zhí)行的次數保存在寄存器CX中。每執(zhí)行一次串指令,CX←(CX)-1,直到CX=0為止。(2)相等重復前綴指令格式一:REPE格式二:REPZ功能:REPZ或REPE前綴加在串指令CMPS、SCAS指令前,控制串指令重復執(zhí)行。當(CX)≠0且ZF=1時,串指令重復執(zhí)行;當(CX)=0或ZF=0時,串指令重復執(zhí)行結束。(3)不相等重復前綴REPNE或REPNZ格式一:REPNE格式二:REPNZ功能:REPNZ或REPNE前綴加在串指令CMPS、SCAS指令前,控制串指令重復執(zhí)行。當(CX)≠0且ZF=0時,串指令重復執(zhí)行;當(CX)=0或ZF=1時,串指令重復執(zhí)行結束。說明:帶前綴的串操作指令執(zhí)行后,CX-1操作不影響標志位?!纠?-7】

編寫匯編程序段,把自SAREA開始的100個字復制到DAREA開始的區(qū)域中。DATA1SEGMENTSAREADW……DATA1ENDSDATA2SEGMENTDAREADW……DATA2ENDSCODESEGMENTASSUMECS:CODE,DS:DATA1,ES:DATA2(1)源、目標區(qū)沒有重疊MOVAX,SEGSAREA ;MOVDS,AX;源區(qū)段地址送段寄存器DSMOVAX,SEGDAREA MOVES,AX;目標區(qū)段地址送段寄存器DSLEASI,SAREA;源區(qū)首字的偏移地址送SILEADI,DAREA ;目標區(qū)首字的偏移地址送DIMOVCX,100;串長送寄存器CXCLD;DF=0,地址增REPMOVSW;串傳送(2)源、目標區(qū)有重疊MOVCX,100 ;串長送寄存器CXMOVAX,SEGSAREAMOVDS,AX ;源區(qū)段地址送DSMOVAX,SEGDAREAMOVES,AX;目標區(qū)段地址送ESLEASI,SAREAADDSI,CX;源區(qū)末字的偏移地址送SILEADI,DAREAADDDI,CX;目標區(qū)末字的偏移地址送DISTD;DF=1,地址減REPMOVSW;串傳送【例3-8】

編寫匯編程序段,將內存DS:2100~DS:210F存儲區(qū)清0。MOVES,DS ;目標段段地址送ESMOVDI,2100;目標段首字節(jié)偏移地址送DIMOVCX,10H ;串長送寄存器CXCLD;設置方向增MOVAL,0REPSTOSB ;重復串送存5.控制轉移指令8086程序的執(zhí)行順序由代碼段寄存器CS和指令指針寄存器IP的值決定。程序可以按順序執(zhí)行,也可以根據情況改變程序的執(zhí)行順序??刂妻D移指令就是通過改變CS和IP的值來實現程序的轉移。控制轉移指令根據程序轉移地址的不同,分為段內轉移和段間轉移。段內轉移是指程序在同一代碼段內轉移,這時只要改變IP的值。段間轉移指程序將轉移到其他段,此時CS和IP的值同時改變。(1)無條件轉移指令無條件轉移指令執(zhí)行后,程序無條件轉移到段內由指令中給出的目標地址處。A.段內直接轉移指令格式一:JMP標號格式二:JMP立即數指令完成的操作:IP←(IP)+以標號或立即數給出的偏移量,(CS)不變。例如:JMP2010H ;IP←2010HJMPSHORT L ;IP←(IP)+8位移量JMPNEAR NEXT ;IP←(IP)+16位移量B.段內間接轉移指令格式一:JMP寄存器格式二:JMP存儲單元指令完成的操作:(IP)←寄存器或存儲單元的值,(CS)不變。例如:JMPBX ;IP←(BX)JMPWORDPTR[SI] ;IP←(DS:SI)C.段間直接轉移格式:JMP FAR PTR標號指令完成的操作:(IP)←標號所在存儲單元的偏移地址,(CS)←標號所在存儲單元的段地址。例如:JMPFARPTRNEXT ;(IP)←標號NEXT的偏移地址 ;(CS)←標號NEXT的段地址D.段間間接轉移格式:JMPDWORDPTR存儲單元指令完成的操作:(IP)←標號指出的雙字存儲單元的低16位,(CS)←標號給出的雙字存儲單元的高16位。例如:JMPDWORDPTR[SI] ;IP←(DS:SI),CS←(DS:SI+2)(2)條件轉移指令格式:Jcc標號功能:以標志位的狀態(tài)作為轉移依據。如果滿足轉移條件,則轉移到標號指示的指令處;否則,順序執(zhí)行下一條指令。說明:cc代表跳轉條件,short-label表明該指令只能實現段內短轉移,參數形式通常為符號地址。條件轉移指令(1)操作符功能測試條件JC進位標志為1轉移CF=1JNC進位標志為0轉移CF=0JZ/JE等于0/相等轉移ZF=1JNZ/JNE不等于0/不相等轉移ZF=0JS符號標志為1轉移SF=1JNS符號標志為0轉移SF=0JO溢出轉移OF=1JNO無溢出轉移OF=0JP/JPE偶狀態(tài)轉移PF=1JNP/JPO奇狀態(tài)轉移PF=0JCXZCX=0轉移CX=0條件轉移指令(2)比較情況無符號數有符號數指令判斷條件指令判斷條件

A>BJAZF=0,CF=0JGSF=OFJNBEJNLE且

ZF=0

A>=BJAEZF=1或JGESF=OFJNBCF=0JNL或ZF=1A<BJBZF=0,CF=1JLSF<>OFJNAEJNGE且ZF=0

A<=BJBEZF=1或JLESF<>OFJNACF=1JNG或ZF=1二分支程序設計示例【例3.9】把有符號字節(jié)數X和Y的較大者送入變量Z。;字節(jié)變量X和Y比較程序段:

…… MOV AL,X ;AL=X CMP AL,Y ;AL(即X)和Y比較

JGE YG ;X>=Y,轉YG MOVAL,Y ;X<Y,AL=YYG: MOV Z,AL ;較大者存放到Z單元 …… 多分支程序設計示例【例3.10】

求X字節(jié)變量數據的符號函數(3分支)。

;求字節(jié)變量符號函數程序段(X=0,AL=0;X>0,AL=1;X<0,AL=-1)

MOV AL,X CMP AL,0 ;X與0比較

JZ ZERO ;為0,轉ZERO

JS NEGA ;為負,轉NEGA MOV AL,1 ;為正,AL=1

JMP OK ;轉公共出口OK

ZERO: MOV AL,0 ;AL=0

JMP OK ;轉公共出口OK NEGA: MOV AL,0FFH ;AL=-1

OK: MOV Y,AL ;符號函數值存放到Y單元(3)循環(huán)控制指令循環(huán)控制指令用于控制程序重復執(zhí)行。循環(huán)控制指令提供了程序段循環(huán)的控制及手段。循環(huán)控制指令都用CX寄存器作為循環(huán)次數計算器,表示某程序段的最大循環(huán)次數,且循環(huán)體每執(zhí)行一次,CX被減去1。8088/8086CPU規(guī)定:被循環(huán)的程序段必須在同一段內,且長度不能大于256字節(jié)。循環(huán)控制指令不影響標志位。

循環(huán)指令格式:指令碼標號;(CX中存放循環(huán)次數)操作符操作功能LOOPCX<--(CX)-1循環(huán)

若(CX)<>0,則循環(huán)LOOPZCX<--(CX)-1當CX不為零且LOOPE若(CX)<>0且ZF=1,則循環(huán)相等時循環(huán)

LOOPNZCX<--(CX)-1當CX不為零且LOOPNE若(CX)<>0且ZF=0,則循環(huán)不相等時循環(huán)

A.循環(huán)指令格式:LOOP目標地址

功能:①CX←CX-1②如果CX=0,結束循環(huán),執(zhí)行后續(xù)語句;否則:③轉移到標號處,循環(huán)體被重復。B.相等循環(huán)指令格式:LOOPZ/LOOPE目標地址

功能:①CX←CX-1②如果CX=0或ZF=0,結束循環(huán),執(zhí)行后續(xù)語句;否則:③轉移到標號處,循環(huán)體被重復。C.不相等循環(huán)指令格式:LOOPNZ/LOONE目標地址

功能:①CX←CX-1②如果CX=0或ZF=1,結束循環(huán),執(zhí)行后續(xù)語句;否則:③轉移到標號處,循環(huán)體被重復。【例3-11】

在首地址為Array的存儲區(qū)域已存入長度為M的字數組,編寫匯編程序段,統(tǒng)計該數組中0元素的個數,統(tǒng)計結果存入Result單元。

MOV CX,M

MOV Result,0

MOV SI,0AGAIN:

MOV AX,Array[SI]

CMP AX,0

JNZ NEXT

INC Result

NEXT:

ADD SI,2

LOOP AGAIN ;進入下一輪循環(huán)LOOPAGAIN等效于下列語句:DECCXJNZAGAIN但是,LOOP指令中完成CX←CX-1的操作不影響標志位,而DEC指令則對標志位有影響。循環(huán)程序設計【例3.12】

把存儲器中N個字節(jié)數據“搬家”。

;“搬家”程序段:

MOV AX,DATA MOV DS,AX ;設置DS數據段基址

LEA SI,BLKS LEA DI,BLKD

MOV CX,N ;CX=N LOP1:MOV AL,[SI] ;取一個數

MOV [DI],AL ;“搬”一個數

INC SI INC DI ;SI和DI分別做+1修改

LOOP LOP1 ;CX1≠0

,循環(huán)“搬”數循環(huán)程序設計【例3.13】

計算

SUM=a1b1+a2b2……

+a10b10

。;內存數據定義a db89,5,56,80…… ;10個數據b db18,29,12,38…… ;10個數據sum dw?;計算SUM程序段

……

mov dx,0 mov si,0 mov cx,10lop1: mov al,a[si] mul b[si] add dx,ax inc si

loop lop1 mov sum,dx ……循環(huán)程序設計【例3.14】ARR數據區(qū)有N個有符號字節(jié)數(ARR數組)。求ARR數組的最大值、最小值、數組元素之和,以及數據平均值。

ARR db89,-90,56,88……n equ$-ARR ;n=數據個數

max db-128 ;預先放最小值-128

min db127 ;預先放最大值127

sum dw0 ;預先放求和初值0ping db? ;平均值;程序段

……

LEA BX,ARR MOV CX,npp1: MOV AL,[BX] CBW ADD sum,AX CMP max,AL JGE p1 MOV max,ALp1:

CMP min,AL JLE p2 MOV min,ALp2: INC BX

LOOPpp1 MOV AX,sum MOV CL,n IDIV CL ;al=平均值

MOV ping,AL ……(4).過程調用與返回指令需要反復被調用的具有一定功能的程序段可以被設計成過程(也稱為子程序),以供需要時調用。在過程中需要安排返回指令,使得過程結束時,返回到調用處。過程與調用程序在同一段內,稱“段內調用”;過程與調用程序不在同一段內,稱“段間調用”。過程調用指令CALL和返回指令RET均不影響標志位,但影響堆棧內容。A.過程調用指令段內直接調用指令格式:CALL過程名指令完成的操作:①(SP)←(SP)-2;②(SS:SP)←(IP);③(IP)←(IP)+16位偏移量。段內間接調用指令格式:CALL寄存器指令完成的操作:①(SP)←(SP)-2;②(SS:SP)←(IP);③(IP)←寄存器的值。段間直接調用指令格式:CALLFARPTR過程名指令完成的操作:①(SP)←(SP)-2;②(SS:SP)←(CS);③(SP)←(SP)-2;④(SS:SP)←(IP);⑤(IP)←過程入口偏移地址;⑥(CS)←過程入口段地址。段間間接調用指令格式:CALLDWORDPTR存儲單元地址指令完成的操作:①(SP)←(SP)-2;②(SS:SP)←(CS);③(SP)←(SP)-2;④(SS:SP)←(IP);⑤(IP)←雙字存儲單元低16位數據;⑥(CS)←雙字存儲單元高16位數據。B.過程返回指令無參數段內返回格式:RET指令完成的操作:①(IP)←(SS:SP);

②(SP)←(SP)+2。RET子程序返回指令格式功能操作RET段內返回IP<--((SP)+1,(SP))SP<--(SP)+2

RET段間返回IP<--((SP)+1,(SP))SP<--(SP)+2CS<--((SP)+1,(SP))SP<--(SP)+2

RETEXP帶立即數返回在上述操作之后再做

SP<--(SP)+EXP有參數段內返回格式:RETn指令完成的操作:①(IP)←(SS:SP);

②(SP)←(SP)+2+n。無參數段間返回格式:RET指令完成的操作:①(IP)←(SS:SP);

②(SP)←(SP)+2。③(CS)←(SS:SP);

④(SP)←(SP)+2。有參數段間返回格式:RET指令完成的操作:①(IP)←(SS:SP);

②(SP)←(SP)+2。③(CS)←(SS:SP);

④(SP)←(SP)+2+n。(5)中斷指令中斷是輸入/輸出程序設計中常用的控制方式,是指計算機暫時停止當前正在執(zhí)行的程序而轉去執(zhí)行處理某事件的中斷服務程序。當中斷服務程序執(zhí)行完后,再恢復執(zhí)行被暫時停止的程序。常用的軟件中斷中斷號功能中斷號功能10H視頻服務中斷13H軟硬盤控制中斷14H串行口中斷15H各種IO設備中斷16H鍵盤中斷17H并行打印口中斷20H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論