1. 程式人生 > 其它 >組合語言---乘法指令及符號擴充套件

組合語言---乘法指令及符號擴充套件

技術標籤:微機原理即介面技術程式語言微機原理介面技術

組合語言---有符號數乘法指令

介紹

乘法指令分為無符號數乘法指令和有符號數乘法指令兩種,它們唯一的區別是相乘的兩個運算元是有符號資料還是無符號資料。
乘法指令的被乘數是隱含運算元,乘數需在指令中顯式寫出來。執行指令時,CPU會根據乘數是8位還是16位來自動選用被乘數是AL還是AX。

格式及功能介紹

無符號數乘法指令

指令格式:MUL opr

功能:將指令中指定的運算元與隱含的被乘數(都為無符號數)相乘,所得的乘積按表中的對應關係存放。

乘數位數隱含的被乘數乘積的存放位置舉例
8位ALAX中MUL BL
16位AXDX與AX中MUL BX

MUL指令對標誌位CF、OF有影響,對SF、ZF、AF、PF 無定義,如果運算結果的高一半(AH,DX)為零,則CF=OF=0,否則CF=OF=1。
注:

  1. 對標誌位的“無定義”和“不影響”不同。無定義是指指令執行後,標誌位的狀態不確定;不影響是指指令的結果不影響標誌位。即標誌位保持原狀態不變。
  2. MUL指令中的運算元可以使用除立即數以外的其他定址方式,但當是暫存器時,操作器只能是通用暫存器。

有符號數乘法指令

指令格式:IMUL opr
IMUL指令的格式和功能與MUL相同,只是要求兩個運算元都須為有符號數。
IMUL指令對標誌位的影響為:若乘積的高半部分是低半部分的符號位擴充套件,則OF=CF=0;否則OF=CF=1;
注:IMUL指令中對運算元的定址的方式規定同MUL指令,但表示形式為補碼,乘積也是以補碼形式表示的數。

符號擴充套件及符號擴充套件語句

符號擴充套件

微機系統中,有時需要將一個數據從位數較少擴充套件到位數較多,例如,在執行除法指令時,由於對位元組除數相除要求被除數為16位,對字除數要求被除數為32位,即被除數必須為除數的倍長資料,因此就涉及資料的位數擴充套件問題,具體的擴充套件有符號擴充套件

零擴充套件兩種方法。

  1. 當要擴充套件的資料是無符號數時可採用零擴充套件。即在最高位前擴充套件0,補充夠位數即可。
  2. 當要擴充套件的資料是有符號數時需採用符號擴充套件。由於採用補碼形式表示的整數具有固定的長度,因此在彙編指令系統中,經常有一些指令需要將其中的運算元進行符號位擴充套件。譬如兩個8位或16位資料進行相加或者相減運算時,當有不足位數要求的資料時,需要將少位資料擴充套件成與位數要求相一致的資料;兩個資料相除時,被除數應必須是除數的倍數等。
    符號擴充套件的方法是將需要擴充套件的資料的符號位填入到擴充套件的每一位,以保持其作為有符號數的值的大小不變。這裡要注意,要擴充套件的數須是用補碼形式表示的有符號數,符號擴充套件後。其結果仍是該數的補碼。
    因此,對於補碼錶示的數,其正數的符號擴充套件是將其符號位0向左擴充套件(補0);其負數的符號擴充套件是將其符號位1向左擴充套件(補1)。

符號擴充套件語句

  1. 位元組擴充套件為字指令CBW
    指令格式:CBW
    功能:該指令的隱含運算元為AH和AL,功能是用AL的符號位去填充AH,即若AL為正數,則AH=00H;否則AH=FFH。
  2. 字擴充套件為雙字指令CWD
    指令格式:CWD
    功能:該指令的隱含運算元為DX和AX,功能是用AX的符號位填充DX,即若AX為正數,則DX=0000H;否則DX=FFFFH。
    以上兩條指令的執行都不影響任何標誌位。

例子

無符號相乘

MOV AL,0B4H    ;AL=B4H=180
MOV BL,11H      ;BL=11H=17
MUL BL			;AX=0BF4H=3060,8位0BH不為0,OF=CF=1

可以看出來,無符號數相乘就是直接相乘即可。

有符號數相乘

MOV AL,0B4H		;AL=B4H=-76
MOV BL,11H		;BL=11H=17
IMUL BL			;AX=FAF4H=-1292,8位FAH不是低半部分的符號位擴充套件,OF=CF=1

這是本文的重點:

有符號數相乘,需要進行符號位擴充套件,符號位擴充套件詳情在上面已經介紹過了。
有符號相乘的步驟:

  1. 符號位擴充套件(負數前面補1,正數補0)
  2. 擴充套件後的資料兩式相乘
  3. 求補(計算機中存放的是補碼)
  4. 取有效位,比如3位資料相乘,得到的結果取有效位6位即可。

有符號數相乘 例子:-3*3

  1. 在計算機中存放的時二進位制資料補碼,所以本例中應為101乘011
  2. 符號位擴充套件後
    111101 X 000011
    =10110111
  3. 取有效位6位
    110111
  4. 求補
    101001
    可以計算出是-9,結果正確

題中資料計算

  1. 10110100
    X 00010001
  2. 1111 1111 1011 0100
    X 0000 0000 0001 0001
  3. 1111101011110100
  4. FAF4

後續

如果想了解更多物聯網、智慧家居專案知識,可以關注我的專案實戰專欄。
歡迎關注公眾號。
在這裡插入圖片描述

編寫不易,感謝支援。