采用對符號位單獨處理的辦法,處理步驟如下: 單獨處理被乘數(shù)和乘數(shù)的符號位,辦法是單獨取出被乘數(shù)符號位并與乘數(shù)符號位進(jìn)行異或操作,因為積的符號位的產(chǎn)生規(guī)則是同號相乘為正,異號相乘為負(fù)。 求被乘數(shù)和乘數(shù)的絕對值,并使兩絕對值相乘從而獲得積的絕對值,方法是分別判斷被乘數(shù)和乘數(shù)的符號位:若它為正,則其本身就是絕對值;若它為負(fù),則對它求補。 對積進(jìn)行處理。若積為正,則對積不進(jìn)行處理;若積為負(fù),則對積求補,使之變?yōu)檠a碼的形式。
R0和R1中為兩個補碼形式的帶符號數(shù),R3R2為積 R0*R1=R3R2 ORG 0600H’ SBIT BIT 20H.0 SBIT1 BIT 20H.1 SBIT2 BIT 20H.2 MOV A,R0 ;被乘數(shù)送A RLC A ;被乘數(shù)符號送CY MOV SBIT1,C ;送入SBIT1 MOV A,R1 ;乘數(shù)送A RLC A ;乘數(shù)符號送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 ;處理被乘數(shù) JNB SBIT1,NCH1 ;若她為正,則轉(zhuǎn)NCH1 CPL A ;若她為負(fù),則求補的絕對值 INC A ; NCH1: MOVB,A ;被乘數(shù)絕對值送B MOVA,R1 :處理乘數(shù) JNB SBIT2,NCH2 ;若它為正,則轉(zhuǎn)NCH2 CPL A ;若她為負(fù),則求補的絕對值 ADD A,#01H ; NCH2: MULAB ;求積的絕對值 JNB SBIT,NCH3 ;若積為正,則轉(zhuǎn)NCH3 CPL A ;若積為負(fù),則低字節(jié)求補 ADD A,#01H ; NCH3: MOVR2,A ;積的低字節(jié)存入R2 MOV A,B ;積的高字節(jié)送A JNB SBIT,NCH4 ;若積為正,則轉(zhuǎn)NCH4 CPL A ;若積為負(fù),則高字節(jié)求補 ADDC A,00H ; NCH4: MOVR3,A ;積的高字節(jié)存入R3 SJMP $ END
|