1. 程式人生 > >第十課_串操作&處理器控制指令

第十課_串操作&處理器控制指令

串操作通常以DS:(E)SI來定址源串,以ES:(E)DI來定址目的串,對於源串允許段超越。(E)SI或(E)DI這兩個地址指標在每次串操作後,都自動 進行修改,以指向串中下一個串元素。地址指標修改是增量還是減量由方向標誌來規定。當DF=0,(E)SI及(E)DI的修改為增量;當DF= 1,(E)SI及 (E)DI的修改為減量。根據串元素型別不同,地址指標增減量也不同,在串操作時,位元組型別SI,DI加、減1;字型別SI,DI加、減 2;雙字型別ESI, EDI加、減4。如果需要連續進行串操作,通常加重複字首。重複字首可以和任何串操作指令組合,形成複合指令

串傳送指令 基本格式:[REP]MOVS DESTS, SRCS [REP] MOVSB/MOVSW/MOVSD 功能:將DS:(E)SI規定的源串元素複製到ES:(E)DI規定的目的串單元中

串比較指令 基本格式:[REPE/Z] [REPNZ/NE] CMPS DESTS, SRCS [REPE/Z] [REPNZ/NE] CMPSB/CMPSW/CMPSD

功能:由DS:(E)SI規定的源串元素減去ES:(E)DI指出的目的串元素,結果不回送,僅影響標誌位CF,AF,PF,OF,ZF,SF。當源串元素與 目的串元素值相同時,ZF=1;否則ZF=0。每執行一次串比較指令,根據DF的值和串元素資料型別自動修改(E)SI和(E)DI。

在串比較指令前加重複字首REPE/Z,則表示重複比較兩個字串,若兩個字串的元素相同則比較到(E)CX=0為止,否則結束比較。在 串比較指令 前加重複字首REPNE/NZ,則表示若兩個字串元素不相同時,重複比較直到(E)CX=0為止,否則結束比較

串掃描指令 格式①: [REPE/Z] [REPNE/NZ] SCAS DESTS 格式②: [REPE/Z] [REPNE/NZ] SCASB/SCASW/SCASD

功能:由AL,AX或EAX的內容減去ES:(E)DI規定的目的串元素,結果不回送,僅影響標誌位CF,AF,PF,SF,OF,ZF。當AL, AX或EAX的值 與目的串元素值相同時,ZF=1;否則ZF=0。每執行一次串掃描指令,根據DF的值和串元素資料型別自動修改(E)DI

在串掃描指令前加重複字首REPE/Z,則表示目的串元素值和累加器值相同時重複掃描,直到CX/ECX=0為止,否則結束掃描。若加重複字首 REPNE/NZ,則表示當目的串元素值與累加器值不相等時,重複掃描直到CX/ECX=0時為止,否則結束掃描。 該指令影響標誌位為CF,AF,PF,SF,OF,ZF

串儲存指令 格式:[REP] STOS DESTS [REP] STOSB/STOSW/STOSD

功能:將累加器\[AL,AX,EAX\]中值存入ES:DI/EDI所指的目的串儲存單元中,每傳遞一次,都按DF值以及串元素型別自動修改地址指 針 DI/EDI。若加重複字首REP,則表示將累加器的值連續送目的串儲存單元,直到CX/ECX=0時為止。

該指令不影響標誌位

處理器控制 空操作 格式:NOP 功能:空操作,除使IP/EIP增1外,不做任何工作。該指令不影響標誌位

AIT 功能:檢查BUSY引腳狀態,等待協處理器完成當前工作。

處理器暫停指令 格式:HLT 功能:暫停程式的執行。當產生一個外部中斷或非遮蔽中斷時,才繼續執行下一條指令

中斷指令與DOS功能呼叫 中斷指令格式:INT n 功能:產生中斷型別碼為n的軟中斷,該指令包含中斷操作碼和中斷型別碼兩部分,中斷型別碼n為8位,取值範圍為0~255(00H~FFH)

① 將標誌暫存器FLAGS(或EFLAGS)壓入堆疊; ② 清除TF和IF標誌位; ③ CS,IP/EIP壓入堆疊; ④ 真實模式下,n×4獲取中斷矢量表地址指標;保護模式下,n×8獲取中斷描述符表地址指標; ⑤ 根據地址指標,從中斷矢量表或中斷描述符表中取出中斷服務程式地址送IP/EIP和CS中,控制程式轉移去執行中斷服務程式。

中斷返回指令格式:IRET/IRETD 功能:該指令實現在中斷服務程式結束後,返回到主程式中斷斷點處,繼續執行主程式

中斷返回執行過程: IRET指令彈出堆疊中資料送IP,CS,FLAGS; IRETD指令彈出堆疊中資料送EIP,CS,EFLAGS。