1. 程式人生 > >8086乘除指令詳解(二)

8086乘除指令詳解(二)

今天我繼續為大家更新乘除指令。

一、乘法指令

乘法指令就兩個MUL,IMUL

①無符號乘法指令MUL

無符號位元組乘法:AX <-- (AL) * (SRC)

無符號字乘法:  DX.AX <-- (AX) * (SRC)


例如:

MUL CX        ;ax 和 cx 中連個16位相乘,結果在dx 和 ax中,dx放高位,ax放低位

對標誌位的影響:若乘積的高一半(AH/DX)為0,則OF = CF = 0,否則 OF=CF=1;

②有符號的乘法指令IMUL

有符號位元組乘法:AX <-- (AL) * (SRC)

有符號字乘法 : DX.AX <-- (AX) * (SRC)

例如:

IMUL CL          ;AL中與CL中的兩個8位有符號數相乘,結果在AX中

對標誌位的影響:若乘積的高一半是低一半的符號擴充套件,則OF=CF=0;否則均為1.

乘法指令對其它標誌位沒有定義,不知到到底什麼值。

二、除法指令DIV,IDIV

①無符號除法DIV

無符號位元組除法(AX)/(SRC)    AL←商,AH←餘數
無符號字除法(DX.AX)/(SRC)    AX←商,DX←餘數

例如:

DIV CL        ;AX中的資料除以CL中的資料,商在AL中,餘數在AH中

②有符號除法IDIV

有符號位元組除法(AX)/(SRC)           AL←商,AH←餘數
有符號字除法(DX.AX)/(SRC)         AX←商,DX←餘數

說明:除法運算時,要求被除數的數位是除數的2倍,否則就必須將被除數進行擴充套件

除法運算對AF,CF,OF,PF,SF,ZF都是不確定的。

三、型別轉換指令CBW/CWD

C:convert(轉換)  B:byte(位元組)   W:word(字)      D:double(雙字)     自己理解的哈!如果不對,謝謝指出

功能:就是符號擴充套件,將位元組擴充套件為字,將字擴充套件為雙字,以適應除法運算的要求

四、BCD碼指令

實際應該叫BCD嗎調整指令,它其實就是對資料的一種調整。

可用四位2進位制碼錶示1個十進位制碼,這個就叫做BCD碼。

BCD碼有兩類:1.組合的BCD碼(一個位元組表示2位BCD碼,就是通常的8421碼),2.非組合BCD碼(1個位元組只用低4位來表示BCD碼,高四位為0)。

①組合BCD加法調整指令DAA

比如:8+7 = 15

   0000 1000

+ 0000 0111

——————

    0000 1111

顯然不對,所以進行調整 ,+6,(即加上110)

9+9 = 18

   0000 1001

+ 0000 1001

——————

   0001 0010

不對,低四位向高四位進位時,內部機器是逢16進1,而BCD碼要求是逢十進一,就必須調整加上011,這是輔助進位標誌AF就有用了,它如果為1,就表示有進位,這是加011,就可以調整過來了

調整:4位二進位制碼對應的BCD碼大於9時,則加6調整,低四位往高四位進位時,加6調整

②組合BCD碼減法指令DAS

和上面一樣,就是將一個數調整為BCD碼的形式,這裡我不想多說,如果大家感興趣的話,自己查詢相關資料

好了,今天就更到這裡吧,明天我會更新邏輯運算指令,還有最後的BCD碼這裡我講的不太好,大家有興趣自己翻閱資料,我理解透徹了,會在講的。