51单片机8位带符号乘法运算(汇编)

2019-04-15 12:45发布

采用对符号位单独处理的办法,处理步骤如下:
  1. 单独处理被乘数和乘数的符号位,办法是单独取出被乘数符号位并与乘数符号位进行异或操作,因为积的符号位的产生规则是同号相乘为正,异号相乘为负。
  2. 求被乘数和乘数的绝对值,并使两绝对值相乘从而获得积的绝对值,方法是分别判断被乘数和乘数的符号位:若它为正,则其本身就是绝对值;若它为负,则对它求补。
  3. 对积进行处理。若积为正,则对积不进行处理;若积为负,则对积求补,使之变为补码的形式。
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