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

1、18086指令系統(tǒng)指令系統(tǒng)(2)2邏輯運(yùn)算和移位指令3指令類(lèi)型n邏輯運(yùn)算邏輯運(yùn)算n與,或,非,異或與,或,非,異或n移位操作移位操作n非循環(huán)移位,循環(huán)移位非循環(huán)移位,循環(huán)移位邏邏輯輯運(yùn)運(yùn)算算AND、OR、XOR、NOT、TEST移移 位位 SHL、SAL、SHR、SAR 循循環(huán)環(huán)移移位位 ROL、ROR、RCL、RCR4 一、邏輯運(yùn)算n邏輯運(yùn)算指令對(duì)操作數(shù)的要求大多與邏輯運(yùn)算指令對(duì)操作數(shù)的要求大多與MOV指指令相同。令相同。n“非非”運(yùn)算指令要求操作數(shù)運(yùn)算指令要求操作數(shù) 不能是立即數(shù);不能是立即數(shù);n除除“非非”運(yùn)算指令運(yùn)算指令 外,其余指令的執(zhí)行都會(huì)外,其余指令的執(zhí)行都會(huì)使標(biāo)志位使標(biāo)志位OF

2、=CF=051.“與”指令:n格式:格式: n AND OPRD1,OPRD2n操作:操作: n兩操作數(shù)相兩操作數(shù)相“與與”,結(jié)果送目標(biāo)地址。,結(jié)果送目標(biāo)地址。6“與”指令的應(yīng)用n實(shí)現(xiàn)兩操作數(shù)按位相與的運(yùn)算實(shí)現(xiàn)兩操作數(shù)按位相與的運(yùn)算nAND BL,SIn使目標(biāo)操作數(shù)的某些位不變,某些位清零使目標(biāo)操作數(shù)的某些位不變,某些位清零nAND AL,0FHn在操作數(shù)不變的在操作數(shù)不變的 情況下使情況下使CF和和OF清零清零nAND AX,AX7“與”指令應(yīng)用例n從地址為從地址為3F8H 端口中讀入一個(gè)字節(jié)數(shù),端口中讀入一個(gè)字節(jié)數(shù),如果該數(shù)如果該數(shù) bit1位為位為1,則可從,則可從38FH端口將端口將D

3、ATA為首地址的一個(gè)字輸出,否則就不能為首地址的一個(gè)字輸出,否則就不能進(jìn)行數(shù)據(jù)傳送。進(jìn)行數(shù)據(jù)傳送。 編寫(xiě)相應(yīng)的程序段。編寫(xiě)相應(yīng)的程序段。8“與”指令應(yīng)用例開(kāi)開(kāi) 始始取待輸出數(shù)的取待輸出數(shù)的偏移地址偏移地址讀入狀態(tài)字讀入狀態(tài)字測(cè)試測(cè)試bit1位狀態(tài)位狀態(tài)Bit1=1?取輸入口地址取輸入口地址取輸出口地址取輸出口地址 輸出一個(gè)字輸出一個(gè)字NY9“與”指令應(yīng)用例 LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1轉(zhuǎn)移轉(zhuǎn)移 MOV DX,38FH MOV AX,SI OUT DX,AX102.“或”運(yùn)算指令n格式:格式: nOR

4、OPRD1,OPRD2n操作:操作: n兩操作數(shù)相兩操作數(shù)相“或或”,結(jié)果送目標(biāo)地址,結(jié)果送目標(biāo)地址11“或”指令的應(yīng)用n實(shí)現(xiàn)兩操作數(shù)實(shí)現(xiàn)兩操作數(shù) 相相 “或或”的的 運(yùn)算運(yùn)算nOR AX,DIn使某些位不變,某些位置使某些位不變,某些位置“1”nOR CL,0FHn在不改變操作數(shù)的在不改變操作數(shù)的 情況下使情況下使OF=CF=0nOR AX,AX12“或”指令的應(yīng)用例 OR AL,AL JPE GOON OR AL,80H GOON:.PF=1轉(zhuǎn)移轉(zhuǎn)移13“或”指令的應(yīng)用將一個(gè)二進(jìn)將一個(gè)二進(jìn)制數(shù)制數(shù)9變?yōu)樽肿優(yōu)樽址?如何實(shí)現(xiàn)如何實(shí)現(xiàn)?143.“非”運(yùn)算指令n格式:格式:nNOT OPRDN

5、OT OPRDn操作:操作:n操作數(shù)按位取反再送回原地址操作數(shù)按位取反再送回原地址n注:注:n指令中的操作數(shù)不能是立即數(shù)指令中的操作數(shù)不能是立即數(shù)n指令的執(zhí)行對(duì)標(biāo)志位無(wú)影響指令的執(zhí)行對(duì)標(biāo)志位無(wú)影響n例:例:NOT BYTE PTRBXNOT BYTE PTRBX154.“異或”運(yùn)算指令n格式:格式: nXOR OPRD1,OPRD2n操作:操作:n兩操作數(shù)相兩操作數(shù)相“異或異或”,結(jié)果送目標(biāo)地址,結(jié)果送目標(biāo)地址n例:例: XOR BL,80H XOR AX,AX165.“測(cè)試”指令n格式:格式: nTEST OPRD1,OPRD2n操作:操作: n執(zhí)行執(zhí)行“與與”運(yùn)算,只影響標(biāo)志位,不影響操作

6、運(yùn)算,只影響標(biāo)志位,不影響操作數(shù)。數(shù)。n應(yīng)用:應(yīng)用:n常用于測(cè)試某些位的狀態(tài)常用于測(cè)試某些位的狀態(tài)17例:n從地址為從地址為3F8H的的 端口中讀入一個(gè)字節(jié)數(shù),當(dāng)端口中讀入一個(gè)字節(jié)數(shù),當(dāng)該數(shù)的該數(shù)的 bit1, bit3, bit5位同時(shí)為位同時(shí)為1時(shí)時(shí),可,可從從38FH端口將端口將DATA為首地址的一個(gè)字輸出,為首地址的一個(gè)字輸出,否則就不能進(jìn)行數(shù)否則就不能進(jìn)行數(shù) 據(jù)傳送。據(jù)傳送。 編寫(xiě)相應(yīng)的編寫(xiě)相應(yīng)的 程序段。程序段。18源程序代碼: LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AXAND AL,2A

7、HCMP AL,2AHJNZ WATTTEST AL,02HJZ WATT ;ZF=1轉(zhuǎn)移轉(zhuǎn)移TEST AL,08HJZ WATTTEST AL,20HJZ WATTAND AL,2AHXOR AL,2AHJNZ WATT例例 21H端口管理中斷系統(tǒng),管理端口管理中斷系統(tǒng),管理8個(gè)外設(shè)的中斷個(gè)外設(shè)的中斷為為0, 允許鍵盤(pán)中斷允許鍵盤(pán)中斷為為1, 禁止禁止7654321010100010D7 D6 D5 D4 D3 D2 D1 D0允許鍵盤(pán)中斷:允許鍵盤(pán)中斷: IN AL,21H ;讀入讀入21端口內(nèi)容端口內(nèi)容 AND AL,1111 1101B ;置置D1 = 0,其他位不變其他位不變 OUT

8、 21H ,AL ;送出屏蔽字到送出屏蔽字到21H端口端口禁止鍵盤(pán)中斷:禁止鍵盤(pán)中斷: IN AL,21H OR AL,0000 0010B ;使使D1為為1 OUT 21H,AL 例例 379H端口的端口的D7存放打印機(jī)的狀態(tài)存放打印機(jī)的狀態(tài)為為0, 表示打印機(jī)忙表示打印機(jī)忙為為1, 打印機(jī)空閑打印機(jī)空閑7654321010100010D7 D6 D5 D4 D3 D2 D1 D0用查詢(xún)方式控制打印機(jī)工作:用查詢(xún)方式控制打印機(jī)工作: MOV DX, 379H ask: IN AL, DX ;從從379H端口讀狀態(tài)端口讀狀態(tài) TEST AL, 1000 0000B ;檢測(cè)檢測(cè)D7位位 JZ a

9、sk ;為為0,繼續(xù)查詢(xún),繼續(xù)查詢(xún)print: 、 ;輸出字符打印輸出字符打印 21二、移位指令 非循環(huán)移位指令非循環(huán)移位指令 循環(huán)移位指令循環(huán)移位指令注:注:n 移動(dòng)一位時(shí)由指令直接給出;移動(dòng)一位時(shí)由指令直接給出;n 移動(dòng)兩位及以上,則移位次數(shù)由移動(dòng)兩位及以上,則移位次數(shù)由CL指定。指定。221. 非循環(huán)移位指令n邏輯左移邏輯左移n算術(shù)左移算術(shù)左移n邏輯右移邏輯右移n算術(shù)右移算術(shù)右移對(duì)標(biāo)志位的影響:對(duì)標(biāo)志位的影響:1. 根據(jù)結(jié)果設(shè)置根據(jù)結(jié)果設(shè)置CF、SF、ZF、PF,對(duì),對(duì)AF無(wú)定義。無(wú)定義。2. OF只在移位次數(shù)為只在移位次數(shù)為1時(shí)有效,其他無(wú)定義。時(shí)有效,其他無(wú)定義。 移位后,最高有移位

10、后,最高有效位發(fā)生變化,則效位發(fā)生變化,則OF=1,否則為,否則為0。23算術(shù)左移和邏輯左移n算術(shù)左移指算術(shù)左移指 令:令: SAL OPRD,1 SAL OPRD,CLn邏輯左移指邏輯左移指 令:令: SHL OPRD,1 SHL OPRD,CL有符號(hào)數(shù)有符號(hào)數(shù)無(wú)符號(hào)數(shù)無(wú)符號(hào)數(shù)移動(dòng)一位后,若移動(dòng)一位后,若CF與最高不相等,則與最高不相等,則OF=1;否則否則OF=00CF0CFn算術(shù)左移和算術(shù)右移主要用來(lái)進(jìn)行有符號(hào)數(shù)的倍增、減半; 邏輯左移和邏輯右移主要用來(lái)進(jìn)行無(wú)符號(hào)數(shù)的倍增、減半。n算術(shù)左移和邏輯左移雖然方式是一樣的,但他們表示的移位后數(shù)的范圍是不一樣的,8位有符號(hào)數(shù)左移(算術(shù)左移)1位后

11、的范圍是-128127.而無(wú)符號(hào)數(shù)左移(邏輯左移)1位后的范圍是0255. 25邏輯右移n格式:格式: SHR OPRD,1 SHR OPRD,CL0CF移動(dòng)一位后,若次高位與最高位不相等,則移動(dòng)一位后,若次高位與最高位不相等,則OF=1;否則否則OF=026邏輯右移例:nMOV AL,68HnMOV CL,2nSHR AL,CL0CF0 1 1 0 1 0 AL0 0 0 0 0 1 1 0 1 0 0ALCF0 00 0 0 1 1 0 1 0 ALCF0 0移動(dòng)移動(dòng)1次次移動(dòng)移動(dòng)2次次27算術(shù)右移n格式:格式: SAR OPRD,1 SAR OPRD,CLCF算術(shù)右移,保持最高有效位原來(lái)

12、的值(符號(hào)位不變)算術(shù)右移,保持最高有效位原來(lái)的值(符號(hào)位不變)例例 若(若(AL)=96H, CF=0 執(zhí)行執(zhí)行 SHL AL, 1執(zhí)行前執(zhí)行前:(AL)=96H ,CF=010010110執(zhí)行后:執(zhí)行后:( (AL)=2CH ,CF=100101100執(zhí)行前執(zhí)行前:(AL)=96H ,CF=010010110執(zhí)行后執(zhí)行后:(AL)=E5H ,CF=111100101CF例例 若(若(AL)=96H, CF=0, (CL) =2 執(zhí)行執(zhí)行 SAR AL, CL292. 循環(huán)移位指令n不帶進(jìn)位位的循環(huán)移位不帶進(jìn)位位的循環(huán)移位n帶進(jìn)位位的循環(huán)移位帶進(jìn)位位的循環(huán)移位左移左移 ROL右移右移 ROR

13、左移左移 RCL右移右移 RCR指令格式、對(duì)操作數(shù)的要求與非循環(huán)移位指令相同指令格式、對(duì)操作數(shù)的要求與非循環(huán)移位指令相同對(duì)標(biāo)志位的影響:對(duì)標(biāo)志位的影響:1. 根據(jù)結(jié)果設(shè)置根據(jù)結(jié)果設(shè)置CF,對(duì)其它標(biāo)志無(wú)影響。,對(duì)其它標(biāo)志無(wú)影響。2. OF只在移位次數(shù)為只在移位次數(shù)為1時(shí)有效,其他無(wú)定義。時(shí)有效,其他無(wú)定義。 移位后,最高有移位后,最高有效位發(fā)生變化,則效位發(fā)生變化,則OF=1,否則為,否則為0。30不帶進(jìn)位位的循環(huán)移位CFCFn格式:格式: ROL OPRD,1 ROL OPRD,CLn格式:格式: ROR OPRD,1 ROR OPRD,CL31帶進(jìn)位位的循環(huán)移位CFCFn格式:格式: RCL

14、 OPRD,1 RCL OPRD,CLn格式:格式: RCR OPRD,1 RCR OPRD,CL例例 若(若(AL)= 96H, CF=0 執(zhí)行執(zhí)行 ROL AL, 1執(zhí)行前執(zhí)行前:1001010(AL)=96H, CF=0 1執(zhí)行后執(zhí)行后:0010101(AL)=2DH, CF=1 1例例 若(若(AL)= 96H, CF=0, (CL)=2 執(zhí)行執(zhí)行 RCR AL, CL1001010執(zhí)行前:執(zhí)行前:10010001執(zhí)行后執(zhí)行后:1(AL)=96H CF=0 (AL)=25H CF=1 33循環(huán)移位指令的應(yīng)用n用于對(duì)某些位狀態(tài)的測(cè)試;用于對(duì)某些位狀態(tài)的測(cè)試;n高位部分和低位部分的交換;高

15、位部分和低位部分的交換;n檢測(cè)寄存器或存儲(chǔ)單元中含檢測(cè)寄存器或存儲(chǔ)單元中含1或含或含0的個(gè)數(shù),因?yàn)橛眯⊙膫€(gè)數(shù),因?yàn)橛眯⊙h(huán)指令循環(huán)環(huán)指令循環(huán)8次,數(shù)據(jù)又恢復(fù)了,但對(duì)次,數(shù)據(jù)又恢復(fù)了,但對(duì)CF進(jìn)行檢測(cè),就進(jìn)行檢測(cè),就可計(jì)出可計(jì)出1或或0的個(gè)數(shù);大循環(huán)指令要循環(huán)的個(gè)數(shù);大循環(huán)指令要循環(huán)9次,數(shù)據(jù)也恢次,數(shù)據(jù)也恢復(fù)了。復(fù)了。n與非循環(huán)移位指令一起組成與非循環(huán)移位指令一起組成32位或更長(zhǎng)字長(zhǎng)數(shù)的移位。位或更長(zhǎng)字長(zhǎng)數(shù)的移位。34程序功能n將將10001000H H開(kāi)始存放的開(kāi)始存放的4 4個(gè)壓縮個(gè)壓縮BCDBCD碼轉(zhuǎn)換碼轉(zhuǎn)換為為ASCIIASCII碼存放在碼存放在30003000H H開(kāi)始的單元中開(kāi)始

16、的單元中去。去。12H34H56H78H1000H3000H35程序例 MOV SI,1000H MOV DI,3000H MOV CX,4Next:MOV AL,SI MOV BL,AL AND AL,0FH OR AL,30H MOV DI,AL INC DI MOV AL,BLPUSH CXMOV CL,436串操作指令37串操作指令說(shuō)明n針對(duì)數(shù)據(jù)塊或字符串的操作;針對(duì)數(shù)據(jù)塊或字符串的操作;n可實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送;可實(shí)現(xiàn)存儲(chǔ)器到存儲(chǔ)器的數(shù)據(jù)傳送;n待操作的數(shù)據(jù)串稱(chēng)為源串,目標(biāo)地址稱(chēng)為目標(biāo)串。待操作的數(shù)據(jù)串稱(chēng)為源串,目標(biāo)地址稱(chēng)為目標(biāo)串。l 串處理指令格式串處理指令格式重復(fù)控制前綴

17、重復(fù)控制前綴 串指令串指令控制重復(fù)次數(shù)控制重復(fù)次數(shù) 基本操作基本操作 MOVSB、MOVSW 串傳送串傳送REP LODSB、LODSW 從串取從串取REPZ STOSB、STOSW 存入串存入串REPNZ CMPSB、CMPSW 串比較串比較 SCASB、SCASW 搜索串搜索串38串操作指令的特點(diǎn)n源串一般存放在數(shù)據(jù)段,偏移地址由源串一般存放在數(shù)據(jù)段,偏移地址由SI指定。允許段指定。允許段重設(shè);重設(shè);n目標(biāo)串必須在附加段,偏移地址由目標(biāo)串必須在附加段,偏移地址由DI指定;指定;n指令自動(dòng)修改地址指針,修改方向由指令自動(dòng)修改地址指針,修改方向由DF決定。決定。 DF=0 DF=1n數(shù)據(jù)塊長(zhǎng)度

18、值由數(shù)據(jù)塊長(zhǎng)度值由CX指定指定n可增加自動(dòng)重復(fù)前綴以實(shí)現(xiàn)自動(dòng)修改可增加自動(dòng)重復(fù)前綴以實(shí)現(xiàn)自動(dòng)修改CX內(nèi)容。內(nèi)容。增地址方向;增地址方向;減地址方向;減地址方向;39重復(fù)前綴n無(wú)條件重復(fù)無(wú)條件重復(fù)nREPn條件重復(fù)條件重復(fù)nREPE 相等重復(fù)相等重復(fù)nREPZ 為零重復(fù)為零重復(fù)nREPNE 不相等重復(fù)不相等重復(fù)nREPNZ 不為零重復(fù)不為零重復(fù)CX0 ZF=1CX0 ZF=0CX0 重復(fù)重復(fù)40串操作指令n串傳送串傳送 MOVSn串比較串比較 CMPSn串掃描串掃描 SCASn串裝入串裝入 LODSn串送存串送存 STOS41串操作指令流程(以傳送操作為例)取源串地址取源串地址取目標(biāo)串地址取目標(biāo)

19、串地址設(shè)串長(zhǎng)度設(shè)串長(zhǎng)度傳送一個(gè)字節(jié)或字傳送一個(gè)字節(jié)或字修改地址指針修改地址指針修改串長(zhǎng)度值修改串長(zhǎng)度值傳送完否?傳送完否?NY設(shè)操作方向設(shè)操作方向421. 串傳送指令n格式:格式: MOVS OPRD1,OPRD2 MOVSB MOVSWn串傳送指令常與無(wú)條件重復(fù)前綴連用串傳送指令常與無(wú)條件重復(fù)前綴連用43串傳送指令例n用串傳送指令實(shí)現(xiàn)用串傳送指令實(shí)現(xiàn)200個(gè)字節(jié)數(shù)據(jù)的傳送:個(gè)字節(jié)數(shù)據(jù)的傳送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT442. 串比較指令n格式:格式: CMPS OPRD1,OPRD2 CMPSB CMPSWn串比

20、較指令常與條件重復(fù)前綴連用,指令的執(zhí)串比較指令常與條件重復(fù)前綴連用,指令的執(zhí) 行不改變操作數(shù),僅影響標(biāo)志位。行不改變操作數(shù),僅影響標(biāo)志位。n前綴的操作對(duì)標(biāo)志位不影響前綴的操作對(duì)標(biāo)志位不影響45串比較指令例測(cè)試測(cè)試200個(gè)字節(jié)數(shù)據(jù)是否傳送正確:個(gè)字節(jié)數(shù)據(jù)是否傳送正確:LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE CMPSB TEST CX,00FFH JZ STOP DEC SI MOV AL,SI MOV BX,SISTOP:HLT 463. 串掃描指令n格式:格式: SCAS OPRD SCASB SCASWn執(zhí)行與執(zhí)行與CMPS指令相似的操作,只是這里的

21、源指令相似的操作,只是這里的源 操作數(shù)是操作數(shù)是AX或或AL目目 標(biāo)標(biāo)操作數(shù)操作數(shù)474. 串裝入指令n格式:格式: LODS OPRD LODSB LODSWn操作:操作:n對(duì)字節(jié):對(duì)字節(jié):n對(duì)對(duì) 字:字:源操作數(shù)源操作數(shù)DS:SIDS:SIDS:SIDS:SIALALAXAX484. 串裝入指令n用于將內(nèi)存某個(gè)區(qū)域的數(shù)據(jù)串依次裝入累加用于將內(nèi)存某個(gè)區(qū)域的數(shù)據(jù)串依次裝入累加 器,以便顯示或輸出到接口。器,以便顯示或輸出到接口。nLODS指令一般不加重復(fù)前綴。指令一般不加重復(fù)前綴。495. 串存儲(chǔ)指令n格式:格式: STOS OPRD STOSB STOSWn操作:操作:n對(duì)字節(jié):對(duì)字節(jié): A

22、LALn對(duì)對(duì) 字:字: AXAX目目 標(biāo)標(biāo)操作數(shù)操作數(shù)ES:DIES:DI50串存儲(chǔ)指令的應(yīng)用n常用于將內(nèi)存某個(gè)區(qū)域置同樣的值常用于將內(nèi)存某個(gè)區(qū)域置同樣的值n此時(shí):此時(shí):n將待送存的數(shù)據(jù)放入將待送存的數(shù)據(jù)放入AL(字節(jié)數(shù))或(字節(jié)數(shù))或AX(字?jǐn)?shù)(字?jǐn)?shù)據(jù));據(jù));n確定操作方向(增地址確定操作方向(增地址/減地址)和區(qū)域大?。ù疁p地址)和區(qū)域大?。ùL(zhǎng)度值);長(zhǎng)度值);n使用串存儲(chǔ)指令使用串存儲(chǔ)指令+無(wú)條件重復(fù)前綴,實(shí)現(xiàn)數(shù)據(jù)傳送。無(wú)條件重復(fù)前綴,實(shí)現(xiàn)數(shù)據(jù)傳送。51串操作指令應(yīng)用注意事項(xiàng)n需要定義附加段需要定義附加段n目標(biāo)操作數(shù)必須在附加段目標(biāo)操作數(shù)必須在附加段n需要設(shè)置數(shù)據(jù)的操作方向需要設(shè)置數(shù)

23、據(jù)的操作方向n確定確定DF的狀態(tài)的狀態(tài)n源串和目標(biāo)串指針?lè)謩e為源串和目標(biāo)串指針?lè)謩e為SI和和DIn串長(zhǎng)度值必須由串長(zhǎng)度值必須由CX給出給出n注意重復(fù)前綴的使用方法注意重復(fù)前綴的使用方法n傳送類(lèi)指令前加無(wú)條件重復(fù)前綴傳送類(lèi)指令前加無(wú)條件重復(fù)前綴n串比較類(lèi)指令前加條件重復(fù)前綴,但前綴不影響串比較類(lèi)指令前加條件重復(fù)前綴,但前綴不影響ZF狀態(tài)狀態(tài)52程序控制指令指指令令類(lèi)類(lèi)型型助助記記符符無(wú)無(wú)條條件件轉(zhuǎn)轉(zhuǎn)移移 JMP條條件件轉(zhuǎn)轉(zhuǎn)移移JE/JZ, JNE/JNZ, JS, JNS, JO, JNOJP, JNP, JC, JNC, JCXZJA/JNBE, JAE/JNB, JB/JNAE, JBE/J

24、NAJG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG循循環(huán)環(huán)控控制制LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ過(guò)過(guò)程程調(diào)調(diào)用用CALL, RET中中斷斷指指令令I(lǐng)NT, INTO, IRET53程序的執(zhí)行方向n程序控制類(lèi)指令的本質(zhì)是:程序控制類(lèi)指令的本質(zhì)是:n控制程序的執(zhí)行方向控制程序的執(zhí)行方向n決定程序執(zhí)行方向的因素:決定程序執(zhí)行方向的因素:nCS,IPn控制程序執(zhí)行方向的方法:控制程序執(zhí)行方向的方法:n修改修改CS 和和IP ,則程序轉(zhuǎn)向另一個(gè)代碼段執(zhí)行;,則程序轉(zhuǎn)向另一個(gè)代碼段執(zhí)行;n僅修改僅修改IP,則程序?qū)⒏淖儺?dāng)前的執(zhí)行順序,轉(zhuǎn)向本代碼段內(nèi)其

25、它,則程序?qū)⒏淖儺?dāng)前的執(zhí)行順序,轉(zhuǎn)向本代碼段內(nèi)其它某處執(zhí)行。某處執(zhí)行。n目的地址的三種表示方法目的地址的三種表示方法n符號(hào)地址,符號(hào)地址,JMP Labeln寄存器,寄存器,JMP AXn存儲(chǔ)器,存儲(chǔ)器,JMP WORD PTRBX54一、轉(zhuǎn)移指令無(wú)條件無(wú)條件轉(zhuǎn)移指令轉(zhuǎn)移指令 無(wú)條件轉(zhuǎn)移到目標(biāo)地址,執(zhí)行新的指令無(wú)條件轉(zhuǎn)移到目標(biāo)地址,執(zhí)行新的指令有條件轉(zhuǎn)移指令有條件轉(zhuǎn)移指令 在具備一定條件的情況下轉(zhuǎn)移到目標(biāo)地址在具備一定條件的情況下轉(zhuǎn)移到目標(biāo)地址通過(guò)修改指令的通過(guò)修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址實(shí)現(xiàn)程序的轉(zhuǎn)移實(shí)現(xiàn)程序的轉(zhuǎn)移551. 無(wú)條件轉(zhuǎn)移指令n格式:格式: JM

26、P OPRD目標(biāo)地址目標(biāo)地址與與JMP在同在同一代碼段一代碼段與與JMP不在同不在同一代碼段一代碼段原則上可實(shí)現(xiàn)在整個(gè)內(nèi)存空間的轉(zhuǎn)移原則上可實(shí)現(xiàn)在整個(gè)內(nèi)存空間的轉(zhuǎn)移56無(wú)條件段內(nèi)轉(zhuǎn)移n轉(zhuǎn)移的轉(zhuǎn)移的目標(biāo)地址目標(biāo)地址在當(dāng)前代碼段內(nèi),段地址不在當(dāng)前代碼段內(nèi),段地址不 改改變。變。n即:即:目標(biāo)地址目標(biāo)地址是是16位偏移地址。位偏移地址。指令中直接給出指令中直接給出目標(biāo)地址目標(biāo)地址由指令中的寄存器或由指令中的寄存器或存儲(chǔ)器操作數(shù)指出目存儲(chǔ)器操作數(shù)指出目標(biāo)地址標(biāo)地址段內(nèi)直接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移段內(nèi)間接段內(nèi)間接轉(zhuǎn)移轉(zhuǎn)移57段內(nèi)轉(zhuǎn)移n段內(nèi)直接轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址由指令直接給出,段內(nèi)直接轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址由指令

27、直接給出,JMP Labeln段內(nèi)間接轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址存放在某個(gè)段內(nèi)間接轉(zhuǎn)移,轉(zhuǎn)移的目標(biāo)地址存放在某個(gè)16位寄存器或位寄存器或存儲(chǔ)器的某兩個(gè)單元中存儲(chǔ)器的某兩個(gè)單元中nJMP BX 若:若:BX=1200H,則:轉(zhuǎn)移的目標(biāo)地址則:轉(zhuǎn)移的目標(biāo)地址=1200H近地址標(biāo)號(hào)近地址標(biāo)號(hào)58無(wú)條件段間轉(zhuǎn)移n轉(zhuǎn)移的轉(zhuǎn)移的目標(biāo)地址目標(biāo)地址不在當(dāng)前代碼段內(nèi)。不在當(dāng)前代碼段內(nèi)。n目標(biāo)地址目標(biāo)地址為為32位,包括段地址和偏移地址。位,包括段地址和偏移地址。指令中直接給出指令中直接給出目標(biāo)地址目標(biāo)地址由指令中的由指令中的32位存儲(chǔ)器位存儲(chǔ)器操作數(shù)指出目標(biāo)地址操作數(shù)指出目標(biāo)地址段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移段間間接轉(zhuǎn)移段

28、間間接轉(zhuǎn)移59段間轉(zhuǎn)移n段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移n轉(zhuǎn)移的目標(biāo)地址由指令直接給出轉(zhuǎn)移的目標(biāo)地址由指令直接給出, JMP FAR Labeln段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移n轉(zhuǎn)移的目標(biāo)地址由指令中的轉(zhuǎn)移的目標(biāo)地址由指令中的32位操位操作數(shù)給出作數(shù)給出 JMP DWORD PTRBX遠(yuǎn)地址標(biāo)號(hào)遠(yuǎn)地址標(biāo)號(hào)59XXHXXHXXHXXHBXIPCSJMP指令碼指令碼代代碼碼段段1代代碼碼段段2數(shù)數(shù)據(jù)據(jù)段段60無(wú)條件轉(zhuǎn)移指令例nMOV SI,1122HnMOV WORD PTRSI,0120HnADD SI,2nMOV WORD PTRSI,0122HJMP DWORD PTRSI-2JMP WORD PTRSI

29、JMP1122H代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段01H22H20H01HIPCSIP612. 條件轉(zhuǎn)移指令n在滿足一定條件下,程序轉(zhuǎn)移到目標(biāo)地在滿足一定條件下,程序轉(zhuǎn)移到目標(biāo)地址繼續(xù)執(zhí)行址繼續(xù)執(zhí)行n條件轉(zhuǎn)移指令均為段內(nèi)短轉(zhuǎn)移,即轉(zhuǎn)移條件轉(zhuǎn)移指令均為段內(nèi)短轉(zhuǎn)移,即轉(zhuǎn)移 范圍為:范圍為: -128-+12762條件轉(zhuǎn)移指令的應(yīng)用n幾種條件轉(zhuǎn)移指令的應(yīng)用幾種條件轉(zhuǎn)移指令的應(yīng)用nJC/JNCn判斷判斷CF的狀態(tài)。常用于比大小的狀態(tài)。常用于比大小nJZ/JNZn判斷判斷ZF的狀態(tài)。常用于循環(huán)體的結(jié)束判斷的狀態(tài)。常用于循環(huán)體的結(jié)束判斷nJO/JNOn判斷判斷OF的狀態(tài)。常用于有符號(hào)數(shù)溢出的判斷的狀態(tài)。常用于有符號(hào)

30、數(shù)溢出的判斷nJP/JPEn判斷判斷PF的狀態(tài)。用于判斷運(yùn)算結(jié)果低的狀態(tài)。用于判斷運(yùn)算結(jié)果低8位中位中1的個(gè)數(shù)是否為偶的個(gè)數(shù)是否為偶數(shù)數(shù)nJA/JAE/JB/JBEn判斷判斷CF或或CF+ZF的狀態(tài)。常用于無(wú)符號(hào)數(shù)的大小比較的狀態(tài)。常用于無(wú)符號(hào)數(shù)的大小比較63轉(zhuǎn)移指令例n統(tǒng)計(jì)內(nèi)存數(shù)據(jù)段中以統(tǒng)計(jì)內(nèi)存數(shù)據(jù)段中以TABLE為首地址的為首地址的100個(gè)個(gè)8位符號(hào)數(shù)中正數(shù)、負(fù)數(shù)和零元數(shù)位符號(hào)數(shù)中正數(shù)、負(fù)數(shù)和零元數(shù)的個(gè)數(shù)。的個(gè)數(shù)。64轉(zhuǎn)移指令例(流程圖)將存放各元素個(gè)將存放各元素個(gè)數(shù)的單元清零數(shù)的單元清零取首地址取首地址設(shè)串長(zhǎng)度設(shè)串長(zhǎng)度取一個(gè)字節(jié)數(shù)取一個(gè)字節(jié)數(shù)正數(shù)個(gè)數(shù)加正數(shù)個(gè)數(shù)加1零元素加零元素加1為負(fù)?

31、為負(fù)?為零?為零?負(fù)數(shù)個(gè)數(shù)加負(fù)數(shù)個(gè)數(shù)加1NYNY65二、循環(huán)控制指令n循環(huán)范圍:循環(huán)范圍:n以當(dāng)前以當(dāng)前IP為中心的為中心的-128+127范圍內(nèi)循環(huán)。范圍內(nèi)循環(huán)。n循環(huán)次數(shù)由循環(huán)次數(shù)由CX寄存器指定。寄存器指定。n循環(huán)指令:循環(huán)指令:LOOP *LOOPZ *LOOPNZ無(wú)條件循環(huán)指令無(wú)條件循環(huán)指令條件循環(huán)指令條件循環(huán)指令nLOOP和和REP的區(qū)別:的區(qū)別:n1、LOOP后面跟標(biāo)號(hào),后面跟標(biāo)號(hào),REP后面跟要重復(fù)執(zhí)行的字符串指令;后面跟要重復(fù)執(zhí)行的字符串指令;n2、LOOP先執(zhí)行先執(zhí)行(Count Reg)(Count Reg)-1,再檢查測(cè)試條件,再檢查測(cè)試條件,REP先檢查測(cè)試條件,再執(zhí)

32、行先檢查測(cè)試條件,再執(zhí)行(Count Reg)(Count Reg)-1;n3、REP后面只能跟一條指令,要重復(fù)執(zhí)行指令塊,必須用后面只能跟一條指令,要重復(fù)執(zhí)行指令塊,必須用LOOP。66無(wú)條件循環(huán)指令n格式:格式: LOOP LABELn循環(huán)條件:循環(huán)條件: CX 0n操作:操作: DEC CX JNZ 符號(hào)地址符號(hào)地址67三、過(guò)程調(diào)用和返回n用于調(diào)用一個(gè)子過(guò)程;用于調(diào)用一個(gè)子過(guò)程;n子過(guò)程由程序員預(yù)先設(shè)計(jì)子過(guò)程由程序員預(yù)先設(shè)計(jì) 并裝入內(nèi)存并裝入內(nèi)存 n子過(guò)程執(zhí)行結(jié)束后要返回子過(guò)程執(zhí)行結(jié)束后要返回 原調(diào)用處原調(diào)用處調(diào)用程序調(diào)用程序斷點(diǎn)斷點(diǎn)入口入口地址地址子程序子程序68調(diào)用指令的執(zhí)行過(guò)程n保

33、護(hù)斷點(diǎn);保護(hù)斷點(diǎn);n將調(diào)用指令的下一條指令的地址(斷點(diǎn))壓入堆棧將調(diào)用指令的下一條指令的地址(斷點(diǎn))壓入堆棧n獲取子過(guò)程的入口地址;獲取子過(guò)程的入口地址;n子過(guò)程第子過(guò)程第1條指令的偏移地址條指令的偏移地址n執(zhí)行子過(guò)程,含相應(yīng)參數(shù)的保存及恢復(fù);執(zhí)行子過(guò)程,含相應(yīng)參數(shù)的保存及恢復(fù);n恢復(fù)斷點(diǎn),返回原程序。恢復(fù)斷點(diǎn),返回原程序。n將斷點(diǎn)偏移地址由堆棧彈出將斷點(diǎn)偏移地址由堆棧彈出69過(guò)程調(diào)用段內(nèi)調(diào)用段內(nèi)調(diào)用段間調(diào)用段間調(diào)用段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用段內(nèi)間接調(diào)用段內(nèi)間接調(diào)用段間直接調(diào)用段間直接調(diào)用段間間接調(diào)用段間間接調(diào)用701. 段內(nèi)調(diào)用n被調(diào)用程序與調(diào)用程序在同一代碼段被調(diào)用程序與調(diào)用程序在同一代碼段

34、n調(diào)用前只需保護(hù)斷點(diǎn)的偏移地址調(diào)用前只需保護(hù)斷點(diǎn)的偏移地址n格式:格式: CALL NEAR PROCn執(zhí)行過(guò)程:執(zhí)行過(guò)程:近過(guò)程名近過(guò)程名代碼代碼段段1調(diào)用程序調(diào)用程序被調(diào)用程序被調(diào)用程序代碼代碼段段1n 將斷點(diǎn)的偏移地址壓入堆棧將斷點(diǎn)的偏移地址壓入堆棧n 根據(jù)過(guò)程名找子程序入口根據(jù)過(guò)程名找子程序入口71段內(nèi)調(diào)用例(1)CALL TIMRE(2)CALL WORD PTRSI直接調(diào)用直接調(diào)用間接調(diào)用間接調(diào)用44H33HCALL代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段設(shè):設(shè):SI=1200H CS=6000H1200H執(zhí)行第(執(zhí)行第(2)條指令后:)條指令后:6000HCS =3344HIP =722. 段間

35、調(diào)用n子過(guò)程與原調(diào)用程序不在同一代碼段。子過(guò)程與原調(diào)用程序不在同一代碼段。在在調(diào)用之前需保護(hù)斷點(diǎn)的段基地址和偏移地調(diào)用之前需保護(hù)斷點(diǎn)的段基地址和偏移地址。址。先將斷點(diǎn)的先將斷點(diǎn)的CS壓棧,再壓入壓棧,再壓入IP。n格式:格式: CALL FAR PROC 或:或: CALL DWORD PTRSI73段間調(diào)用例n格式:格式: CALL FAR PROCn格式例:格式例:nCALL FAR TIMREnCALL DWORD PTRSIXXHXXHCALL代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段SIXXHXXHCSIP743. 返回指令n功能:功能:n從堆棧中彈出斷點(diǎn)地址,返回原程序從堆棧中彈出斷點(diǎn)地址,返回原程

36、序n格式:格式: RETRETnRETRET指令一般位于子程序的最后。指令一般位于子程序的最后。75四、中斷指令n中斷指令即引起中斷指令即引起CPU產(chǎn)生一次中斷的指令產(chǎn)生一次中斷的指令n中斷源中斷源n中斷的類(lèi)型,總共可有中斷的類(lèi)型,總共可有256個(gè),其中常用的有:個(gè),其中常用的有:nINT 0 處理除處理除0錯(cuò)誤的中斷子程錯(cuò)誤的中斷子程nINT 4H 處理溢出時(shí)的中斷子程處理溢出時(shí)的中斷子程nINT 9H 處理鍵盤(pán)操作的中斷子程處理鍵盤(pán)操作的中斷子程nINT 21H 與與DOS系統(tǒng)功能相關(guān)的中斷子程系統(tǒng)功能相關(guān)的中斷子程76中斷與過(guò)程調(diào)用:n中斷是隨機(jī)事件或異常事件引起,調(diào)用則是事中斷是隨機(jī)事

37、件或異常事件引起,調(diào)用則是事 先已在程序中安排好先已在程序中安排好 ; n響應(yīng)中斷請(qǐng)求不僅要保護(hù)斷點(diǎn)地址,還要保護(hù)響應(yīng)中斷請(qǐng)求不僅要保護(hù)斷點(diǎn)地址,還要保護(hù) FLAGS內(nèi)容;內(nèi)容;n調(diào)用指令在指令中直接給出子程序入口地址,調(diào)用指令在指令中直接給出子程序入口地址, 中斷指令只給出中斷向量碼,入口地址則在向中斷指令只給出中斷向量碼,入口地址則在向 量碼指向的內(nèi)存單元中。量碼指向的內(nèi)存單元中。771. 中斷指令n格式:格式: INT nn說(shuō)明:說(shuō)明: n4中斷類(lèi)型碼中斷類(lèi)型碼n=0 255n 4 XXHXXHXXHXXH入口的段地址入口的段地址入口的偏移地址入口的偏移地址存放中斷服務(wù)子程序入口存放中斷

38、服務(wù)子程序入口地址的單元的偏移地址地址的單元的偏移地址代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段該單元在數(shù)據(jù)段,段地址該單元在數(shù)據(jù)段,段地址=DS 格式格式 INT N ;其中其中 N=0 FFH 即即0255 執(zhí)行執(zhí)行 (SP) (SP)- - 2 (SS:SP) (PSW) IF 0 TF 0 (SP) (SP)- - 2 (SS:SP) (CS) (SP) (SP)- - 2 (SS:SP) (IP) (IP) (0: N 4) (CS) (0: N4 + 2) 中斷調(diào)用指令I(lǐng)NT保保存存現(xiàn)現(xiàn)場(chǎng)場(chǎng)取中斷子程入口地址取中斷子程入口地址入棧保存入棧保存IP入棧保存入棧保存CS入棧保存入棧保存PSW清清IF標(biāo)志標(biāo)志清清TF標(biāo)志標(biāo)志79中斷指令的執(zhí)行過(guò)程n將將FLAGS壓入堆棧;壓入堆棧;n將將INT指令的下一條指令的指令的下一條指令的CS、IP壓棧;壓棧;n由由n4得到存放得到存放中斷向量的地址;中斷向量的地址;n將中斷向量送將中斷向量送CS和和IP寄存器;寄存器;n轉(zhuǎn)入中斷服務(wù)程序。轉(zhuǎn)入中斷服務(wù)程序。執(zhí)行執(zhí)行INT前前 SS:SP(PSW)(CS)(IP) SS:SPIF=0,TF=080中斷指令的執(zhí)行過(guò)程n4 22H11H00H67HIPCS

溫馨提示

  • 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)論