版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第3章第1頁,共56頁。第3章: 3.3.5 程序控制類指令 程序控制類指令用于實(shí)現(xiàn)分支、循環(huán)、過程等程序結(jié)構(gòu),是僅次于傳送指令的常用指令 控制轉(zhuǎn)移類指令通過改變IP(和CS)值,實(shí)現(xiàn)程序執(zhí)行順序的改變第2頁,共56頁。第3章:目標(biāo)地址的尋址方式直接尋址方式指令代碼中提供目的邏輯地址,轉(zhuǎn)移后的CS和IP值直接來自指令操作碼后的目的地址操作數(shù)間接尋址方式目的地址從寄存器或存儲(chǔ)單元中間接獲得用標(biāo)號(hào)表達(dá)用寄存器或存儲(chǔ)器操作數(shù)表達(dá)第3頁,共56頁。第3章:目標(biāo)地址的尋址范圍:段內(nèi)尋址段內(nèi)轉(zhuǎn)移近轉(zhuǎn)移(near)在當(dāng)前代碼段64KB范圍內(nèi)轉(zhuǎn)移( 32KB范圍)不需要更改CS段地址,只要改變IP偏移地址段內(nèi)
2、轉(zhuǎn)移短轉(zhuǎn)移(short)轉(zhuǎn)移范圍可以用一個(gè)字節(jié)表達(dá),在段內(nèi)128127范圍的轉(zhuǎn)移代碼段代碼段第4頁,共56頁。第3章:目標(biāo)地址的尋址范圍:段間尋址段間轉(zhuǎn)移遠(yuǎn)轉(zhuǎn)移(far)從當(dāng)前代碼段跳轉(zhuǎn)到另一個(gè)代碼段,CS段地址:IP偏移地址代碼段代碼段第5頁,共56頁。第3章:程序控制類指令分為5類1. 無條件轉(zhuǎn)移2. 調(diào)用與返回3. 條件轉(zhuǎn)移4. 循環(huán)轉(zhuǎn)移5.中斷第6頁,共56頁。第3章:一、 無條件轉(zhuǎn)移指令 格式:JMP 目標(biāo)標(biāo)號(hào) ;無條件轉(zhuǎn)移到目標(biāo)單元 指令標(biāo)號(hào)直接轉(zhuǎn)移,段內(nèi)/段間 REG間接轉(zhuǎn)移,段內(nèi) (16位通用) 內(nèi)存間接轉(zhuǎn)移,段內(nèi)/段間 第7頁,共56頁。第3章: 1. 段內(nèi)直接轉(zhuǎn)移轉(zhuǎn)移的目標(biāo)
3、標(biāo)號(hào)直接出現(xiàn)在指令中格式:JMP DST ; 目標(biāo)地址 可使用符號(hào)地址 第8頁,共56頁。第3章: 1. 段內(nèi)直接轉(zhuǎn)移 若轉(zhuǎn)移范圍128127 段內(nèi)直接短轉(zhuǎn)移符號(hào)地址前加操作符SHORT格式 :JMP SHORT DST 若轉(zhuǎn)移范圍為整個(gè)CS段內(nèi)任一位置(+32KB)段內(nèi)直接近轉(zhuǎn)移 符號(hào)地址前加操作符NEAR PTR格式:JMP NEAR PTR DST 可以省略第9頁,共56頁。第3章: 1. 段內(nèi)直接轉(zhuǎn)移例:JMP 2000H ;直接轉(zhuǎn)移到IP+2000H去執(zhí)行指令JMP SHORT LPI ;段內(nèi)短轉(zhuǎn)移,轉(zhuǎn)向符號(hào)地址 LPI處JMP NEAR PTR KKK ;段內(nèi)近轉(zhuǎn)移,轉(zhuǎn)向符 號(hào)地址
4、KKK處 第10頁,共56頁。第3章: 2. 段內(nèi)間接轉(zhuǎn)移格式:JMP DST; 寄存器IPREG 內(nèi)存單元IP(EA+1),(EA)例:JMP BX JMP WORD PTR BX+25H若(DS)=2000H,(BX)=0100H(20125H)=34H,(20126H)=12H則第一條指令執(zhí)行的結(jié)果是: IP=0100H 第二條指令執(zhí)行的結(jié)果是: IP=1234H第11頁,共56頁。第3章: 3. 段間直接轉(zhuǎn)移JMP FAR PTR DST ;IPDST的段內(nèi)偏移地址 CSDST所在段的段地址 直接給seg16:offset16數(shù)值表達(dá)式 符號(hào)地址前加FAR PTR例1:DST用數(shù)值表達(dá)
5、式表示JMP F000H:005BH;可省略FAR屬性說明 CSF000H, IP005BH第12頁,共56頁。第3章: 3. 段間直接轉(zhuǎn)移例2:DST用符號(hào)地址表示CSEG1 SEGMENT JMP FAR PTR PROGCSEG1 ENDSCSEG2 SEGMENTPROG: .CSEG2 ENDS第13頁,共56頁。第3章: 4. 段間間接轉(zhuǎn)移格式:JMP DWORD PTR DST ;IP(EA) 雙字?jǐn)?shù)據(jù) CS(EA+2) 例:JMP DWORD PTR BX若(DS)=2000H,(BX)=0100H(20100H)=1000H,(20102H)=4A00H則執(zhí)行后:IP=100
6、0H,CS=4A00H 程序從4B000H單元開始繼續(xù)執(zhí)行指令。 請(qǐng)問段間間接轉(zhuǎn)移可以用REG嗎?JMP指令不影響FR第14頁,共56頁。第3章:二、子程序指令(調(diào)用與返回)子程序是完成特定功能的一段程序當(dāng)主程序(調(diào)用程序)需要執(zhí)行這個(gè)功能時(shí),采用CALL調(diào)用指令轉(zhuǎn)移到該子程序的起始處執(zhí)行當(dāng)運(yùn)行完子程序功能后,采用RET返回指令回到主程序繼續(xù)執(zhí)行演示 轉(zhuǎn)移指令有去無回 子程序調(diào)用需要返回,其中利用堆棧保存返回地址第15頁,共56頁。第3章: 1. 子程序調(diào)用指令CALLCALL指令分成4種類型(類似JMP)CALL label;段內(nèi)、直接CALL r16/m16;段內(nèi)、間接CALL far p
7、tr label;段間、直接CALL far ptr mem;段間、間接注意:CALL指令不采用段內(nèi)直接短調(diào)用方式第16頁,共56頁。第3章: 1. 子程序調(diào)用指令CALLCALL指令需要保存返回地址:段內(nèi)調(diào)用入棧偏移地址IPSPSP2,SS:SPIP段間調(diào)用入棧偏移地址IP和段地址CSSPSP2,SS:SPCSSPSP2,SS:SPIP第17頁,共56頁。第3章: 段內(nèi)直接調(diào)用 目標(biāo)地址在指令中給出格式:CALL NEAR PTR DST ; SPSP2 SP+1,SP原IP進(jìn)棧 IP子程序偏移地址 ;子程序 入口地址 裝入其中,NEAR PTR可省略 DST子程序名 或子程序首址 第18頁
8、,共56頁。第3章: 段內(nèi)間接調(diào)用格式:CALL NEAR PTR DST SPSP2 SP+1,SP原IP IP(EA) ;轉(zhuǎn)向子程序入口 DST REG 內(nèi)存單元例:CALL BXCALL WORD PTR BX 第19頁,共56頁。第3章: 段間直接調(diào)用格式:CALL FAR PTR DST ; SP SP-2其中:DST為另一 SP+1,SP 原CS段中某子程序的 SP SP-2標(biāo)號(hào)(或入口地 SP+1,SP 原IP址 IP 偏移地址 ;子程序入口 CS段地址 地址裝入例: CALL 1000H:0100H ;IP=0100H CS=1000H CALL FAR PTR SUBPROC
9、 第20頁,共56頁。第3章: 段間間接調(diào)用格式:CALL DWORD PTR DST ; SP SP-2 SP+1,SPCS SPSP-2 SP+1,SPIP IP(EA) CS (EA+2)例:CALL DWORD PTR DI ;IPDI CSDI+2第21頁,共56頁。第3章:CALL 指令對(duì)標(biāo)志位無影響 實(shí)際應(yīng)用中,較多采用直接尋址方式,DST為調(diào)用的子程序(過程)名。 如:CALL NEAR PTR 子程序(過程)名CALL FAR PTR 子程序(過程)名第22頁,共56頁。第3章: 2. RET 返回指令段內(nèi)返回當(dāng)過程被定義為NEAR時(shí) 格式: RET ; IP SP+1,SP
10、 ;斷點(diǎn)出棧 SPSP+2第23頁,共56頁。第3章: 2. RET 返回指令段間返回當(dāng)過程被定義為FAR時(shí)格式: RET; IP SP+1,SP SP SP+2 CS SP+1,SP SP SP+2 差別:段內(nèi)返回代碼為 C3H(或C2H) 段間返回代碼為 CBH(或CAH)第24頁,共56頁。第3章: 2. RET 返回指令可歸納為: RET ; 近(NEAR) IP斷點(diǎn)(偏)出棧 SP SP+2 遠(yuǎn)(FAR) CS:IP 斷點(diǎn)出棧 SP SP+4第25頁,共56頁。第3章: 2. RET 返回指令RET n 帶立即數(shù)返回 ; RET SPSP+nn16位立即數(shù),或數(shù)值表達(dá)式,稱為彈出 (
11、POP)值。 例: ;子程序 MOV AX, N1 PUSH AX PROG-A PROC NEAR MOV AX, N2 PUSH AX RET 4 CALL PROG-A PROG-A ENDP MOV SUM,AX 第26頁,共56頁。第3章:例:十六進(jìn)制轉(zhuǎn)換為ASCII碼的子程序;子程序:將DL低4位的一位16進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼htoascprocand dl,0fh;只取DL的低4位or dl,30h;DL高4位變成3cmp dl,39h;是09,還是0Ah0Fh ?jbe htoend;是09,轉(zhuǎn)移add dl,7;是0Ah0Fh,加上7htoend:ret;子程序返回hto
12、ascendp;主程序:調(diào)用子程序mov dl,28hcall htoasc第27頁,共56頁。第3章:三、 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令Jcc根據(jù)指定的條件確定程序是否發(fā)生轉(zhuǎn)移。其通用格式為:Jcc label;條件滿足,發(fā)生轉(zhuǎn)移;裝入新的IP;否則,順序執(zhí)行l(wèi)abel是一個(gè)標(biāo)號(hào)、一個(gè)8位位移量,Jcc只支持段內(nèi)直接短轉(zhuǎn)移(-128127)第28頁,共56頁。第3章:Jcc指令的分類Jcc指令不影響標(biāo)志,但要利用標(biāo)志(表310)根據(jù)利用的標(biāo)志位不同,分成三種情況: 判斷單個(gè)標(biāo)志位狀態(tài) 比較無符號(hào)數(shù)高低 比較有符號(hào)數(shù)大小第29頁,共56頁。第3章:1. 判斷單個(gè)標(biāo)志位狀態(tài) JZ/JE和JNZ/JN
13、E利用零標(biāo)志ZF,判斷結(jié)果是否為零(或相等) JS和JNS利用符號(hào)標(biāo)志SF,判斷結(jié)果是正是負(fù) JO和JNO利用溢出標(biāo)志OF,判斷結(jié)果是否產(chǎn)生溢出 JP和JNP利用奇偶標(biāo)志PF,判斷結(jié)果中“1”的個(gè)數(shù)是偶是奇 JC和JNC利用進(jìn)位標(biāo)志CF,判斷結(jié)果是否進(jìn)位或借位第30頁,共56頁。第3章:1. 判斷單個(gè)標(biāo)志位狀態(tài) 適用于:測試某種運(yùn)算結(jié)果,并根據(jù)不同的狀態(tài)標(biāo)志產(chǎn)生程序分支,以便做不同的處理。第31頁,共56頁。第3章:例1:ADD AX, BXJC TOO_BIG;若加法有進(jìn)位轉(zhuǎn)至TOO-BIG 處理SUB AL, BLJZ ZERO;若減法結(jié)果為0,轉(zhuǎn)至ZERO處 理第32頁,共56頁。第3章
14、:例題 判斷單個(gè)標(biāo)志位狀態(tài)題目:將AX中存放的無符號(hào)數(shù)除以2,如果是奇數(shù)則加1后除以2問題:如何判斷AX中的數(shù)據(jù)是奇數(shù)還是偶數(shù)?解答:判斷AX最低位是“0”(偶數(shù)),還是“1”(奇數(shù))??梢杂梦徊僮黝愔噶?:用邏輯與指令將除最低位外的其他位變成0,保留最低位不變。判斷這個(gè)數(shù)據(jù)是0,AX就是偶數(shù);否則,為奇數(shù)2:將最低位用移位指令移至進(jìn)位標(biāo)志,判斷進(jìn)位標(biāo)志是0,AX就是偶數(shù);否則,為奇數(shù)第33頁,共56頁。第3章:2. 比較無符號(hào)數(shù)高低無符號(hào)數(shù)的大小用高(Above)、低(Below)表示,利用CF、ZF標(biāo)志確定JB(JNAE):目的操作數(shù)低于源操作數(shù)JNB(JAE):目的操作數(shù)不低于源操作數(shù)J
15、A ( JNBE ):目的操作數(shù)高于源操作數(shù)JNA ( JBE ):目的操作數(shù)不高于源操作數(shù)第34頁,共56頁。第3章:3. 比較有符號(hào)數(shù)大小判斷有符號(hào)數(shù)的大(Greater)、?。↙ess),OF、SF 、 ZF標(biāo)志確定JL(JNGE):目的操作數(shù)小于源操作數(shù)JNL(JGE):目的操作數(shù)不小于源操作數(shù)JG ( JNLE ):目的操作數(shù)大于源操作數(shù)JNG ( JLE ):目的操作數(shù)不大于源操作數(shù)第35頁,共56頁。第3章:3. 比較有符號(hào)數(shù)大小 例: MOV AL,0FEH CMP AL,01H JG GREATER 測試兩數(shù)是否相等,均可以用JE/JZ 或JNE/JNZ 條件轉(zhuǎn)移指令對(duì)標(biāo)志位
16、無影響。第36頁,共56頁。第3章:例 求較大值cmp ax,bx;比較AX和BXjae next;若AXBX,轉(zhuǎn)移xchg ax,bx;若AXBX,交換next:mov wmax,ax第37頁,共56頁。第3章:例 求符號(hào)數(shù)的最大值設(shè)數(shù)據(jù)區(qū)1000H開始的區(qū)域中,存放著50個(gè)字節(jié)的符號(hào)數(shù)。要求找出其中最大的一個(gè)數(shù)并存到0FFFH單元。 MOV BX, 1000H MOV AL, BX MOV CX, 31H(49)L1: INC BX CMP AL, BX JGE L2 MOV AL, BX 多次重復(fù)操作 L2: DEC CX JNE L1 MOV BX, 0FFFH MOV BX, AL第
17、38頁,共56頁。第3章:四、循環(huán)指令LOOP label;循環(huán)指令;首先CXCX1;然后判斷;若CX0,轉(zhuǎn)移JCXZ label;為0循環(huán)指令:如果CX0,則轉(zhuǎn)移label操作數(shù)采用段內(nèi)直接短轉(zhuǎn)移(-128+127)還有LOOPZ/LOOPE和LOOPNZ/LOOPNE兩條指令dec cxjnz label第39頁,共56頁。第3章:1. LOOP 指令格式: LOOP 目標(biāo)標(biāo)號(hào) ;CXCX-1,CX 0則循環(huán)DEC CX JNZ 目標(biāo)標(biāo)號(hào)第40頁,共56頁。第3章:1. LOOP 指令 MOV CX,NBEGIN: 循環(huán)體 DEC CX JNZ BEGIN MOV CX,NBEGIN: 循
18、環(huán)體 LOOP BEGIN 第41頁,共56頁。第3章:例 LOOP 指令例1: 有一個(gè)首地址為ARRAY的M個(gè)字的數(shù)組,試編寫一個(gè)程序求出該數(shù)組的內(nèi)容之和(不考慮溢出),并把結(jié)果存入TOTAL中。 MOV CX, M;字?jǐn)?shù)組個(gè)數(shù)送入CX MOV AX, 0 LEA SI, ARRAYSTART_LOOP: ADD AX, SI ;將一個(gè)數(shù)組元素和送入AX ADD SI, 2;修改數(shù)組指針 LOOP START_LOOP ;若CX不為0則重復(fù)循環(huán) MOV TOTAL, AX;結(jié)果送TOTAL第42頁,共56頁。第3章:循環(huán)指令2.LOOPE/LOOPZ指令有附加條件的循環(huán)指令格式: LOOPE
19、/LOOPZ 目標(biāo)標(biāo)號(hào) ;CXCX-1,若CX0且ZF=1,則循環(huán) 3.LOOPNE/LOOPNZ指令格式: LOOPNE/LOOPNZ 目標(biāo)標(biāo)號(hào) ;CXCX-1,若CX0且ZF=0,則循環(huán)4.JCXZ指令格式: JCXZ 目標(biāo)標(biāo)號(hào);CX=0,則循環(huán) 不影響CX的內(nèi)容第43頁,共56頁。第3章:例 LOOPZ 指令 檢查64kB內(nèi)存單元的讀寫性能.為此,依次向每個(gè)內(nèi)存單元寫入指定的數(shù)據(jù)01010101B,然后讀出來進(jìn)行比較,若正確則轉(zhuǎn)入處理正確的程序段,否則轉(zhuǎn)入出錯(cuò)處理程序段. MOV CX, 0000H ;設(shè)置計(jì)數(shù)器初值 MOV BX, 0000H ;設(shè)置地址指針 MOV AL, 01010101B ;校驗(yàn)碼55HAGAIN: MOV BYTE PTR BX, AL INC BX CMP BYTE PTRBX-1, AL LOOPZ AGAIN JCXZ OKERROR: 出錯(cuò)處理OK: 正確處理第44頁,共56頁。第3章: 3.3.6 處理器控制類指令處理器控制類指令用來控制CPU的狀態(tài),使CPU暫停、等待或空操作等 包括三種類型:1. 標(biāo)志操作指令(第17條)2. 外部同步指(第811條)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026安徽蚌埠市固鎮(zhèn)縣湖溝鎮(zhèn)招聘村級(jí)后備干部8人備考題庫帶答案詳解
- 2025湖北黃石市中醫(yī)醫(yī)院專項(xiàng)招聘事業(yè)編制人員12人備考題庫及1套參考答案詳解
- 2026中國電子科技集團(tuán)公司第三十三研究所招聘備考題庫參考答案詳解
- 2026四川廣元市青川縣衛(wèi)生系統(tǒng)部分醫(yī)療衛(wèi)生機(jī)構(gòu)招聘編外專業(yè)技術(shù)人員9人備考題庫含答案詳解
- 2025河南國宏貿(mào)易發(fā)展集團(tuán)招聘2人備考題庫及一套答案詳解
- 2025江蘇南京大學(xué)軟件學(xué)院準(zhǔn)聘長聘崗位(事業(yè)編制)招聘備考題庫(含答案詳解)
- 2025江西省贛房投資集團(tuán)有限公司社會(huì)招聘6人備考題庫有完整答案詳解
- 2025-2030長途運(yùn)輸行業(yè)市場分析競爭格局發(fā)展調(diào)研投資合理規(guī)劃報(bào)告
- 2025-2030鋅色花朵行業(yè)市場發(fā)展分析及趨勢前景與投資戰(zhàn)略研究報(bào)告
- 2025-2030醬油行業(yè)風(fēng)險(xiǎn)投資發(fā)展分析及投資融資策略研究報(bào)告
- 2025-2030泉州市鞋類制造行業(yè)市場現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 百師聯(lián)盟2025-2026學(xué)年高三上學(xué)期1月期末考試俄語試題含答案
- 2026陜西省森林資源管理局局屬企業(yè)招聘(55人)備考題庫及答案1套
- 2025-2026學(xué)年人教版高二物理上學(xué)期期末模擬卷(含答案)
- 涉密部門保密季度檢查表及規(guī)范流程
- 病種成本核算與臨床路徑精細(xì)化管理
- 項(xiàng)目管理專員年底工作總結(jié)及2026年項(xiàng)目管理計(jì)劃
- 2025年《治安管理處罰法》知識(shí)考試題及答案
- 臨床重點(diǎn)??茩z驗(yàn)科評(píng)分標(biāo)準(zhǔn)與評(píng)估報(bào)告
- 飲片物料管理培訓(xùn)
- 2025年東北三省四市教研聯(lián)合體高考模擬試題(二)語文
評(píng)論
0/150
提交評(píng)論