采用對符號位單獨處理的辦法,處理步驟如下:
單獨處理被乘數和乘數的符號位,辦法是單獨取出被乘數符號位并與乘數符號位進行異或操作,因為積的符號位的產生規則是同號相乘為正,異號相乘為負。
求被乘數和乘數的絕對值,并使兩絕對值相乘從而獲得積的絕對值,方法是分別判斷被乘數和乘數的符號位:若它為正,則其本身就是絕對值;若它為負,則對它求補。
對積進行處理。若積為正,則對積不進行處理;若積為負,則對積求補,使之變為補碼的形式。
R0和R1中為兩個補碼形式的帶符號數,R3R2為積 R0*R1=R3R2
?
ORG 0600H’
SBIT BIT 20H.0
SBIT1 BIT 20H.1
SBIT2 BIT 20H.2
?
MOV A,R0???????????? ;被乘數送A
RLC A?????????????????? ;被乘數符號送CY
MOV SBIT1,C??????? ;送入SBIT1
MOV A,R1???????????? ;乘數送A
RLC A?????????????????? ;乘數符號送CY
MOV SBIT2,C??????? ;送入SBIT2
ANL C,/SBIT1??????? ;SBIT1非 與 SBIT2 送CY
MOV SBIT,C????????? ;送入SBIT
MOV C,SBIT1??????? ;SBIT1送CY
ANL C,SBIT2????????? ;SBIT1 與 SBIT2非 送CY
ORL C,SBIT??????????? ;積的符號位送CY
MOV SBIT,C????????? ; 送入SBIT
MOV A,R0???????????? ;處理被乘數
JNB SBIT1,NCH1??? ;若她為正,則轉NCH1
CPL A?????????????????? ;若她為負,則求補的絕對值
INC A?????????????????? ;
NCH1:??? MOV B,A????????????? ;被乘數絕對值送B
????????????? MOV A,R1???????????? :處理乘數
JNB SBIT2,NCH2??? ;若它為正,則轉NCH2
CPL A?????????????????? ;若她為負,則求補的絕對值
ADD A,#01H???????? ;
NCH2:??? MUL AB??????????????? ;求積的絕對值
JNB SBIT,NCH3???? ;若積為正,則轉NCH3
CPL A?????????????????? ;若積為負,則低字節求補
ADD A,#01H???????? ;
NCH3:??? MOV R2,A???????????? ;積的低字節存入R2
MOV A,B????????????? ;積的高字節送A
JNB SBIT,NCH4???? ;若積為正,則轉NCH4
CPL A?????????????????? ;若積為負,則高字節求補
ADDC A,00H???????? ;
NCH4:??? MOV R3,A???????????? ;積的高字節存入R3
SJMP $
END
評論