匯編語言從入門到精通-5微機CPU的指令系統2
微機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
指令的格式: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