1. 程式人生 > >匯編語言從入門到精通-5微機CPU的指令系統2

匯編語言從入門到精通-5微機CPU的指令系統2

外部 分享圖片 復雜 微機 變化 小結 interrupt push 列表

微機CPU的指令系統

5.2.2 標誌位操作指令

標誌位操作指令是一組對標誌位置位、復位、保存和恢復等操作的指令。

1、進位CF操作指令

技術分享圖片a、清進位指令CLC(Clear Carry Flag):CF←0
技術分享圖片b、置進位指令STC(Set Carry Flag):CF←1
技術分享圖片c、進位取反指令CMC(Complement Carry Flag):CF←not CF

2、方向位DF操作指令

技術分享圖片a、清方向位指令CLD(Clear Direction Flag):DF←0
技術分享圖片b、置方向位指令STD(Set Direction Flag):DF←1

3、中斷允許位IF操作指令

技術分享圖片a、清中斷允許位指令CLI(Clear Interrupt Flag):IF←0
    其功能是不允許可屏蔽的外部中斷來中斷其後程序段的執行。

技術分享圖片b、置中斷允許位指令STI(Set Interrupt Flag):IF←1
    其功能是恢復可屏蔽的外部中斷的中斷響應功能,通常是與CLI成對使用的。

4、取標誌位操作指令

技術分享圖片a、LAHF(Load AH from Flags):AH←Flags的低8位
技術分享圖片b、SAHF(Store AH in Flags):Flags的低8位←AH

5、標誌位堆棧操作指令

技術分享圖片a、PUSHF/PUSHFD(Push Flags onto Stack):把16位/32位標誌寄存器進棧;
技術分享圖片b、POPF/POPFD(Pop Flags off Stack):把16位/32位標誌寄存器出棧;

6、邏輯操作指令的小結

  下面是學習標誌位指令的控件,瀏覽者可以運用此類指令,觀看標誌寄存器的相應變化。

5.2.3 算術運算指令

  算術運算指令是反映CPU計算能力的一組指令,也是編程時經常使用的一組指令。它包括:加、減、乘、除及其相關的輔助指令。

  該組指令的操作數可以是8位、16位和32位(80386+)。當存儲單元是該類指令的操作數時,該操作數的尋址方式可以是任意一種存儲單元尋址方式。

  1、加法指令

技術分享圖片  a、加法指令ADD(ADD Binary Numbers Instruction)

    指令的格式:ADD Reg/Mem, Reg/Mem/Imm
    受影響的標誌位:AF、CF、OF、PF、SF和ZF
    指令的功能是把源操作數的值加到目的操作數中。

技術分享圖片  b、帶進位加指令ADC

(ADD With Carry Instruction)

    指令的格式:ADC Reg/Mem, Reg/Mem/Imm
    受影響的標誌位:AF、CF、OF、PF、SF和ZF
    指令的功能是把源操作數和進位標誌位CF的值(0/1)一起加到目的操作數中。

技術分享圖片  c、加1指令INC(Increment by 1 Instruction)

    指令的格式:INC Reg/Mem
    受影響的標誌位:AF、OF、PF、SF和ZF,不影響CF
    指令的功能是把操作數的值加1。

技術分享圖片  d、交換加指令XADD(Exchange and Add)

    指令的格式:XADD Reg/Mem, Reg      ;80486+
    受影響的標誌位:AF、CF、OF、PF、SF和ZF
    指令的功能是先交換兩個操作數的值,再進行算術“加”法操作。

  例5.3 已知有二個32位數d1和d2(用數據類型DD說明),編寫程序片段把d2的值加到d1中。

    解:32位數d1和d2在內存中如下所示。

技術分享圖片

    方法1:用16位寄存器編寫程序
        MOV AX, word ptr d1 ;由於d1是雙字類型,必須使用強制類型說明符。以下同。
        MOV DX, word ptr d1+2 ;(DX,AX)構成一個32位數據
        ADD AX, word ptr d2 ;低字相加
        ADC DX, word ptr d2+2 ;高字相加。在低字相加時,有可能會產生“進位”
        MOV word ptr d1, AX ;低字送給d1的低字
        MOV word ptr d1+2, DX ;高字送給d1的高字
    方法2:用32位寄存器編寫程序
        MOV EAX, d1
        ADD EAX, d2
        MOV d1, EAX

  從上面兩段程序不難看出:用32位寄存器來處理32位數據顯得簡單、明了,而16位微機雖然也能處理32位數據,但做起來就要復雜一些。

  下面是學習和掌握加法類指令的控件,可模擬執行ADD、ADC、INC、XADD、CLC、STC和CMC等指令。用鼠標左鍵單擊寄存器列表框中指定的寄存器,則可修改其值。後面其它控件的有關操作與此相一致,不再說明。從上面兩段程序不難看出:用32位寄存器來處理32位數據顯得簡單、明了,而16位微機雖然也能處理32位數據,但做起來就要復雜一些。

匯編語言從入門到精通-5微機CPU的指令系統2