微機(jī)原理第03章4程序控制類.ppt
《微機(jī)原理第03章4程序控制類.ppt》由會員分享,可在線閱讀,更多相關(guān)《微機(jī)原理第03章4程序控制類.ppt(50頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
第3章(4),第3章:3.6 控制轉(zhuǎn)移類指令,控制轉(zhuǎn)移類指令用于實(shí)現(xiàn)分支、循環(huán)、過程等程序結(jié)構(gòu),是僅次于傳送指令的常用指令 重點(diǎn)掌握: JMP/Jcc/LOOP/JCXZ CALL/RET INT n/IRET 常用系統(tǒng)功能調(diào)用,控制轉(zhuǎn)移類指令通過改變IP(和CS)值,實(shí)現(xiàn)程序執(zhí)行順序的改變,第3章:目標(biāo)地址的尋址方式,相對尋址方式 指令代碼中提供目的地址相對于當(dāng)前IP的位移量,轉(zhuǎn)移到的目的地址(轉(zhuǎn)移后的IP值)就是當(dāng)前IP值加上位移量 直接尋址方式 指令代碼中提供目的邏輯地址,轉(zhuǎn)移后的CS和IP值直接來自指令操作碼后的目的地址操作數(shù) 間接尋址方式 指令代碼中指示寄存器或存儲單元,目的地址從寄存器或存儲單元中間接獲得,用標(biāo)號表達(dá),用標(biāo)號表達(dá),用寄存器或存儲器操作數(shù)表達(dá),第3章:目標(biāo)地址的尋址范圍:段內(nèi)尋址,段內(nèi)轉(zhuǎn)移——近轉(zhuǎn)移(near) 在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移( 32KB范圍) 不需要更改CS段地址,只要改變IP偏移地址 段內(nèi)轉(zhuǎn)移——短轉(zhuǎn)移(short) 轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)-128~+127范圍的轉(zhuǎn)移,第3章:目標(biāo)地址的尋址范圍:段間尋址,段間轉(zhuǎn)移——遠(yuǎn)轉(zhuǎn)移(far) 從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,可以在1MB范圍 需要更改CS段地址和IP偏移地址 目標(biāo)地址必須用一個(gè)32位數(shù)表達(dá),叫做32位遠(yuǎn)指針,它就是邏輯地址,代碼段,,,代碼段,實(shí)際編程時(shí),匯編程序會根據(jù)目標(biāo)地址的屬性,自動處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移 程序員可用操作符short、near ptr 或far ptr 強(qiáng)制成為需要的轉(zhuǎn)移類型,第3章:3.6.1 無條件轉(zhuǎn)移指令,只要執(zhí)行無條件轉(zhuǎn)移指令JMP,就使程序轉(zhuǎn)到指定的目標(biāo)地址,從目標(biāo)地址處開始執(zhí)行指令 操作數(shù)label是要轉(zhuǎn)移到的目標(biāo)地址(目的地址、轉(zhuǎn)移地址) JMP指令分成4種類型: ⑴ 段內(nèi)轉(zhuǎn)移、相對尋址 ⑵ 段內(nèi)轉(zhuǎn)移、間接尋址 ⑶ 段間轉(zhuǎn)移、直接尋址 ⑷ 段間轉(zhuǎn)移、間接尋址,JMP label ;程序轉(zhuǎn)向label標(biāo)號指定的地址,第3章:無條件轉(zhuǎn)移指令JMP(jump),JMP label ;段內(nèi)轉(zhuǎn)移、相對尋址 ;IP←IP+位移量 JMP r16/m16 ;段內(nèi)轉(zhuǎn)移、間接尋址 ;IP←r16/m16 JMP far ptr label ;段間轉(zhuǎn)移、直接尋址 ;IP←偏移地址,CS←段地址 JMP far ptr mem ;段間轉(zhuǎn)移,間接尋址 ;IP←[mem],CS←[mem+2],演示,演示,演示,演示,演示,第3章:3.6.2 條件轉(zhuǎn)移指令,條件轉(zhuǎn)移指令Jcc根據(jù)指定的條件確定程序是否發(fā)生轉(zhuǎn)移。其通用格式為: Jcc label ;條件滿足,發(fā)生轉(zhuǎn)移 ;IP←IP+8位位移量; ;否則,順序執(zhí)行 label是一個(gè)標(biāo)號、一個(gè)8位位移量,表示Jcc指令后的那條指令的偏移地址,到目標(biāo)指令的偏移地址的地址位移 label只支持短轉(zhuǎn)移的相對尋址方式,第3章:Jcc指令的分類,Jcc指令不影響標(biāo)志,但要利用標(biāo)志 根據(jù)利用的標(biāo)志位不同,分成三種情況: ⑴ 判斷單個(gè)標(biāo)志位狀態(tài) ⑵ 比較無符號數(shù)高低 ⑶ 比較有符號數(shù)大小,Jcc指令實(shí)際雖然只有16條,但卻有30個(gè)助記符 采用多個(gè)助記符,目的是為了方便記憶和使用,第3章:1. 判斷單個(gè)標(biāo)志位狀態(tài),⑴ JZ/JE和JNZ/JNE 利用零標(biāo)志ZF,判斷結(jié)果是否為零(或相等) ⑵ JS和JNS 利用符號標(biāo)志SF,判斷結(jié)果是正是負(fù) ⑶ JO和JNO 利用溢出標(biāo)志OF,判斷結(jié)果是否產(chǎn)生溢出 ⑷ JP/JPE和JNP/JPO 利用奇偶標(biāo)志PF,判斷結(jié)果中“1”的個(gè)數(shù)是偶是奇 ⑸ JC/JB/JNAE和JNC/JNB/JAE 利用進(jìn)位標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位,第3章:1. 判斷單個(gè)標(biāo)志位狀態(tài),英文解釋,第3章:例題3.22,題目:將AX中存放的無符號數(shù)除以2,如果是奇數(shù)則加1后除以2 問題:如何判斷AX中的數(shù)據(jù)是奇數(shù)還是偶數(shù)? 解答:判斷AX最低位是“0”(偶數(shù)),還是“1”(奇數(shù))??梢杂梦徊僮黝愔噶?1:用邏輯與指令將除最低位外的其他位變成0,保留最低位不變。判斷這個(gè)數(shù)據(jù)是0,AX就是偶數(shù);否則,為奇數(shù) 2:將最低位用移位指令移至進(jìn)位標(biāo)志,判斷進(jìn)位標(biāo)志是0,AX就是偶數(shù);否則,為奇數(shù) 3:將最低位用移位指令移至最高位(符號位),判斷符號標(biāo)志是0,AX就是偶數(shù);否則,為奇數(shù),第3章:例題3.22解答1 用JZ指令實(shí)現(xiàn),test ax,01h ;測試AX的最低位D0(不用AND指令,以免改變AX) jz even ;標(biāo)志ZF=1,即D0=0:AX內(nèi)是偶數(shù),程序轉(zhuǎn)移 add ax,1 ;否則標(biāo)志ZF=0,即D0=1:AX為奇數(shù)且加1 even: shr ax,1 ;AX←AX2,用右移一位的方法實(shí)現(xiàn)除以2。 本例中用RCR指令比SHR指令更好。,第3章:例題3.22解答2 用JNC指令實(shí)現(xiàn),mov bx,ax shr bx,1 ;將AX的最低位D0移進(jìn)CF jnc even ;標(biāo)志CF=0,即D0=0:AX內(nèi)是偶數(shù),程序轉(zhuǎn)移 add ax,1 ;標(biāo)志CF=1,即D0=1:AX內(nèi)的奇數(shù),加1 even: shr ax,1 ;AX←AX2,還可用SAR、ROR和RCR指令,第3章:例題3.22解答3 用JNS指令實(shí)現(xiàn),mov bx,ax ror bx,1 ;將AX的最低位D0移進(jìn)最高位(符號位SF) jns even ;標(biāo)志SF=0,即D0=0:AX內(nèi)是偶數(shù),程序轉(zhuǎn)移 add ax,1 ;標(biāo)志SF=1,即D0=1:AX內(nèi)的奇數(shù),加1 even: shr ax,1 ;AX←AX2,錯(cuò)誤!循環(huán)指令不影響SF等標(biāo)志,第3章:例3.23 判斷是否為字母Y,;寄存器AL中是字母Y(含大小寫),則令A(yù)H=0,否則令A(yù)H=-1 cmp al,’y’ ;比較AL與小寫字母y je next ;相等,轉(zhuǎn)移 cmp al,’Y’ ;不相等, ;繼續(xù)比較AL與大寫字母Y je next ;相等,轉(zhuǎn)移 mov ah,-1 ;不相等,令A(yù)H=-1 jmp done ;無條件轉(zhuǎn)移指令 next: mov ah,0 ;相等的處理:令A(yù)H=0 done: ……,第2章:例3.24 偶校驗(yàn),;對DL寄存器中8位數(shù)據(jù)進(jìn)行偶校驗(yàn) ;校驗(yàn)位結(jié)果存入CF標(biāo)志 test dl,0ffh ;使CF=0,同時(shí)設(shè)置PF標(biāo)志 jpe done ;DL中“1”的個(gè)數(shù)為偶數(shù) ;正好CF=0,轉(zhuǎn)向done stc ;DL中“1”的個(gè)數(shù)為奇數(shù),設(shè)置CF=1 done: …… ;完成,第3章:2. 比較無符號數(shù)高低,無符號數(shù)的大小用高(Above)、低(Below)表示,需要利用CF確定高低、利用ZF標(biāo)志確定相等(Equal) 兩數(shù)的高低分成4種關(guān)系,對應(yīng)4條指令 JB(JNAE):目的操作數(shù)低于(不高于等于)源操作數(shù) JNB(JAE):目的操作數(shù)不低于(高于等于)源操作數(shù) JBE(JNA):目的操作數(shù)低于等于(不高于)源操作數(shù) JNBE(JA):目的操作數(shù)不低于等于(高于)源操作數(shù),第3章:3. 比較有符號數(shù)大小,判斷有符號數(shù)的大(Greater)、?。↙ess),需要組合OF、SF標(biāo)志、并利用ZF標(biāo)志確定相等與否 兩數(shù)的大小分成4種關(guān)系,分別對應(yīng)4條指令 JL(JNGE):目的操作數(shù)小于(不大于等于)源操作數(shù) JNL(JGE):目的操作數(shù)不小于(大于等于)源操作數(shù) JLE(JNG):目的操作數(shù)小于等于(不大于)源操作數(shù) JNLE(JG):目的操作數(shù)不小于等于(大于)源操作數(shù),第3章:例3.25 求較大值,cmp ax,bx ;比較AX和BX jae next ;若AX≥BX,轉(zhuǎn)移 xchg ax,bx ;若AX<BX,交換 next: mov wmax,ax,如果AX和BX存放的是有符號數(shù), 則條件轉(zhuǎn)移指令應(yīng)采用JGE指令,第3章:例3.25 求較大值(另解),cmp ax,bx ;比較AX和BX jae next mov wmax, bx ;若AX<BX,wmax←BX jmp done next: mov wmax,ax ;若AX≥BX,wmax←AX done: ……,第3章:例3.25 求較大值(另解對比),cmp ax,bx ;比較AX和BX jbe next mov wmax, ax ;若AX>BX,wmax←AX jmp done next: mov wmax,bx ;若AX≤BX,wmax←BX done: ……,第3章:3.6.3 循環(huán)指令,一段代碼序列多次重復(fù)執(zhí)行就是循環(huán) 8088設(shè)計(jì)有針對CX計(jì)數(shù)器的計(jì)數(shù)循環(huán)指令 LOOP label ;循環(huán)指令 ;首先CX←CX-1;然后判斷;若CX≠0,轉(zhuǎn)移 JCXZ label ;為0循環(huán)指令 :如果CX=0,則轉(zhuǎn)移 label操作數(shù)采用相對短尋址方式 還有LOOPZ/LOOPE和LOOPNZ/LOOPNE兩條指令,第3章:例3.26 數(shù)據(jù)塊傳送(字節(jié)),mov cx,400h ;設(shè)置循環(huán)次數(shù):1K=1024=400H mov si,offset sbuf ;設(shè)置循環(huán)初值:SI指向數(shù)據(jù)段源緩沖區(qū)開始 mov di,offset dbuf ;DI指向附加段目的緩沖區(qū)開始(附加段) again: mov al,[si] ;循環(huán)體:實(shí)現(xiàn)數(shù)據(jù)傳送 mov es:[di],al ;每次傳送一個(gè)字節(jié) inc si ;SI和DI指向下一個(gè)單元 inc di loop again ;循環(huán)條件判定:循環(huán)次數(shù)減1,不為0轉(zhuǎn)移(循環(huán)),第3章:例3.26 數(shù)據(jù)塊傳送(字),mov cx,200h ;設(shè)置循環(huán)次數(shù):1K2=200H mov si,offset sbuf ;設(shè)置循環(huán)初值:SI指向數(shù)據(jù)段源緩沖區(qū)開始 mov di,offset dbuf ;DI指向附加段目的緩沖區(qū)開始(附加段) again: mov ax,[si] ;循環(huán)體:實(shí)現(xiàn)數(shù)據(jù)傳送 mov es:[di],ax ;每次傳送一個(gè)字 add si,2 ;指向下一個(gè)(字)單元 add di,2 loop again ;循環(huán)條件判定:循環(huán)次數(shù)減1,不為0轉(zhuǎn)移(循環(huán)),第3章:3.6.4 子程序指令,子程序是完成特定功能的一段程序 當(dāng)主程序(調(diào)用程序)需要執(zhí)行這個(gè)功能時(shí),采用CALL調(diào)用指令轉(zhuǎn)移到該子程序的起始處執(zhí)行 當(dāng)運(yùn)行完子程序功能后,采用RET返回指令回到主程序繼續(xù)執(zhí)行,演示,轉(zhuǎn)移指令有去無回 子程序調(diào)用需要返回, 其中利用堆棧保存返回地址,第3章: 1. 子程序調(diào)用指令CALL,CALL指令分成4種類型(類似JMP) CALL label ;段內(nèi)調(diào)用、直接尋址 CALL r16/m16 ;段內(nèi)調(diào)用、間接尋址 CALL far ptr label ;段間調(diào)用、直接尋址 CALL far ptr mem ;段間調(diào)用、間接尋址 CALL指令需要保存返回地址: 段內(nèi)調(diào)用——入棧偏移地址IP SP←SP-2,SS:[SP]←IP 段間調(diào)用——入棧偏移地址IP和段地址CS SP←SP-2,SS:[SP]←CS SP←SP-2,SS:[SP]←IP,第3章: 2. 子程序返回指令RET,根據(jù)段內(nèi)和段間、有無參數(shù),分成4種類型 RET ;無參數(shù)段內(nèi)返回 RET i16 ;有參數(shù)段內(nèi)返回 RET ;無參數(shù)段間返回 RET i16 ;有參數(shù)段間返回 需要彈出CALL指令壓入堆棧的返回地址 段內(nèi)返回——出棧偏移地址IP IP←SS:[SP], SP←SP+2 段間返回——出棧偏移地址IP和段地址CS IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2,第3章:例3.27 十六進(jìn)制轉(zhuǎn)換為ASCII碼的子程序,;子程序:將DL低4位的一位16進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼 htoasc proc and dl,0fh ;只取DL的低4位 or dl,30h ;DL高4位變成3 cmp dl,39h ;是0~9,還是0Ah~0Fh ? jbe htoend ;是0~9,轉(zhuǎn)移 add dl,7 ;是0Ah~0Fh,加上7 htoend: ret ;子程序返回 htoasc endp,轉(zhuǎn)換原理,;主程序:調(diào)用子程序 mov dl,28h call htoasc,第3章:3.6.5 中斷指令,中斷(Interrupt)是又一種改變程序執(zhí)行順序的方法 8088CPU支持256個(gè)中斷,每個(gè)中斷用一個(gè)編號(中斷向量號)區(qū)別 中斷指令有3條: INT i8 IRET INTO 本節(jié)主要掌握類似子程序調(diào)用指令的中斷調(diào)用指令I(lǐng)NT i8,進(jìn)而掌握系統(tǒng)功能調(diào)用,第3章:中斷指令,INT i8 ;中斷調(diào)用指令:產(chǎn)生i8號中斷 ;主程序使用,其中i8表示中斷向量號 IRET ;中斷返回指令:實(shí)現(xiàn)中斷返回 ;中斷服務(wù)程序使用,第3章:3.7 處理器控制類指令,處理器控制類指令用來控制CPU的狀態(tài),使CPU暫停、等待或空操作等 對標(biāo)志位進(jìn)行設(shè)置的指令 CLC STC CMC CLD STD CLI STI 對CPU狀態(tài)進(jìn)行控制的指令 NOP CS: SS: DS: ES: LOCK HLT ESC WAIT,空操作指令NOP,不執(zhí)行任何操作,但占用一個(gè)字節(jié)存儲單元,空耗一個(gè)指令執(zhí)行周期 NOP常用于程序調(diào)試 在需要預(yù)留指令空間時(shí)用NOP填充 代碼空間多余時(shí)也可以用NOP填充 還可以用NOP實(shí)現(xiàn)軟件延時(shí) 事實(shí)上,NOP和XCHG AX,AX的指令代碼一樣,都是 90H,封鎖前綴指令LOCK,LOCK ;封鎖總線 這是一個(gè)指令前綴,可放在任何指令前 這個(gè)前綴使得在這個(gè)指令執(zhí)行時(shí)間內(nèi),8086 處理器的封鎖輸出引腳有效,即把總線封鎖,使別的控制器不能控制總線;直到該指令執(zhí)行完后,總線封鎖解除,暫停指令HLT,HLT ;進(jìn)入暫停狀態(tài) 暫停指令使CPU進(jìn)入暫停狀態(tài),這時(shí)CPU不進(jìn)行任何操作。當(dāng)CPU發(fā)生復(fù)位或來自外部的中斷時(shí),CPU脫離暫停狀態(tài) HLT指令可用于程序中等待中斷。當(dāng)程序中必須等待中斷時(shí),可用HLT,而不必用軟件死循環(huán)。然后,中斷使CPU脫離暫停狀態(tài),返回執(zhí)行HLT的下一條指令,交權(quán)指令 ESC,ESC 6位立即數(shù),reg/mem ;把浮點(diǎn)指令交給浮點(diǎn)處理器執(zhí)行 浮點(diǎn)協(xié)處理器8087指令是與8086的整數(shù)指令組合在一起的,當(dāng)8086發(fā)現(xiàn)是一條浮點(diǎn)指令時(shí),就利用ESC指令將浮點(diǎn)指令交給8087執(zhí)行 實(shí)際編寫程序時(shí),一般采用易于理解的浮點(diǎn)指令助記符格式 ESC 6,[SI] ;實(shí)數(shù)除法指令:FDIV dword ptr [SI] ESC 20H,AL ;整數(shù)加法指令:FADD ST(0),ST,等待指令WAIT,WAIT ;進(jìn)入等待狀態(tài) 8086利用WAIT指令和測試引腳實(shí)現(xiàn)與8087同步運(yùn)行 浮點(diǎn)指令經(jīng)由8086處理發(fā)往8087,并與8086本身的整數(shù)指令在同一個(gè)指令序列;而8087執(zhí)行浮點(diǎn)指令較慢,所以8086必須與8087保持同步,第3章:總結(jié),本章展開了8088CPU16位指令系統(tǒng)的常用指令 希望大家就如下幾個(gè)方面進(jìn)行一下總結(jié): 操作數(shù)尋址方式和目的地址尋址方式 指令支持的操作數(shù)形式 常用指令的助記符和功能 指令對標(biāo)志的影響 通過復(fù)習(xí)整理,形成指令系統(tǒng)的整體概念,進(jìn)而掌握常用指令,指令執(zhí)行,第3章:教學(xué)要求,了解微處理器基本結(jié)構(gòu)、8088/8086的功能結(jié)構(gòu) 掌握8088/8086的寄存器結(jié)構(gòu)、存儲器結(jié)構(gòu)和尋址方式 熟悉匯編語言的語句格式,掌握8088/8086基本指令: 數(shù)據(jù)傳送:MOV/XCHG/XLAT、PUSH/POP、LEA 加減運(yùn)算:ADD/SUB、ADC/SBB、CMP、INC/DEC 位操作:AND/OR/XOR/NOT/TEST、SHL/SHR/SAR、ROL/ROR/RCL/RCR 控制轉(zhuǎn)移:JMP/Jcc/LOOP、CALL/RET、INT n 掌握DOS字符/字符串輸出功能調(diào)用方法,目的地址相對尋址方式,,目的地址寄存器段內(nèi)間接尋址方式,,目的地址存儲器段內(nèi)間接尋址方式,,目的地址段間直接尋址方式,,目的地址存儲器段間間接尋址方式,,條件轉(zhuǎn)移指令的含義,JZ/JE Jump on Zero/Equal JNZ/JNE Jump on Not Zero/Equal JS Jump on Sign JNS Jump on Not Sign JP/JPE Jump on Parity/Parity Even JNP/JPO Jump on Not Parity/Parity Odd JO Jump on Overflow JNO Jump on Not Overflow JC/JB/JNAE Jump on Carry/Below/Not Above or Equal JNC/JNB/JAE Jump on Not Carry/Not Below/Above or Equal JBE/JNA Jump on Below or Equal/Not Above JNBE/JA Jump on Not Below or Equal/Above JL/JNGE Jump on Less/Not Greater or Equal JNL/JGE Jump on Not Less/Greater or Equal JLE/JNG Jump on Less or Equal/Not Greater JNLE/JG Jump on Not Less or Equal/Greater,,奇偶校驗(yàn),奇偶校驗(yàn)是計(jì)算機(jī)中最常使用的校驗(yàn)方法,因?yàn)椴徽撚糜布€是用軟件都很容易實(shí)現(xiàn) 偶校驗(yàn):如果數(shù)據(jù)中“1”的個(gè)數(shù)不是偶數(shù),則校驗(yàn)位是1,使得包括校驗(yàn)位在內(nèi)的數(shù)據(jù)中“1”的個(gè)數(shù)為偶數(shù);否則,校驗(yàn)位為0 奇校驗(yàn):如果數(shù)據(jù)中“1”的個(gè)數(shù)不是奇數(shù),則校驗(yàn)位是1,使得包括校驗(yàn)位在內(nèi)的數(shù)據(jù)中“1”的個(gè)數(shù)為奇數(shù);否則,校驗(yàn)位為0,,主程序與子程序,CALL label,主程序,,,,,RET,子程序,,回到CALL指令后的指令處——返回地址,,十六進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼的原理,,主程序與中斷服務(wù)程序,,主程序,,,,,IRET,中斷服務(wù)程序,,斷點(diǎn),,中斷請求,中斷請求可以來自處理器外部的中斷源, 也可以由處理器執(zhí)行指令引起: 例如執(zhí)行INT i8指令。,8088的指令執(zhí)行,,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 微機(jī) 原理 03 程序控制
鏈接地址:http://m.appdesigncorp.com/p-2915889.html