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碼這裡我講的不太好,大家有興趣自己翻閱資料,我理解透徹了,會在講的。