微型計算機原理與接口技術第3章2_第1頁
微型計算機原理與接口技術第3章2_第2頁
微型計算機原理與接口技術第3章2_第3頁
微型計算機原理與接口技術第3章2_第4頁
微型計算機原理與接口技術第3章2_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、18086指令系統(tǒng)指令系統(tǒng)(2)2邏輯運算和移位指令3指令類型n邏輯運算邏輯運算n與,或,非,異或與,或,非,異或n移位操作移位操作n非循環(huán)移位,循環(huán)移位非循環(huán)移位,循環(huán)移位4 一、邏輯運算n邏輯運算指令對邏輯運算指令對 操作數(shù)的操作數(shù)的 要求大多與要求大多與MOV指令指令 相同。相同。n“非非”運算指令運算指令 要求操作數(shù)要求操作數(shù) 不能是立即數(shù);不能是立即數(shù);n除除“非非”運算指令運算指令 外,其余指令的執(zhí)行都會外,其余指令的執(zhí)行都會使標志位使標志位OF=CF=051.“與”指令:n格式:格式: n AND OPRD1,OPRD2n操作:操作: n兩操作數(shù)相兩操作數(shù)相“與與”,結(jié)果送目標地

2、址。,結(jié)果送目標地址。6“與”指令的應用n實現(xiàn)兩操作數(shù)按位相與的運算實現(xiàn)兩操作數(shù)按位相與的運算nAND BL,SIn使目標操作數(shù)的某些位不變,某些位清零使目標操作數(shù)的某些位不變,某些位清零nAND AL,0FHn在操作數(shù)不變的在操作數(shù)不變的 情況下使情況下使CF和和OF清零清零nAND AX,AX7“與”指令應用例n從地址為從地址為3F8H 端口中讀入一個字節(jié)數(shù),端口中讀入一個字節(jié)數(shù),如果該數(shù)如果該數(shù) bit1位為位為1,則可從,則可從38FH端口將端口將DATA為首地址的一個字輸出,否則就不能為首地址的一個字輸出,否則就不能進行數(shù)據(jù)傳送。進行數(shù)據(jù)傳送。 編寫相應的程序段。編寫相應的程序段。8

3、“與”指令應用例開開 始始取待輸出數(shù)的取待輸出數(shù)的偏移地址偏移地址讀入狀態(tài)字讀入狀態(tài)字測試測試bit1位狀態(tài)位狀態(tài)Bit1=1?取輸入口地址取輸入口地址取輸出口地址取輸出口地址 輸出一個字輸出一個字NY9“與”指令應用例 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.“或”運算指令n格式:格式: nOR OPRD1,OPRD2n操作:操作: n兩操作數(shù)相兩操作數(shù)相“或或”,結(jié)果送目標地址,結(jié)果送目標地址11“或”指令的應用n實現(xiàn)兩操作數(shù)實現(xiàn)

4、兩操作數(shù) 相相 “或或”的的 運算運算nOR AX,DIn使某些位不變,某些位置使某些位不變,某些位置“1”nOR CL,0FHn在不改變操作數(shù)的在不改變操作數(shù)的 情況下使情況下使OF=CF=0nOR AX,AX12“或”指令的應用例 OR AL,AL JPE GOON OR AL,80H GOON:.PF=1轉(zhuǎn)移轉(zhuǎn)移13“或”指令的應用將一個二進將一個二進制數(shù)制數(shù)9變?yōu)樽肿優(yōu)樽址?如何實現(xiàn)如何實現(xiàn)?143.“非”運算指令n格式:格式:nNOT OPRDNOT OPRDn操作:操作:n操作數(shù)按位取反再送回原地址操作數(shù)按位取反再送回原地址n注:注:n指令中的操作數(shù)不能是立即數(shù)指令中的操作數(shù)不能

5、是立即數(shù)n指令的執(zhí)行對標志位無影響指令的執(zhí)行對標志位無影響n例:例:NOT BYTE PTRBXNOT BYTE PTRBX154.“異或”運算指令n格式:格式: nXOR OPRD1,OPRD2n操作:操作:n兩操作數(shù)相兩操作數(shù)相“異或異或”,結(jié)果送目標地址,結(jié)果送目標地址n例:例: XOR BL,80H XOR AX,AX165.“測試”指令n格式:格式: nTEST OPRD1,OPRD2n操作:操作: n執(zhí)行執(zhí)行“與與”運算,但運算的結(jié)果不送回目運算,但運算的結(jié)果不送回目標地址。標地址。n應用:應用:n常用于測試某些位的狀態(tài)常用于測試某些位的狀態(tài)17例:n從地址為從地址為3F8H的的

6、端口中讀入一個字節(jié)數(shù),當端口中讀入一個字節(jié)數(shù),當該數(shù)的該數(shù)的 bit1, bit3, bit5位同時為位同時為1時時,可,可從從38FH端口將端口將DATA為首地址的一個字輸出,為首地址的一個字輸出,否則就不能進行數(shù)否則就不能進行數(shù) 據(jù)傳送。據(jù)傳送。 編寫相應的編寫相應的 程序段。程序段。18源程序代碼: LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AXAND AL,2AHCMP AL,2AHJNZ WATTTEST AL,02HJZ WATT ;ZF=1轉(zhuǎn)移轉(zhuǎn)移TEST AL,08HJZ WATTTEST

7、 AL,20HJZ WATTAND AL,2AHXOR AL,2AHJNZ WATT19二、移位指令 非循環(huán)移位指令非循環(huán)移位指令 循環(huán)移位指令循環(huán)移位指令注:注:n 移動一位時由指令直接給出;移動一位時由指令直接給出;n 移動兩位及以上,則移位次數(shù)由移動兩位及以上,則移位次數(shù)由CL指定。指定。201. 非循環(huán)移位指令n邏輯左移邏輯左移n算術左移算術左移n邏輯右移邏輯右移n算術右移算術右移21算術左移和邏輯左移n算術左移指算術左移指 令:令: SAL OPRD,1 SAL OPRD,CLn邏輯左移指邏輯左移指 令:令: SHL OPRD,1 SHL OPRD,CL有符號數(shù)有符號數(shù)無符號數(shù)無符號

8、數(shù)22邏輯右移n格式:格式: SHR OPRD,1 SHR OPRD,CL0CF無符號數(shù)無符號數(shù)的右移的右移23邏輯右移例: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移動移動1次次移動移動2次次24算術右移n格式:格式: SAR OPRD,1 SAR OPRD,CL有符號數(shù)有符號數(shù)的右移的右移CF25非循環(huán)移位指令的應用n左移可實現(xiàn)乘法運算左移可實現(xiàn)乘法運算n右移可實現(xiàn)除法運算右移可實現(xiàn)除法運算 262. 循環(huán)移位指令n不帶進位位的循環(huán)移位不

9、帶進位位的循環(huán)移位n帶進位位的循環(huán)移位帶進位位的循環(huán)移位左移左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、對操作數(shù)的要求與非循環(huán)移位指令相同指令格式、對操作數(shù)的要求與非循環(huán)移位指令相同27不帶進位位的循環(huán)移位CFCF28帶進位位的循環(huán)移位CFCF29循環(huán)移位指令的應用n用于對某些位狀態(tài)的測試;用于對某些位狀態(tài)的測試;n高位部分和低位部分的交換;高位部分和低位部分的交換;n與非循環(huán)移位指令一起組成與非循環(huán)移位指令一起組成32位或更長字位或更長字長數(shù)的移位。長數(shù)的移位。P124例例3-34P124例例3-3530程序功能n將將10001000H H開始存放的開始存放的4 4

10、個壓縮個壓縮BCDBCD碼轉(zhuǎn)換碼轉(zhuǎn)換為為ASCIIASCII碼存放在碼存放在30003000H H開始的單元中開始的單元中去。去。12H34H56H78H1000H3000H31程序例 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,432串操作指令33串操作指令說明n針對數(shù)據(jù)塊或字符串的操作;針對數(shù)據(jù)塊或字符串的操作;n可實現(xiàn)存儲器到存儲器的數(shù)據(jù)傳送;可實現(xiàn)存儲器到存儲器的數(shù)據(jù)傳送;n待操作的數(shù)據(jù)串稱為

11、源串,目標地址稱為待操作的數(shù)據(jù)串稱為源串,目標地址稱為目標串。目標串。34串操作指令的特點n源串一般存放在數(shù)據(jù)段,偏移地址由源串一般存放在數(shù)據(jù)段,偏移地址由SI指定。允許段指定。允許段重設;重設;n目標串必須在附加段,偏移地址由目標串必須在附加段,偏移地址由DI指定;指定;n指令自動修改地址指針,修改方向由指令自動修改地址指針,修改方向由DF決定。決定。 DF=0 DF=1n數(shù)據(jù)塊長度值由數(shù)據(jù)塊長度值由CX指定指定n可增加自動重復前綴以實現(xiàn)自動修改可增加自動重復前綴以實現(xiàn)自動修改CX內(nèi)容。內(nèi)容。增地址方向;增地址方向;減地址方向;減地址方向;35重復前綴n無條件重復無條件重復nREPn條件重復

12、條件重復nREPE 相等重復相等重復nREPZ 為零重復為零重復nREPNE 不相等重復不相等重復nREPNZ 不為零重復不為零重復CX0 ZF=1CX0 ZF=0CX0 重復重復36串操作指令n串傳送串傳送 MOVSn串比較串比較 CMPSn串掃描串掃描 SCASn串裝入串裝入 LODSn串送存串送存 STOS37串操作指令流程(以傳送操作為例)取源串地址取源串地址取目標串地址取目標串地址設串長度設串長度傳送一個字節(jié)或字傳送一個字節(jié)或字修改地址指針修改地址指針修改串長度值修改串長度值傳送完否?傳送完否?NY設操作方向設操作方向381. 串傳送指令n格式:格式: MOVS OPRD1,OPRD

13、2 MOVSB MOVSWn串傳送指令常與無條件重復前綴連用串傳送指令常與無條件重復前綴連用39串傳送指令n對比用對比用MOV指令和指令和MOVS指令實現(xiàn)將指令實現(xiàn)將200個字節(jié)數(shù)據(jù)從內(nèi)存的一個區(qū)域送到個字節(jié)數(shù)據(jù)從內(nèi)存的一個區(qū)域送到另一個區(qū)域的程序段。另一個區(qū)域的程序段。P104例例3-1240串傳送指令例n用串傳送指令實現(xiàn)用串傳送指令實現(xiàn)200個字節(jié)數(shù)據(jù)的傳送:個字節(jié)數(shù)據(jù)的傳送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT412. 串比較指令n格式:格式: CMPS OPRD1,OPRD2 CMPSB CMPSWn串比較指令常與條

14、件重復前綴連用,指令的執(zhí)串比較指令常與條件重復前綴連用,指令的執(zhí) 行不改變操作數(shù),僅影響標志位。行不改變操作數(shù),僅影響標志位。n前綴的操作對標志位不影響前綴的操作對標志位不影響42串比較指令例測試測試200個字節(jié)數(shù)據(jù)是否傳送正確:個字節(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 433. 串掃描指令n格式:格式: SCAS OPRD SCASB SCASWn執(zhí)行與執(zhí)行與CMPS指令相似的操作,只是這里的源指令相似的

15、操作,只是這里的源 操作數(shù)是操作數(shù)是AX或或AL目目 標標操作數(shù)操作數(shù)44串掃描指令的應用n常用于在指定存儲區(qū)域中尋找某個關鍵字。常用于在指定存儲區(qū)域中尋找某個關鍵字。 教材教材p127例例454. 串裝入指令n格式:格式: LODS OPRD LODSB LODSWn操作:操作:n對字節(jié):對字節(jié):n對對 字:字:源操作數(shù)源操作數(shù)DS:SIDS:SIDS:SIDS:SIALALAXAX464. 串裝入指令n用于將內(nèi)存某個區(qū)域的數(shù)據(jù)串依次裝入累加用于將內(nèi)存某個區(qū)域的數(shù)據(jù)串依次裝入累加 器,以便顯示或輸出到接口。器,以便顯示或輸出到接口。nLODS指令一般不加重復前綴。指令一般不加重復前綴。475

16、. 串存儲指令n格式:格式: STOS OPRD STOSB STOSWn操作:操作:n對字節(jié):對字節(jié): ALALn對對 字:字: AXAX目目 標標操作數(shù)操作數(shù)ES:DIES:DI48串存儲指令的應用n常用于將內(nèi)存某個區(qū)域置同樣的值常用于將內(nèi)存某個區(qū)域置同樣的值n此時:此時:n將待送存的數(shù)據(jù)放入將待送存的數(shù)據(jù)放入AL(字節(jié)數(shù))或(字節(jié)數(shù))或AX(字數(shù)(字數(shù)據(jù));據(jù));n確定操作方向(增地址確定操作方向(增地址/減地址)和區(qū)域大?。ù疁p地址)和區(qū)域大?。ùL度值);長度值);n使用串存儲指令使用串存儲指令+無條件重復前綴,實現(xiàn)數(shù)據(jù)傳送。無條件重復前綴,實現(xiàn)數(shù)據(jù)傳送。49串存儲指令例n將內(nèi)存某單

17、元清零將內(nèi)存某單元清零nP129例例3-4050串操作指令應用注意事項n需要定義附加段需要定義附加段n目標操作數(shù)必須在附加段目標操作數(shù)必須在附加段n需要設置數(shù)據(jù)的操作方向需要設置數(shù)據(jù)的操作方向n確定確定DF的狀態(tài)的狀態(tài)n源串和目標串指針分別為源串和目標串指針分別為SI和和DIn串長度值必須由串長度值必須由CX給出給出n注意重復前綴的使用方法注意重復前綴的使用方法n傳送類指令前加無條件重復前綴傳送類指令前加無條件重復前綴n串比較類指令前加條件重復前綴,但前綴不影響串比較類指令前加條件重復前綴,但前綴不影響ZF狀態(tài)狀態(tài)51程序控制指令n轉(zhuǎn)移指令轉(zhuǎn)移指令n循環(huán)控制循環(huán)控制n過程調(diào)用過程調(diào)用n中斷控制

18、中斷控制52程序的執(zhí)行方向n程序控制類指令的本質(zhì)是:程序控制類指令的本質(zhì)是:n控制程序的執(zhí)行方向控制程序的執(zhí)行方向n決定程序執(zhí)行方向的因素:決定程序執(zhí)行方向的因素:nCS,IPn控制程序執(zhí)行方向的方法:控制程序執(zhí)行方向的方法:n修改修改CS 和和IP ,則程序轉(zhuǎn)向另一個代碼段執(zhí)行;,則程序轉(zhuǎn)向另一個代碼段執(zhí)行;n僅修改僅修改IP,則程序?qū)⒏淖儺斍暗膱?zhí)行順序,轉(zhuǎn)向本,則程序?qū)⒏淖儺斍暗膱?zhí)行順序,轉(zhuǎn)向本代碼段內(nèi)其它某處執(zhí)行。代碼段內(nèi)其它某處執(zhí)行。53一、轉(zhuǎn)移指令無條件無條件轉(zhuǎn)移指令轉(zhuǎn)移指令 無條件轉(zhuǎn)移到目標地址,執(zhí)行新的指令無條件轉(zhuǎn)移到目標地址,執(zhí)行新的指令有條件轉(zhuǎn)移指令有條件轉(zhuǎn)移指令 在具備一定

19、條件的情況下轉(zhuǎn)移到目標地址在具備一定條件的情況下轉(zhuǎn)移到目標地址通過修改指令的通過修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址實現(xiàn)程序的轉(zhuǎn)移實現(xiàn)程序的轉(zhuǎn)移541. 無條件轉(zhuǎn)移指令n格式:格式: JMP OPRD目標地址目標地址與與JMP在同在同一代碼段一代碼段與與JMP不在同不在同一代碼段一代碼段原則上可實現(xiàn)在整個內(nèi)存空間的轉(zhuǎn)移原則上可實現(xiàn)在整個內(nèi)存空間的轉(zhuǎn)移55無條件段內(nèi)轉(zhuǎn)移n轉(zhuǎn)移的轉(zhuǎn)移的目標地址目標地址在當前代碼段內(nèi),段地址不在當前代碼段內(nèi),段地址不 改改變。變。n即:即:目標地址目標地址是是16位偏移地址。位偏移地址。指令中直接給出指令中直接給出目標地址目標地址由指令中的

20、寄存器或由指令中的寄存器或存儲器操作數(shù)指出目存儲器操作數(shù)指出目標地址標地址段內(nèi)直接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移段內(nèi)間接段內(nèi)間接轉(zhuǎn)移轉(zhuǎn)移56段內(nèi)直接轉(zhuǎn)移n轉(zhuǎn)移的目標地址由指令直接給出轉(zhuǎn)移的目標地址由指令直接給出n格式:格式:nJMP Label近地址標號近地址標號57段內(nèi)直接轉(zhuǎn)移示圖JMPLabel代代碼碼段段位移量位移量下一條要執(zhí)行指令的偏移地址下一條要執(zhí)行指令的偏移地址=當前當前IP+位移量位移量JMP Label58段內(nèi)間接轉(zhuǎn)移n段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移n轉(zhuǎn)移的目標地址存放在某個轉(zhuǎn)移的目標地址存放在某個16位寄存器或存儲器位寄存器或存儲器 的某兩個單元中的某兩個單元中n例:例:nJMP BXn若:若:

21、BX=1200Hn則:轉(zhuǎn)移的目標地址則:轉(zhuǎn)移的目標地址=1200HJMP代代碼碼段段1200HMOV59段內(nèi)間接轉(zhuǎn)移例nJMP WORD PTRBX 設:設:BX=1200HJMP代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段BX=1200XXHXXHIP指令碼指令碼60無條件段間轉(zhuǎn)移n轉(zhuǎn)移的轉(zhuǎn)移的目標地址目標地址不在當前代碼段內(nèi)。不在當前代碼段內(nèi)。n目標地址目標地址為為32位,包括段地址和偏移地址。位,包括段地址和偏移地址。指令中直接給出指令中直接給出目標地址目標地址由指令中的由指令中的32位存儲器位存儲器操作數(shù)指出目標地址操作數(shù)指出目標地址段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移61段間直接轉(zhuǎn)移n段內(nèi)直

22、接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移n轉(zhuǎn)移的目標地址由指令直接給出轉(zhuǎn)移的目標地址由指令直接給出n格式:格式:nJMP FAR Label遠地址標號遠地址標號62段間直接轉(zhuǎn)移示圖JMPLabel代代碼碼段段1Label與與JMP之間的位移量之間的位移量代代碼碼段段2XXHXXHXXHXXHIPCS63段間間接轉(zhuǎn)移n段內(nèi)間接尋址段內(nèi)間接尋址n轉(zhuǎn)移的目標地址由指令中的轉(zhuǎn)移的目標地址由指令中的32位操作數(shù)給出位操作數(shù)給出n 例:例:nJMP DWORD PTRBXXXHXXHXXHXXHBXIPCSJMP指令碼指令碼代代碼碼段段1代代碼碼段段2數(shù)數(shù)據(jù)據(jù)段段64無條件轉(zhuǎn)移指令例(1) 2000:0100 MOV AX,1

23、200H(2) 2000:0103 JMP NEXT (3) 2000:0120 NEXT: MOV BX,1200H (4) JMP BX (5) 2000:1200 65無條件轉(zhuǎn)移指令例nMOV SI,1122HnMOV WORD PTRSI,0120HnADD SI,2nMOV WORD PTRSI,0122HJMP DWORD PTRSI-2JMP WORD PTRSIJMP1122H代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段01H22H20H01HIPCSIP662. 條件轉(zhuǎn)移指令n在滿足一定條件下,程序轉(zhuǎn)移到目標地在滿足一定條件下,程序轉(zhuǎn)移到目標地址繼續(xù)執(zhí)行址繼續(xù)執(zhí)行n條件轉(zhuǎn)移指令均為段內(nèi)短轉(zhuǎn)移,即

24、轉(zhuǎn)移條件轉(zhuǎn)移指令均為段內(nèi)短轉(zhuǎn)移,即轉(zhuǎn)移 范圍為:范圍為: -128-+127p13267條件轉(zhuǎn)移指令的應用n幾種條件轉(zhuǎn)移指令的應用幾種條件轉(zhuǎn)移指令的應用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)。常用于有符號數(shù)溢出的判斷的狀態(tài)。常用于有符號數(shù)溢出的判斷nJP/JPEn判斷判斷PF的狀態(tài)。用于判斷運算結(jié)果低的狀態(tài)。用于判斷運算結(jié)果低8位中位中1的個數(shù)是否為偶數(shù)的個數(shù)是否為偶數(shù)nJA/JAE/JB/JBEn判斷判斷CF或或CF+ZF的狀態(tài)。常用于無符號

25、數(shù)的大小比較的狀態(tài)。常用于無符號數(shù)的大小比較68轉(zhuǎn)移指令例n統(tǒng)計內(nèi)存數(shù)據(jù)段中以統(tǒng)計內(nèi)存數(shù)據(jù)段中以TABLE為首地址的為首地址的100個個8位符號數(shù)中正數(shù)、負數(shù)和零元數(shù)位符號數(shù)中正數(shù)、負數(shù)和零元數(shù)的個數(shù)。的個數(shù)。69轉(zhuǎn)移指令例(流程圖)將存放各元素個將存放各元素個數(shù)的單元清零數(shù)的單元清零取首地址取首地址設串長度設串長度取一個字節(jié)數(shù)取一個字節(jié)數(shù)正數(shù)個數(shù)加正數(shù)個數(shù)加1零元素加零元素加1為負?為負?為零?為零?負數(shù)個數(shù)加負數(shù)個數(shù)加1NYNY70二、循環(huán)控制指令n循環(huán)范圍:循環(huán)范圍:n以當前以當前IP為中心的為中心的-128+127范圍內(nèi)循環(huán)。范圍內(nèi)循環(huán)。n循環(huán)次數(shù)由循環(huán)次數(shù)由CX寄存器指定。寄存器指定

26、。n循環(huán)指令:循環(huán)指令:LOOP *LOOPZ *LOOPNZ無條件循環(huán)指令無條件循環(huán)指令條件循環(huán)指令條件循環(huán)指令71無條件循環(huán)指令n格式:格式: LOOP LABELn循環(huán)條件:循環(huán)條件: CX 0n操作:操作: DEC CX JNZ 符號地址符號地址72三、過程調(diào)用和返回n用于調(diào)用一個子過程;用于調(diào)用一個子過程;n子過程由程序員預先設計子過程由程序員預先設計 并裝入內(nèi)存并裝入內(nèi)存 n子過程執(zhí)行結(jié)束后要返回子過程執(zhí)行結(jié)束后要返回 原調(diào)用處原調(diào)用處調(diào)用程序調(diào)用程序斷點斷點入口入口地址地址子程序子程序73調(diào)用指令的執(zhí)行過程n保護斷點;保護斷點;n將調(diào)用指令的下一條指令的地址(斷點)壓入堆棧將調(diào)用

27、指令的下一條指令的地址(斷點)壓入堆棧n獲取子過程的入口地址;獲取子過程的入口地址;n子過程第子過程第1條指令的偏移地址條指令的偏移地址n執(zhí)行子過程,含相應參數(shù)的保存及恢復;執(zhí)行子過程,含相應參數(shù)的保存及恢復;n恢復斷點,返回原程序。恢復斷點,返回原程序。n將斷點偏移地址由堆棧彈出將斷點偏移地址由堆棧彈出74過程調(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)用751. 段內(nèi)調(diào)用n被調(diào)用程序與調(diào)用程序在同一代碼段被調(diào)用程序與調(diào)用程序在同一代碼段n調(diào)用前只需保護斷點的偏移地址調(diào)用前只需保護斷點的偏移地址n格式:格式

28、: CALL NEAR PROCn執(zhí)行過程:執(zhí)行過程:近過程名近過程名代碼代碼段段1調(diào)用程序調(diào)用程序被調(diào)用程序被調(diào)用程序代碼代碼段段1n 將斷點的偏移地址壓入堆棧將斷點的偏移地址壓入堆棧n 根據(jù)過程名找子程序入口根據(jù)過程名找子程序入口76段內(nèi)調(diào)用例(1)CALL TIMRE(2)CALL WORD PTRSI直接調(diào)用直接調(diào)用間接調(diào)用間接調(diào)用44H33HCALL代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段設:設:SI=1200H CS=6000H1200H執(zhí)行第(執(zhí)行第(2)條指令后:)條指令后:6000HCS =3344HIP =772. 段間調(diào)用n子過程與原調(diào)用程序不在同一代碼段子過程與原調(diào)用程序不在同一代碼段

29、n先將斷點的先將斷點的CS壓棧,再壓入壓棧,再壓入IP。調(diào)用前需保護斷點的段基地址和偏移地址調(diào)用前需保護斷點的段基地址和偏移地址78段間調(diào)用例n格式:格式: CALL FAR PROCn格式例:格式例:nCALL FAR TIMREnCALL DWORD PTRSIXXHXXHCALL代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段SIXXHXXHCSIP793. 返回指令n功能:功能:n從堆棧中彈出斷點地址,返回原程序從堆棧中彈出斷點地址,返回原程序n格式:格式: RETRETnRETRET指令一般位于子程序的最后。指令一般位于子程序的最后。80四、中斷指令n中斷中斷n中斷源中斷源n中斷的類型中斷的類型n中斷指令中

30、斷指令n引起引起CPU產(chǎn)生一次中斷的指令產(chǎn)生一次中斷的指令81中斷與過程調(diào)用:n中斷是隨機事件或異常事件引起,調(diào)用則是事中斷是隨機事件或異常事件引起,調(diào)用則是事 先已在程序中安排好先已在程序中安排好 ; n響應中斷請求不僅要保護斷點地址,還要保護響應中斷請求不僅要保護斷點地址,還要保護 FLAGS內(nèi)容;內(nèi)容;n調(diào)用指令在指令中直接給出子程序入口地址,調(diào)用指令在指令中直接給出子程序入口地址, 中斷指令只給出中斷向量碼,入口地址則在向中斷指令只給出中斷向量碼,入口地址則在向 量碼指向的內(nèi)存單元中。量碼指向的內(nèi)存單元中。821. 中斷指令n格式:格式: INT nn說明:說明: n4中斷類型碼中斷類型碼n=0 255n 4 XXHXXHXXHXXH入口的段地址入口的段地址入口的偏移地址入口的偏移地址存放中斷服務子程序入口存放中斷服務子程序入口地址的單元的偏移地址地址的單元的偏移地址代代碼碼段段數(shù)數(shù)據(jù)據(jù)段段

溫馨提示

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

評論

0/150

提交評論