采用对符号位单独处理的办法,处理步骤如下: 单独处理被乘数和乘数的符号位,办法是单独取出被乘数符号位并与乘数符号位进行异或操作,因为积的符号位的产生规则是同号相乘为正,异号相乘为负。 求被乘数和乘数的绝对值,并使两绝对值相乘从而获得积的绝对值,方法是分别判断被乘数和乘数的符号位:若它为正,则其本身就是绝对值;若它为负,则对它求补。 对积进行处理。若积为正,则对积不进行处理;若积为负,则对积求补,使之变为补码的形式。
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: MOVB,A ;被乘数绝对值送B MOVA,R1 :处理乘数 JNB SBIT2,NCH2 ;若它为正,则转NCH2 CPL A ;若她为负,则求补的绝对值 ADD A,#01H ; NCH2: MULAB ;求积的绝对值 JNB SBIT,NCH3 ;若积为正,则转NCH3 CPL A ;若积为负,则低字节求补 ADD A,#01H ; NCH3: MOVR2,A ;积的低字节存入R2 MOV A,B ;积的高字节送A JNB SBIT,NCH4 ;若积为正,则转NCH4 CPL A ;若积为负,则高字节求补 ADDC A,00H ; NCH4: MOVR3,A ;积的高字节存入R3 SJMP $ END
|