少妇被又大又粗又爽毛片久久黑人,国产无遮挡又黄又爽免费视频,18禁男女爽爽爽午夜网站免费,成全动漫影视大全在线观看国语

3.4 80486微處理器的擴展指令

3.4 80486微處理器的擴展指令

80486微處理器既可運行在16位實地址模式下,又可運行在保護模式下。當運行在16位實地址方式下時,其指令系統為3.3節介紹的80486微處理器最基本的指令。隨著80x86微處理器由最初的8088/8086到80286、80386、80486,其功能不斷擴大,在最基本指令系統的基礎上,又增加了一些新的指令,并對有些基本指令擴充了功能。本節僅介紹一些最常用的擴充與增加的指令。

3.4.1 80486微處理器新增加的指令

80486微處理器新增加的指令見表3.11。

表3.11 80486 CPU新增加的指令

3.4.2 80486微處理器增強功能的指令

80486微處理器增強功能指令見表3.12。

表3.12 80486 CPU增強功能指令

3.4.3 80486微處理器新增指令功能簡介

1.數據傳送類指令

數據傳送類指令包括PUSH(push segment register onto the stack)指令、PUSHA(push all general registers onto the stack)指令、POPA(pop all general registers from the stack)指令、MOVSX(move with sign-extend)指令和MOVZX(move with zero-extend)指令。

指令格式:

    PUSH   源操作數
    PUSHA
    POPA
    MOVSX  目標操作數,源操作數
    MOVZX  目標操作數,源操作數

功能:PUSH指令將包括立即數的源操作數壓入堆棧。PUSHA指令將所有通用寄存器的值壓入堆棧。POPA指令將所有通用寄存器的值彈出堆棧。MOVSX指令是有符號擴展的傳送指令,將源操作數的符號位擴展后傳送到目標操作數中。MOVZX指令是帶零擴展的傳送指令,它不管源操作數是正數還是負數,均將高位擴展成0,然后送至目標操作數中。

舉例1:

    PUSH 3200H ; 將立即數3200H壓入堆棧
    PUSH -180H ; 將立即數-180H壓入堆棧

舉例2:

    MOV   DX,0FB20H ; DX←0FB20H,符號位為1,是負數
    MOVSX EAX,DX    ; 則(EAX)=FFFFFB20H

舉例3:

    MOV   CL,0FBH ; CL←0FBH,符號位為1,是負數
    MOVZX AX,CL   ; (AX)=00FBH

注意:

① PUSH是增強指令。在80486基本指令系統中,PUSH指令的源操作數只能是寄存器、段寄存器,而該指令中源操作數可以是一個8位或16位的立即數,而且此立即數可以是有符號數也可以是無符號數。

② PUSHA 壓入的順序是AX,CX,DX,BX,SP,BP,SI和DI寄存器,其中壓入SP的值是此PUSH指令執行前該寄存器的值。POPA指令彈出的順序與壓入的順序相反。

③ MOVSX和MOVZX指令中目標操作數只能是16位或32位寄存器操作數,源操作數可以是寄存器操作數或存儲器操作數。在一般情況下,如果源操作數是字節類型,則目標操作數是字類型;如果源操作數是字類型,則目標操作數是雙字類型。

④ MOVSX和MOVZX指令之間的區別是:對MOVSX指令,若源操作數是正數,則高位都擴展成0,若是負數,則高位擴展成1送入目標操作數;對MOVZX指令,高位都擴展成0后送入目標操作數。

⑤ MOVSX和OVZX指令常用于符號擴展及初始化寄存器高位部分。MOVSX指令對有符號數進行擴展,MOVZX指令對無符號數進行擴展。

2.算術運算類指令

算術運算類指令有IMUL(signed multiply)指令和XADD(exchange and add)。

指令格式:

① IMUL 寄存器,立即數

② IMUL 寄存器1,寄存器2或存儲器,立即數

  XADD 目標操作數,源操作數

功能:格式①將寄存器中有符號數與立即數相乘,乘積送該寄存器。格式②將寄存器2或存儲器中有符號數與立即數相乘,乘積送寄存器1。XADD是互換并相加指令,它將源操作數與目標操作數相加,結果送目標操作數,同時把原來的目標操作數送源操作數。

例如:IMUL BX,50 ; BX的內容乘50送BX

   I MUL DI,[BX+TABLE],3 ; [BX+TABLE]單元的內容乘3送DI

   IMUL BX,CX,345H ; CX的內容乘345H送BX

注意:

① IMUL指令是有符號數乘法的增強指令。指令格式中,寄存器為16位通用寄存器,立即數可以是8位或16位的常數。

② 當被乘數為16位,乘數為16位或8位時,乘積有可能超過16位,則超出的高位部分將會丟失,并將進位標志CF和溢出標志OF置1。

③ XADD指令中,源操作數只能是寄存器,目標操作數可以是寄存器或存儲器。操作數類型可以是8位、16位或32位。

④ XADD指令的執行會影響標志位,且改變了源操作數。

3.移位和循環移位指令

指令格式:

    SHL d,count
    SAL d,count
    SHR d,count
    SAR d,count
    ROL d,count
    ROR d,count
    RCL d,count
    RCR d,count

功能:上述移位指令的功能與相應的基本指令一樣,指令中的常數count用來指定移位或循環移位的次數,常數count的范圍在1~31之間,目標操作數可以是8位或16位的寄存器(或存儲器)操作數。

例如:SHL BX,9 ; 把BX邏輯左移9位

   SAR DX,3 ; 把DX算術右移3位

   ROR AL,4 ; 把AL循環右移4位

   RCL BYTE PTR[BX],17 ; 把BX所指內存單元的內容帶進位循環左移17位

注意:80486增強功能的移位指令與相應基本指令的主要區別在于,其常數count的范圍擴大到31,而基本指令只能是1,大于1時只能用CL寄存器指出。

4.串輸入/輸出指令

指令格式:

    INSB (input a byte from DX port)
    INSW (input a word from DX port)
    OUTSB (output a byte to DX port)
    OUTSW (output a word to DX port)

功能:INSB(INSW)指令從DX寄存器指定的端口輸入一個字節(字)傳送至由ES:DI(或EDI)尋址的內存單元。OUTSB(OUTSW)指令從DS:SI(或ESI)尋址的內存單元,輸出一個字節(字)到DX指定的端口中。每次輸入或輸出操作之后,根據方向標志DF的值修改地址指針。當DF=0時,對INSB和OUTSB指令,地址指針加1;對INSW和OUTSW指令,地址指針加2。當DF=1時,相應的地址指針減1或減2。

【例3.22】 要從端口地址為125H的外設端口中輸入200個字節,存放在以邏輯地址2000H:100H為首地址的內存單元中,可以采用如下的串輸入指令:

    CLD          ; 清方向標志DF=0
    MOV AX,2000H
    MOV ES,AX   ; 置ES為2000H
    MOV DI,100H ; 置偏移地址為100H
    MOV CX,200  ; 置重復次數為200
    MOV DX,125H ; 從125H端口讀取200個字節
    REP INSB

注意:① 對OUTSB和OUTSW指令用DS:SI尋址源操作數,對INSB和INSW指令用ES:DI尋址目標操作數。源操作數允許段超越,但目標操作數只能在附加段ES中,不允許段超越。輸入和輸出的端口都由DX指定。

② 每次輸入或輸出操作之后,根據方向標志DF的值修改地址指針。當DF=0時,地址指針為增量,即字節操作時,地址指針加1,字操作時加2。當DF=1時,同理地址指針減1或減2。

③ 指令前可以加重復前綴REP,輸入/輸出將重復進行,重復次數由CX寄存器的值決定。

5.高級語言類指令

高級語言類指令有BOUND(check array against bounds)指令、ENTER(make stack frame for high level)指令和LEAVE(high level procedure exit)指令。

指令格式:

    BOUND 寄存器,存儲器地址
    ENTER 立即數1,立即數2
    LEAVE

功能:BOUND指令是數組邊界檢查指令。它檢查寄存器的內容是否滿足關系式

(存儲器地址)≤(寄存器)≤(存儲器地址+2)

如果不能滿足,則產生一個05H中斷。若滿足關系式,則指令不做任何操作。ENTER指令是設置堆棧空間指令。指令中立即數1是一個16位常數(取值0~FFFFH),表示堆棧空間的字節數;立即數2是一個8位常數(取值0~31),表示允許過程嵌套的級數。LEAVE指令用于撤銷ENTER指令所設置的堆??臻g。

例如:SUBPI PROC NEAR

      ENTER 6,0 ; 建立堆棧空間并保留6個字節的局部變量

      …

      LEAVE ; 撤銷堆??臻g

      RET ; 返回

   SUBP1 ENDP

6.邏輯運算與移位指令

邏輯運算與移位指令有SHRD(double precision shift right)指令和SHLD(double precision shift left)指令。

指令格式:

SHRD 第一操作數,第二操作數,第三操作數
SHLD 第一操作數,第二操作數,第三操作數

功能:SHRD是雙精度右移指令,它將指定的一些位右移到一個操作數中。SHLD是雙精度左移指令,它將指定的一些位左移到一個操作數中。其中,第一操作數是接收移位的操作數,第二操作數是提供移位的操作數,第三操作數是要移動的位數。

例如:MOV AX,3AF2H

   MOV BX,9C00H

   SHLD AX,BX,7 ; BX左移7位,移入AX中,結果(AX)=004EH

注意:第一操作數可以是寄存器或存儲器,操作數類型可以是16位或32位;第二操作數只能是寄存器;第三操作數可以是8位立即數或CL寄存器。

7.位操作類指令

位操作指令有BT(bit test)指令、BTC(bit test and complement)指令、BTR(bit test and reset)指令、BSF(bit scan forward)指令和BSR(bit scan reverse)指令。

指令格式:

    BT  第一操作數,第二操作數
    BTC 第一操作數,第二操作數
    BTR 第一操作數,第二操作數
    BTS 第一操作數,第二操作數
    BSF 目標寄存器,第二操作數
    BSR 目標寄存器,第二操作數

功能:BT是位測試指令,檢查由第二操作數指定的位,并將該位復制到CF中。BTC指令用于檢查第二操作數指定的位,將其取反,并復制到CF中。BTR(BTS)指令用于檢查由第二操作數指定的位,并將其復制到CF中,然后將指定位清0(置1)。BSF用于對第二操作數從低位到高位進行掃描測試,當遇到第一個1時,將其位號送入目標寄存器中,如果第二操作數中所有的位均為0,則將零標志ZF置1,否則ZF清0。BSR指令的功能與BSF類似,但BSR指令的掃描方向是從高位到低位。

例如:MOV CX,4

   BT [BX] ,CX ;檢測由BX尋址的存儲器中數的位4,且將其狀態復制到進位標志CF中

注意:① BT、BTC、BTR、BTS指令中的第一操作數可以是寄存器尋址,也可以是存儲器尋址。第二操作數可以是寄存器尋址,也可以是立即數。

② BSF和BSR指令中的第二操作數可以是寄存器尋址,也可以是存儲器尋址。

8.根據條件,字節置1(byte set on condition)指令

指令格式:

SETCC 目標操作數

功能:指令助記符中“CC”表示條件。這與條件轉移指令中的條件“CC”一樣,通常以標志寄存器中一個或多個標志位的狀態作為條件。如果條件滿足,則目標操作數字節置1;否則目標操作數字節清0。

例如:SETZ AL ; 如果零標志ZF=1,則AL=1;否則AL=0

   SETNZ AL ; 如果ZF=0,則AL=1;否則AL=0

   SETNS BYTE PTR[DI+10] ; 如果符號位SF=0,則((DI)+10)=1;否則((DI)+10)=0

注意:目標操作數只能是寄存器或存儲器尋址的8位數。

9.Cache管理類指令

Cache管理類指令有INVD(invalidate Cache)指令、WBINVD(writeback and invalidate data Cache)指令和INVLPG(invalidate TLB entry)指令。

指令格式:

    INVD
    WBINVD
    INVLPG

功能:INVD指令告訴CPU高速緩沖存儲器Cache數據失效(作廢)。WBINVD指令先刷新內部Cache,并分配一個專用總線周期將外部Cache的內容寫回主存,并在以后的一個總線周期將外部Cache刷新。INVLPG指令使TLB中的某一項作廢,如果TLB中含有一個存儲器操作數映像的有效項,則該TLB項被標記為無效。這類指令用于管理80486微處理器內部的8KB Cache。

神都猛虎 天生為王蕭天澤林婉珺 應是綠肥紅瘦 貴妃她又轟動后宮了 洛薇傅沉淵 主角叫葉旭的 開局贈送天生神力 我的美女總裁 藥醫的隨身空間() 最強贅婿奶爸

本站所有小說均由搜索引擎轉碼而來,只為讓更多讀者欣賞,本站不保存小說內容及數據,僅作宣傳展示。

Copyright © 2024 噠噠看書網sitemap