青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

luqingfei@C++

為中華之崛起而崛起!
兼聽則明,偏聽則暗。

匯編語(yǔ)言--外中斷

 

外中斷

 

以前我們討論的都是CPU對(duì)指令的執(zhí)行。

我們知道,CPU在計(jì)算機(jī)系統(tǒng)中,除了能夠執(zhí)行指令,進(jìn)行運(yùn)算以外,還應(yīng)該能夠?qū)ν獠吭O(shè)備進(jìn)行控制,接收它們的輸入,向它們進(jìn)行輸出。也就是說(shuō),CPU除了有運(yùn)算能力外,還要有I/OInput/Output,輸入/輸出)能力。

比如,我們按下鍵盤上的確個(gè)鍵,CPU最終要能夠處理這個(gè)鍵。在使用文本編輯器時(shí),按下a鍵后,我們可以看到屏幕上出現(xiàn)“a”,是CPU將從鍵盤上輸入的鍵所對(duì)應(yīng)的字符送到顯示上的。

 

要及時(shí)處理外設(shè)的輸入,顯然需要解決兩個(gè)問(wèn)題:

一是外設(shè)的輸入隨時(shí)可能發(fā)生,CPU如何得知?

二是CPU從何處得到外設(shè)的輸入?

 

 

 

接口芯片和端口

在前面我們知道,PC系統(tǒng)的接口卡和主板上,裝有各種接口芯片。

這些外設(shè)接口芯片的內(nèi)部有若干寄存器,CPU將這些寄存器當(dāng)作端口來(lái)訪問(wèn)。

 

外設(shè)的輸入不直接送入內(nèi)存和CPU,而是送入相關(guān)的接口芯片的端口中;

CPU向外設(shè)的輸出也不是直接送入外設(shè),而是先送入端口中,再由相關(guān)的芯片送到外設(shè)。

CPU還可以向外設(shè)輸出控制命令,而這些控制命令也是先送到相關(guān)芯片的端口中,然后再由相關(guān)的芯片根據(jù)命令對(duì)外設(shè)實(shí)施控制。

 

可見(jiàn),CPU通過(guò)端口和外部設(shè)備進(jìn)行聯(lián)系

 

 

 

外中斷信息

現(xiàn)在,我們知道了外設(shè)的輸入被存放在端口中,可是外設(shè)的輸入隨時(shí)都有可能到達(dá),CPU如何及時(shí)地知道,并進(jìn)行處理呢?更一般地講,就是外設(shè)隨時(shí)都可能發(fā)生需要CPU及時(shí)處理的事件,CPU如何及時(shí)得知并進(jìn)行處理?

 

       CPU提供中斷機(jī)制來(lái)滿足這種需要。前面講過(guò),當(dāng)CPU的內(nèi)部有需要處理的事情發(fā)生的時(shí)候,將產(chǎn)生中斷信息,引發(fā)中斷過(guò)程。這種中斷信息來(lái)自CPU的內(nèi)部。

 

       還有一種中斷信息,來(lái)自于CPU外部,當(dāng)CPU外部有需要處理的事情發(fā)生的時(shí)候,比如說(shuō),外設(shè)的輸入到達(dá),相關(guān)芯片將向CPU發(fā)出相應(yīng)的中斷信息。CPU在執(zhí)行完當(dāng)前指令后,可以檢測(cè)到發(fā)送過(guò)來(lái)的中斷信息,引發(fā)中斷過(guò)程,處理外設(shè)的輸入。

 

       PC系統(tǒng)中,外中斷源一共有兩類:

1、可屏蔽中斷

       可屏蔽中斷是CPU可以不響應(yīng)的外中斷,CPU是否響應(yīng)可屏蔽中斷,要看標(biāo)志寄存器的IF位的設(shè)置。當(dāng)CPU檢測(cè)到可屏蔽中斷信息時(shí),如果IF=1,則CPU在執(zhí)行完當(dāng)前指令后響應(yīng)中斷,引發(fā)中斷過(guò)程;如果IF=0,則不響應(yīng)可屏蔽中斷。

       回憶一下內(nèi)中斷所引發(fā)的中斷過(guò)程:

       1)取中斷類型碼n

       2)標(biāo)志寄存器入棧,IF=0TF=0

       3CSIP入棧;

       4(IP)=(n*4)(CS)=(n*4+2)

       由此轉(zhuǎn)去執(zhí)行中斷處理程序。

 

       可屏蔽中斷所引發(fā)的中斷過(guò)程,除在第1步的實(shí)現(xiàn)上有所不同外,基本上和內(nèi)中斷的中斷過(guò)程相同。因?yàn)榭善帘沃袛嘈畔?lái)自于CPU外部,中斷類型碼是通過(guò)數(shù)據(jù)總路線送入CPU的;而內(nèi)中斷的中斷類型碼是在CPU內(nèi)部產(chǎn)生的。

 

       現(xiàn)在,我們可以解釋中斷過(guò)程中將IF設(shè)置為0的原因了。將IF0的原因就是,在進(jìn)入中斷處理程序后,禁止其他的可屏蔽中斷。

 

       當(dāng)然,如果在中斷處理程序中需要處理可屏蔽中斷,可以用指令將IF18086CPU提供的設(shè)置IF的指令如下:

       sti,用于設(shè)置IF=1

       cli,用于設(shè)置IF=0

 

2、不可屏蔽中斷

       不可屏蔽中斷是CPU必須響應(yīng)的外中斷。當(dāng)CPU檢測(cè)到不可屏蔽中斷信息時(shí),則在執(zhí)行完當(dāng)前指令后,立即響應(yīng),引發(fā)中斷過(guò)程。

       對(duì)于8086CPU,不可屏蔽中斷的中斷類型碼固定為2,所以中斷過(guò)程中,不需要取中斷類型碼。則不可屏蔽中斷的中斷過(guò)程為:

       1)標(biāo)志寄存器入棧,IF=0TF=0

       2CSIP入棧;

       3(IP)=(8)(CS)=(0AH)

 

       幾乎所有由外設(shè)引發(fā)的外中斷,都是可屏蔽中斷。當(dāng)外設(shè)有需要處理的事件(比如說(shuō)鍵盤輸入)發(fā)生時(shí),相關(guān)芯片向CPU發(fā)出可屏蔽中斷信息。不可屏蔽中斷是在系統(tǒng)中有必須處理的情況發(fā)生時(shí)用來(lái)通知CPU的中斷信息。

 

 

 

 

PC機(jī)鍵盤的處理過(guò)程

下面來(lái)看一下鍵盤輸入的處理過(guò)程,并以此來(lái)體會(huì)一下PC機(jī)處理外設(shè)輸入的基本方法。

1、鍵盤輸入

       鍵盤上的每一個(gè)鍵相當(dāng)于一個(gè)開關(guān),鍵盤中有一個(gè)芯片對(duì)鍵盤上的每一個(gè)鍵的開關(guān)狀態(tài)進(jìn)行掃描。

       按下一個(gè)鍵時(shí),開關(guān)接通,該芯片就產(chǎn)生一個(gè)掃描碼,掃描碼說(shuō)明了按下的鍵在鍵盤上的位置。掃描碼被送入主板上的相關(guān)接口芯片的寄存器中,該寄存器的端口地址為60H

       松開按下的鍵時(shí),也產(chǎn)生一個(gè)掃描碼,掃描碼說(shuō)明了松開的鍵在鍵盤上的位置。松開按鍵時(shí)產(chǎn)生的掃描碼也被送入60H端口中。

       一般將按下一個(gè)鍵時(shí)產(chǎn)生的掃描碼稱為通碼,松開一個(gè)鍵產(chǎn)生的掃描碼稱為斷碼。

       掃描碼長(zhǎng)度為一個(gè)字節(jié),通碼的第7位為0,斷碼的第7位為1,即:

       斷碼=通碼+80H

       比如:g鍵的通碼為22H,斷碼為a2H

 

2、引發(fā)9號(hào)中斷

       鍵盤的輸入到達(dá)60H端口時(shí),相關(guān)的芯片就會(huì)向CPU發(fā)出中斷類型碼為9的可屏蔽中斷信息。CPU檢測(cè)到該中斷信息后,如果IF=1,則響應(yīng)中斷,引發(fā)中斷過(guò)程,轉(zhuǎn)去執(zhí)行int 9中斷例程。

 

3、執(zhí)行int 9中斷例程

       BIOS提供了int 9中斷例程,用來(lái)進(jìn)行基本的鍵盤輸入處理,主要的工作如下:

       1)讀出60H端口中的掃描碼;

       2)如果是字符鍵的掃描碼,將該掃描碼和它所對(duì)應(yīng)的字符碼(即ASCII碼)送入內(nèi)存中的BIOS鍵盤緩沖區(qū);如果是控制鍵(比如Ctrl)和切換鍵(比如CapsLock)的掃描碼,則將其轉(zhuǎn)變?yōu)?span>狀態(tài)字節(jié)(用二進(jìn)制位記錄控制鍵和切換鍵狀態(tài)的字節(jié))寫入內(nèi)存中存儲(chǔ)狀態(tài)字節(jié)的單元

       3)對(duì)鍵盤系統(tǒng)進(jìn)行相關(guān)的控制,比如說(shuō),向相關(guān)芯片發(fā)出應(yīng)答信息。

 

       BIOS鍵盤緩沖區(qū)是系統(tǒng)啟動(dòng)后,BIOS用于存放int 9中斷例程所接收的鍵盤輸入的內(nèi)存區(qū)。該內(nèi)存區(qū)可以存儲(chǔ)15個(gè)鍵盤輸入,因?yàn)?/span>int 9中斷例程除了接收掃描碼外,還要產(chǎn)生和掃描碼對(duì)應(yīng)的字符碼,所以在BIOS鍵盤緩沖區(qū)中,一個(gè)鍵盤輸入用一個(gè)字單元存放高位字節(jié)存放掃描碼,低位字節(jié)存放字符碼

 

       0040:17單元存儲(chǔ)鍵盤狀態(tài)字節(jié),該字節(jié)記錄了控制鍵和切換鍵的狀態(tài)。鍵盤狀態(tài)字節(jié)各位記錄的信息如下:

       0:右shift狀態(tài),置1表示按下右shift鍵;

       1:左shift狀態(tài),置1表示按下左shift鍵;

       2Ctrl狀態(tài),置1表示按下Ctrl鍵;

       3Alt狀態(tài),置1表示按下Alt鍵;

       4ScrolLock狀態(tài),置1表示Scroll指示燈亮;

       5NumLock狀態(tài),置1表示小鍵盤輸入的是數(shù)字;

       6CapsLock狀態(tài),置1表示輸入大寫字母;

       7Insert狀態(tài):置1表示處于刪除狀態(tài)。

 

 

 

 

編寫int 9中斷例程

鍵盤輸入的處理過(guò)程:

1)鍵盤產(chǎn)生掃描碼;

2)掃描碼送入60h端口;

3)引發(fā)9號(hào)中斷;

4CPU執(zhí)行int 9中斷例程處理鍵盤輸入。

 

上面的過(guò)程中,第(1)、(2)、(3)步都是由硬件系統(tǒng)完成的。我們能夠改變的只有int 9的中斷處理程序。

 

編程:在屏蔽中間依次顯示“a~z”,并可以讓人看清。在顯示的過(guò)程中,按下Esc鍵后,改變顯示的顏色。

assume cs:code

code segment

 start:  mov ax,0b800h

              mov es,ax

              mov ah,’a’

       s:     mov es:[160*12+40*2],ah

              inc ah

              cmp ah,’z’

              jna s

 

              mov ax,4c00h

              int 21h

code ends

end start

 

上面的程序的執(zhí)行過(guò)程中,我們無(wú)法看清屏幕上的顯示,因?yàn)橐粋€(gè)字母剛顯示到屏幕上,因?yàn)?/span>CPU執(zhí)行指令太快了。

我們應(yīng)該在每顯示一個(gè)字母后,延時(shí)一段時(shí)間,讓人看清后,再顯示下一個(gè)字母。

那么如何延時(shí)呢?我們讓CPU執(zhí)行一段時(shí)間的空循環(huán),因?yàn)楝F(xiàn)在的CPU的速度都非常快,所以循環(huán)的次數(shù)一定要大,我們用兩個(gè)16位寄存器來(lái)存放32位的循環(huán)次數(shù)。如下:

       mov dx,10h

       mov ax,0

 s: sub ax,1

       sbb dx,0

       cmp ax,0

       jne s

       cmp dx,0

       jne s

 

上面的程序,循環(huán)100000h次。我們可以將循環(huán)延時(shí)的程序段寫為一個(gè)子程序。

assume cs:code

stack segment

       db 128 dup (0)

stack ends

 

code segment

 start:    mov ax,stack

              mov ss,ax

              mov sp,128

 

              mov ax,0b800h

              mov ex,ax

              mov ah,’a’

     s:   mov es:[160*12+40*2],ah

              call delay

              inc ah

              cmp ah,’z’

              jna s

 

              mov ax,4c00h

              int 21h

 

 delay:   push ax

              push dx

              mov dx,1000h        ;循環(huán)10000000次,讀者可以根據(jù)自己機(jī)器的速度調(diào)整循環(huán)次數(shù)

              mov ax,0

     s1: sub ax,1

              sbb dx,0

              jne sl

              cmp dx,0

              jne s1

              pop dx

              pop ax

              ret

code ends

end start

 

上面的程序,顯示“a~z”,并可以讓人看清,這個(gè)任務(wù)已經(jīng)實(shí)現(xiàn)。

那么如何實(shí)現(xiàn),按下Esc鍵后,改變顯示的顏色呢?

       鍵盤輸入到達(dá)60h端口后,就會(huì)引發(fā)9號(hào)中斷,CPU則轉(zhuǎn)去執(zhí)行int 9中斷例程。我們可以編寫int 9中斷例程,功能如下:

       1)從60h端口讀出鍵盤的輸入;

       2)調(diào)用BIOSint 9中斷全程,處理其他硬件細(xì)節(jié);

       3)判斷是否為Esc鍵的掃描碼,如果是,改變顯示的顏色后返回;如果不是則直接返回。

 

分析:

1、從端口60h讀出鍵盤的輸入

       in al,60h

2、調(diào)用BIOSint 9中斷例程

       注意,我們寫的中斷處理程序要成為新的int 9中斷例程,主程序必須要將中斷向量表中的int 9中斷例程的入口地址改為我們寫的中斷處理程序的入口地址。則在新的中斷處理程序中調(diào)用原來(lái)的int 9中斷例程時(shí),中斷向量表中的int 9中斷例程的入口地址卻不是原來(lái)的int 9中斷例程的地址,所以我們不能使用int 指令直接調(diào)用。

 

       要能在我們寫的新的中斷例程中調(diào)用原來(lái)的中斷例程,就必須在將中斷向量表中的中斷例程的入口地址改為新地址之前,將原來(lái)的入口地址保存起來(lái)。這樣,在需要調(diào)用的時(shí)候我們才能找到原來(lái)的中斷例程的入口。

 

       有了入口地址后,我們?nèi)绾芜M(jìn)行調(diào)用呢?

       當(dāng)然不能使用指令int 9來(lái)調(diào)用,我們可以用別的指令來(lái)對(duì)int 指令進(jìn)行一些模擬,從而實(shí)現(xiàn)對(duì)中斷例程的調(diào)用。

 

       int指令在執(zhí)行的時(shí)候,CPU進(jìn)行下面的工作:

       1)取中斷類型碼n

       2)標(biāo)志寄存器入棧;

       3IF=0TF=0

       4CSIP入棧;

       5(IP)=(n*4)(CS)=(n*4+2)

 

       取中斷類型碼是為了定位中斷例程的入口地址,在我們的問(wèn)題中,中斷例程的入口地址已經(jīng)知道。所以,我們用別的指令模擬int指令時(shí)候,不需要做第(1)步。在假設(shè)要調(diào)用的中斷例程的入口地址在ds:0ds:2單元中的前提下,我們將int過(guò)程用下面幾步模擬:

       1)標(biāo)志寄存器入棧;

       2IF=0TF=0

       3CSIP入棧;

       4(IP)=((ds)*16+0)(CS)=((ds)*16+2)

 

所以int 過(guò)程的模擬過(guò)程變?yōu)椋?/span>

       1)標(biāo)志寄存器入棧;

       2IF=0TF=0

       3call dword ptr ds:[0]

 

對(duì)于(1),可用pushf實(shí)現(xiàn)。

對(duì)于(2),可用下面的指令實(shí)現(xiàn)。

pushf

pop ax

and ah,11111100b                 ;IFTF為標(biāo)志寄存的第9位和第8

push ax

popf

 

則,模擬int指令的調(diào)用功能,調(diào)用入口地址在ds:0ds:2中的中斷例程的程序?yàn)椋?/span>

pushf            ;標(biāo)志寄存器入棧

 

pushf

pop ax

and ah,11111100b

push ax

popf                             ;IF=0, TF=0

 

call dword ptr ds:[0]      ;CSIP入棧;(IP)=((ds)*16+0), (CS)=((ds)*16+2)

 

3、如果是Esc鍵掃描碼,改變顯示的顏色后返回

       如果改變顯示的顏色?

       顯示的位置是屏幕的中間,即第1240列,顯存中的偏移地址為:160*12+40*2。所以字符的ASCII碼要送入b800:160*12+40*2處。而b800:160*12+40*2+1處是字符的屬性,我們只要改變此處的數(shù)據(jù)就可以改變?cè)?/span>b800:160*12+40*2處顯示的字符的顏色了。

 

該程序的最后一個(gè)問(wèn)題是,要在程序返回前,將中斷向量表中的int 9中斷例程的入口地址恢復(fù)為原來(lái)的地址。否則程序返回后,別的程序?qū)o(wú)法使用鍵盤。

 

完整的程序如下:

assume cs:code

 

stack segment

 db 128 dup (0)

stack ends

 

data segment

 dw 0,0

data ends

 

code segment

 start:mov ax,stack

        mov ss,ax

        mov sp,128

       

        mov ax,data

        mov ds,ax

       

        mov ax,0

        mov es,ax

       

        push es:[9*4]

        pop ds:[0]

        push es:[9*4+2]

        pop ds:[2]      ;將原來(lái)的int 9中斷例程的入口地址保存在ds:0ds:2單元中

       

        mov word ptr es:[9*4],offset int9

        mov es:[9*4+2],cs   ;在中斷向量表中設(shè)置新的int 9中斷例程的入口地址

       

        mov ax,0b800h

        mov es,ax

        mov ah,'a'

     s: mov es:[160*12+40*2],ah

        call delay

        inc ah

        cmp ah,'z'

        jna s

       

        mov ax,0

        mov es,ax

       

        push ds:[0]

        pop es:[9*4]

        push ds:[2]

        pop es:[9*4+2]    ;將中斷向量表中int 9中斷例程的入口恢復(fù)為原來(lái)的地址

       

        mov ax,4c00h

        int 21h

       

 delay:push ax

        push dx

        mov dx,1000h

        mov ax,0

     s1:sub ax,1

        sbb dx,0

        cmp ax,0

        jne s1

        cmp dx,0

        jne s1

        pop dx

        pop ax

        ret

       

        ;-------以下為新的int 9中斷例程------------------

 int9: push ax

        push bx

        push es

       

        in al,60h

       

        pushf

        pushf

        pop bx

        and bh,11111100b

        push bx

        popf

        call dword ptr ds:[0] ;對(duì)int指令進(jìn)行模擬,調(diào)用原來(lái)的int 9中斷例程

       

        cmp al,1

        jne int9ret

       

        mov ax,0b800h

        mov es,ax

        inc byte ptr es:[160*12+40*2+1]   ;將屬性值加1,改變顏色

       

int9ret:pop es

        pop bx

        pop ax

        iret

       

code ends

end start

 

 

檢測(cè)點(diǎn)15.1

1)模擬int指令調(diào)用原int9中斷例程的程序段是可以精簡(jiǎn)的,因?yàn)樵谶M(jìn)入中斷例程后,IFTF都已經(jīng)置0,沒(méi)有必要再進(jìn)行設(shè)置了。

       對(duì)于程序段:

       pushf

       pushf

       pop ax

       and ah,11111100b

       push ax

       popf

       call dword ptr ds:[0]

可以精簡(jiǎn)為:

pushf

call dword ptr ds:[0]

再條指令。

 

2)仔細(xì)分析上面程序中的主程序,會(huì)發(fā)現(xiàn)一個(gè)潛在的問(wèn)題?在主程序中,如果在執(zhí)行設(shè)置int9中斷例程的段地址和偏移地址的指令之間發(fā)生了鍵盤中斷,則CPU將轉(zhuǎn)去一個(gè)錯(cuò)誤的地址執(zhí)行,將發(fā)生錯(cuò)誤。

       排除潛在問(wèn)題方法:

       pop ds:[2]指令后加入一條cli指令,并在mov es:[9*4+2],cs指令后加入一條sti指令即可。意思是在這段期間,讓IF=0,禁止或屏蔽外中斷處事程序的執(zhí)行。

 

 

 

 

 

安裝新的int9中斷處理例程

安裝一個(gè)新的int 9中斷例程,使得原int 9中斷例程的功能得到擴(kuò)展。

任務(wù):安裝一個(gè)新的int 9中斷例程,功能:在DOS下,按F1鍵后改變當(dāng)前屏幕的顯示顏色,其他的鍵照常處理。

分析:

1)改變屏幕的顯示顏色

       改變從B8000開始的4000個(gè)字節(jié)中的所有奇地址單元中的內(nèi)容,當(dāng)前屏幕的顯示顏色即發(fā)生改變。程序如下:

       mov ax,0b800h

       mov es,ax

       mov bx,1

       mov cx,2000

 s: nc byte ptr es:[bx]

       add bx,2

       loop s

 

2)其他鍵照常處理

       可以調(diào)用原int 9中斷處理程序,來(lái)處理其他的鍵盤輸入。

 

3)原int 9中斷例程入口地址的保存

       因?yàn)樵诰帉懙男?/span>int 9中斷例程中要調(diào)用原int 9中斷例程,所以,要保存原int 9中斷例程的入口地址。保存在哪里?顯然不能保存在安裝程序中,因?yàn)榘惭b程序返回后地址將丟失。我們將地址保存在0:200單元處。

 

4)新int 9中斷例程的安裝

       我們可將新的int 9中斷例程安裝在0:204處。

 

完整的程序如下:

assume cs:code

 

stack segment

 db 128 dup (0)

stack ends

 

code segment

 start:

        mov ax,stack

        mov ss,ax

        mov sp,128

       

        push cs

        pop ds

       

        mov ax,0

        mov es,ax

       

        mov si,offset int9    ;設(shè)置ds:si指向源地址

        mov di,204h           ;設(shè)置es:di指向目的地址

        mov cx,offset int9end - offset int9   ;設(shè)置cx為傳輸長(zhǎng)度

        cld                   ;設(shè)置傳輸方向?yàn)檎?/span>

        rep movsb

       

        push es:[9*4]

        pop es:[200h]

        push es:[9*4+2]

        pop es:[202h]     ;保存原有的int 9中斷例程入口地址

       

        cli               ;設(shè)置IF0,禁止CPU執(zhí)行可屏蔽外中斷。

        mov word ptr es:[9*4],204h

        mov word ptr es:[9*4+2],0   ;設(shè)置int 9中斷向量,指向新的中斷例程入口地址

        sti               ;恢復(fù)設(shè)置IF1

       

        mov ax,4c00h

        int 21h

       

   int9:push ax

        push bx

        push cx

        push es

       

        in al,60h

       

        pushf

        call dword ptr cs:[200h]    ;當(dāng)此中斷例程執(zhí)行時(shí)(CS)=0

       

        ;cmp al,1                  ;F1的掃描碼為3bh

        ;jne int9ret

       

        mov ax,0b800h

        mov es,ax

        mov bx,1

        mov cx,2000

      s:mov byte ptr es:[bx],2

        ;inc byte ptr es:[bx]

        and bx,2

        loop s

       

int9ret:pop es

        pop cx

        pop bx

        pop ax

        iret

       

int9end:nop

 

code ends

 

end start

 

 

通過(guò)對(duì)鍵盤輸入的處理,了解了CPU對(duì)外設(shè)輸入的通常 通常方法,即:

1)外設(shè)的輸入送入端口;

2)向CPU發(fā)出外中斷(可屏蔽中斷)信息;

3CPU檢測(cè)到可屏蔽中斷信息,如果IF=1CPU在執(zhí)行完當(dāng)前指令后響應(yīng)中斷,執(zhí)行相應(yīng)的中斷例程;

4)可在中斷例程中實(shí)現(xiàn)對(duì)外設(shè)輸入的處理。

 

端口和中斷機(jī)制,是CPU進(jìn)行I/O的基礎(chǔ)。

 

 

 

指令系統(tǒng)總結(jié)

8086CPU提供以下幾大類指令:

1、數(shù)據(jù)傳送指令

       mov, push, pop, pushf, popf, xchg等。

       實(shí)現(xiàn)寄存器和內(nèi)存、寄存器和寄存器之間的單個(gè)數(shù)據(jù)傳送。

 

2、自述運(yùn)算指令

       add, sub, adc, sbb, inc, dec, cmp, imul, idiv, aaa 等。

       實(shí)現(xiàn)寄存器和內(nèi)存中的數(shù)據(jù)的算術(shù)運(yùn)算。它們的執(zhí)行結(jié)果影響標(biāo)志寄存器的:sf, zf, of, cf, pf, af位。

 

3、邏輯指令

       and, or, not, xor, test, shl, shr, sal, sar, rol, ror, rcl, rcr等。

       除了not指令外,它們的執(zhí)行結(jié)果都影響標(biāo)志寄存器的相關(guān)標(biāo)志位。

 

4、轉(zhuǎn)移指令

       可以修改IP,或同時(shí)修改CSIP的指令統(tǒng)稱為轉(zhuǎn)移指令。分為以下幾類:

       1)無(wú)條件轉(zhuǎn)移指令,比如:jmp

       2)條件轉(zhuǎn)移指令,比如:jcxz, je, jb, ja, jnb, jna等;

       3)循環(huán)指令,比如:loop

       4)過(guò)程,比如:call, ret, reft

       5)中斷,比如:int, iret

 

5、處理機(jī)控制指令

       這些指令對(duì)標(biāo)志寄存器或其他處理機(jī)狀態(tài)進(jìn)行設(shè)置,比如:cld, std, cli, sti, nop, clc, cmc, stc, hlt, wait, csc, lock等都是處理機(jī)控制指令。

 

6、串處理指令

       這些指令對(duì)內(nèi)存中的批量數(shù)據(jù)進(jìn)行處理,比如:movsb, movsw, cmps, scas, lods, stos等。

       基要使用這些指令方便地進(jìn)行批量數(shù)據(jù)的處理,則需要和rep, repe, repne等前綴指令配合使用。

 

 

 

 

 

posted on 2010-08-04 10:38 luqingfei 閱讀(1656) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 匯編語(yǔ)言基礎(chǔ)學(xué)習(xí)

導(dǎo)航

<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

統(tǒng)計(jì)

留言簿(6)

隨筆分類(109)

隨筆檔案(105)

Blogers

Game

Life

NodeJs

Python

Useful Webs

大牛

搜索

積分與排名

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产色av| 亚洲一级影院| 亚洲三级网站| 久久久综合网| 亚洲一区在线观看视频| 欧美日韩第一区| 亚洲日本中文字幕免费在线不卡| 国产精品av久久久久久麻豆网| 亚洲一区美女视频在线观看免费| 亚洲一区二区三区高清不卡| 午夜欧美精品久久久久久久| 欧美在线一级va免费观看| 欧美一区永久视频免费观看| 久久免费99精品久久久久久| 欧美福利视频网站| 国产精品ⅴa在线观看h| 激情综合亚洲| 亚洲看片网站| 小处雏高清一区二区三区| 久久躁狠狠躁夜夜爽| 亚洲国产精品小视频| 99国产精品视频免费观看一公开| 亚洲欧美日本国产有色| 老司机精品导航| 国产精品第一页第二页第三页| 国户精品久久久久久久久久久不卡| 亚洲人在线视频| 欧美一区二区视频免费观看| 亚洲国产成人在线| 欧美一区二区精品| 欧美日韩亚洲一区二区三区在线观看| 国产麻豆9l精品三级站| 亚洲天堂网站在线观看视频| 欧美在线网址| 亚洲精品美女在线| 久久人人97超碰国产公开结果| 欧美日韩国产123区| 国语自产在线不卡| 亚洲中午字幕| 亚洲精品免费在线播放| 亚洲视频网在线直播| 玖玖玖免费嫩草在线影院一区| 夜夜嗨av一区二区三区中文字幕| 午夜天堂精品久久久久 | 中文精品视频一区二区在线观看| 亚洲欧美经典视频| 99精品视频免费观看| 久久综合色综合88| 国语对白精品一区二区| 销魂美女一区二区三区视频在线| 亚洲福利视频二区| 久久亚洲精品一区| 国产欧美一区二区精品婷婷| 亚洲视频每日更新| 亚洲精品字幕| 欧美精品一区视频| 日韩视频一区二区| 亚洲国产日本| 欧美精品激情在线观看| 亚洲国产经典视频| 欧美77777| 男人的天堂成人在线| 亚洲国产成人一区| 欧美成人精品在线播放| 美日韩精品免费| 亚洲激情偷拍| 亚洲精品久久久久久久久久久| 欧美成人免费在线| 亚洲视频网在线直播| 亚洲一区视频在线| 亚洲影院污污.| 国产午夜精品理论片a级大结局 | 欧美手机在线视频| 国产精品成人免费| 欧美一区二粉嫩精品国产一线天| 亚洲新中文字幕| 韩国精品在线观看| 欧美激情精品久久久久久免费印度| 你懂的网址国产 欧美| 亚洲精品视频一区二区三区| 亚洲精品自在在线观看| 国产精品成人va在线观看| 欧美在线在线| 久久亚洲二区| 亚洲婷婷综合色高清在线| 亚洲永久精品国产| 伊人久久亚洲美女图片| 亚洲黄色在线观看| 99riav1国产精品视频| 在线观看欧美日韩| 欧美一区永久视频免费观看| 午夜在线a亚洲v天堂网2018| 欧美在线电影| 久久伊人一区二区| 中文精品99久久国产香蕉| 欧美一区观看| av成人免费在线| 久久av资源网站| 一本色道**综合亚洲精品蜜桃冫| 亚洲免费在线播放| 99精品视频免费观看| 亚洲欧美第一页| 亚洲精品国产视频| 欧美伊久线香蕉线新在线| 亚洲国产综合在线| 亚洲一区美女视频在线观看免费| 影音先锋日韩资源| 亚洲天堂av在线免费| 亚洲精品一品区二品区三品区| 亚洲一区二区免费看| 亚洲国产毛片完整版| 亚洲欧美日韩精品久久亚洲区 | 欧美视频精品在线| 嫩草伊人久久精品少妇av杨幂| 国产精品久久久久久久久久久久久| 久久女同互慰一区二区三区| 欧美日韩精品三区| 欧美国产视频日韩| 国内精品美女av在线播放| 99国产精品久久| 最近中文字幕日韩精品| 久久精品观看| 欧美专区日韩专区| 国产精品v亚洲精品v日韩精品 | 亚洲欧美日韩精品久久奇米色影视 | 午夜国产精品影院在线观看| 久久婷婷丁香| 狂野欧美激情性xxxx欧美| 欧美性久久久| 日韩一级黄色av| 亚洲片在线观看| 久热综合在线亚洲精品| 久久躁狠狠躁夜夜爽| 国产一区日韩欧美| 久久精品视频va| 免费不卡在线观看| 亚洲高清av| 久久免费视频在线观看| 久久美女艺术照精彩视频福利播放| 国产精品免费在线| 亚洲一级片在线观看| 亚洲欧美一区二区三区在线| 欧美婷婷久久| 亚洲欧美日韩一区二区在线| 亚洲综合第一页| 国产人妖伪娘一区91| 久久黄色网页| 久久在线免费视频| 亚洲综合国产| 亚洲国产毛片完整版| 一本一本久久a久久精品牛牛影视| 欧美福利视频网站| 99综合电影在线视频| 午夜欧美大尺度福利影院在线看| 国产精品稀缺呦系列在线| 欧美制服第一页| 亚洲国产成人精品视频| 亚洲自拍偷拍福利| 国产日韩欧美二区| 久久久蜜桃一区二区人| 最新亚洲电影| 午夜精品久久久久久久99水蜜桃| 国产综合视频| 欧美日本一区二区三区| 亚洲欧美日韩一区二区三区在线| 国产日韩亚洲欧美| 浪潮色综合久久天堂| 99国产精品久久久久老师| 久久免费午夜影院| 在线亚洲+欧美+日本专区| 国产精品午夜在线| 久久综合一区二区| 日韩香蕉视频| 久久成人精品无人区| 亚洲精品国精品久久99热一 | 国产亚洲日本欧美韩国| 欧美精品久久久久久久免费观看| 亚洲综合第一页| 亚洲国产精品成人久久综合一区| 亚洲一区免费网站| 一区在线影院| 国产精品爽爽ⅴa在线观看| 久久婷婷蜜乳一本欲蜜臀| 日韩亚洲欧美综合| 久久久噜噜噜久久中文字幕色伊伊| 亚洲精品在线一区二区| 国产欧美日本在线| 欧美日韩专区| 免费人成精品欧美精品| 欧美一区在线视频| 亚洲午夜久久久| 亚洲国产成人久久| 老司机久久99久久精品播放免费 | 狠狠色狠色综合曰曰| 欧美日韩一区二区在线观看| 久久久国产精品一区| 亚洲欧美在线一区二区| 一本色道久久综合亚洲精品婷婷| 欧美成人综合一区| 蜜臀久久久99精品久久久久久|