单片机乘法的实现

来源:百度知道 编辑:UC知道 时间:2024/06/05 17:31:32
89S51单片机的CPU进行乘法是硬件乘法器实现的吗?消耗几个指令周期?
PIC为什么没有乘法指令?

org 0000h
  jmp start
  start:
  MOV SP,#60H
  mov r2,#20h
  mov r3,#34h
  mov a,#99h
  lcall bhd
  lcall hbd
  NOP
  NOP

  ;三字节除以单字节子程序
  ;入口条件:被除数在R3、R4、R5中,除数在R7中。
  ;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
  ;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
  DV31:
  CLR C
  MOV A,R3
  SUBB A,R7
  JC DV30
  SETB OV ;商溢出
  RET
  DV30:
  MOV R2,#10H;求R3R4R5/R7-→R4R5
  DM23:
  CLR C
  MOV A,R5
  RLC A
  MOV R5,A
  MOV A,R4
  RLC A
  MOV R4,A
  MOV A,R3
  RLC A
  MOV R3,A
  MOV F0,C
  CLR C
  SUBB A,R7
  ANL C,/F0
  JC DM24
  MOV R3,A
  INC R5
  DM24:
  DJNZ R2,DM23
  MOV A,R3 ;四舍五入
  ADD A,R3
  JC DM25
  SUBB A,R7
  JC DM26
  DM25:
  INC R5
  MOV A,R5
  JNZ DM26
  INC R4
  DM26:
  CLR OV
  RET ;商在R4R5中

  ;两字节除以单字节子程