MUL與IMUL的詳細區別
乘數位數 | 隱含的被乘數 | 乘積的存放位置 | 舉例 |
---|---|---|---|
8位 | AL | AX中 | MUL BL |
16位 | AX | DX與AX中(DX存放高16位、AX存放低16位) | MUL BX |
課本P97例題
一)、將以下指令中的立即數看作是無符號數實現相乘:
MOV AL,0B4H ;AL=B4H=180 解釋以下,只要十六進制數以字母為開頭的都要在開頭加0表示區分十六進制數與一些常見指令的區別 例如0B4H、74H、0A12H
MOV BL,11H ;BL=11H=17
MUL BL ;AX=0BF4H=3060
解釋:首先MUL BL
就是將AL×BL=不帶符號的結果存放到AX中
即計算0B4H×11H
無符號
步驟①H—>B(十進制變二進制)
步驟②B—>D(二進制變十進制)
步驟③倆數相乘結果為十進制D—>轉換為十六進制H
按步驟來:
①:
0B4H ---> 1011 0100(B)
1011 0100(B) ---> 180(D)11H ---> 0001 0001(B)
0001 0001(B) ---> 17(D)
②:
180(D)×17(D)=3060(D)
③:
3060(D) ---> 0BF4H
即最后結果AX里面存放的值為0BF4H
二)、將以下指令中的立即數看作是帶符號數實現相乘:
MOV AL,0B4H ;AL=B4H=-76
MOV BL,11H ;BL=11H=17
MUL BL ;AX=FAF4H=-1292
解釋:首先IMUL BL
就是將AL×BL=帶符號的結果存放到AX中
即計算0B4H×11H
有符號
步驟①H—>B(十進制變二進制)
步驟②B—>求其對應補碼(所得二進制求其補碼)
步驟③其對應補碼—>D(求其對應補碼結果轉換為十進制)
步驟④倆數相乘結果為十進制D—>轉換為二進制B(相乘結果轉換為二進制)
步驟⑤轉換成的二進制—>求其對應補碼(所得二進制結果求其補碼)
步驟⑥其對應補碼—>轉換為其對應的十六進制H(所得其補碼轉換為其對應的十六進制數)
按步驟來:
①:
0B4H ---> 1011 0100(B)
11H ---> 0001 0001(B)
②:求其對應補碼
1011 0100(B) ---> 1100 1011(其反碼) ---> 1100 1100(其補碼)
11H為正數,其補碼為本身 0001 0001(其補碼)
③:
1100 1100(B補碼) --> -76(D)
0001 0001(B補碼) ---> 17(D)
④:
-76(D)×17(D)=-1292(D)
-1292(D) ---> 1000 0101 0000 1100(B)
⑤:1000 0100 0000 1100(B) ---> 1111 1011 1111 0011(其反碼) ---> 1111 1011 1111 0100(其補碼)
⑥:1111 1011 1111 0100(其補碼) ---> FAF4(H)
即最后結果AX里面存放的值為FAF4H
以課后習題為例p123
3.14 設AL=-86,BL=21,在分別執行MUL BL與IMUL BL指令后,各自的結果是什么?
一)IMUL
AL ---> -86(D) ---> 1101 0110(B)
BL ---> 21(D) ---> 0001 0101(B)
-86×21=-1806(D) ---> 1000 0111 0000 1110(B) ---> 1111 1000 1111 0001(其反碼) ---> 1111 1000 1111 0010(其補碼) ---> F8F2(H)
二)MUL
AL ---> -86(D) ---> 1101 0110(B) ---> 214(D)
BL ---> 21(D)
214(D)×21(D)=4494(D) ---> 118E(H)