导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→ARM指令集中怎样实现除法啊??肉肉的[skyfish8082]

 *第21912篇: ARM指令集中怎样实现除法啊??肉肉的

  
楼 主:skyfish8082 2004年5月14日11:51
 ARM指令集中怎样实现除法啊??肉肉的
+ - 乘 法都有,怎么做除法呢?
  
2楼:richardhaha 2004年5月15日10:28
 没有除法指令,得写程序
  
3楼:hxq0374 2004年5月15日10:39
 re:[注意]
标号:  FDIV    功能:浮点数除法

入口条件:被除数在[R0]中,除数在[R1]中。
出口信息:OV=0时,商仍在[R0]中,OV=1时,溢出。
影响资源:PSW、A、B、R2~R7、位1EH、1FH   堆栈需求:  5字节

FDIV: INC R0
 MOV A,@R0
 INC R0
 ORL A,@R0
 DEC R0
 DEC R0
 JNZ DIV1
 MOV @R0,#41H;被除数为零,不必运算
 CLR OV
 RET
DIV1: INC R1
 MOV A,@R1
 INC R1   
 ORL A,@R1
 DEC R1
 DEC R1   
 JNZ DIV2 
 SETB OV ;除数为零,溢出
 RET      
DIV2: LCALL MVR0 ;将[R0]传送到第一工作区中
 MOV A,@R0
 XRL A,@R1 ;比较两个操作数的符号
 RLC A
 MOV 1FH,C ;保存结果的符号
 LCALL MVR1 ;将[R1]传送到第二工作区中
 LCALL DIV3 ;调用工作区浮点除法
 LJMP MOV0 ;回传结果
DIV3: CLR C ;比较尾数的大小
 MOV A,R4
 SUBB A,R7
 MOV A,R3
 SUBB A,R6
 JC DIV4
 LCALL RR1 ;被除数右规一次
 SJMP DIV3
DIV4: CLR A ;借用R0R1R2作工作寄存器
 XCH A,R0 ;清零并保护之
 PUSH ACC
 CLR A
 XCH A,R1
 PUSH ACC
 MOV A,R2
 PUSH ACC
 MOV B,#10H ;除法运算,R3R4/R6R7-→R0R1
DIV5: CLR C
 MOV A,R1
 RLC A
 MOV R1,A
 MOV A,R0
 RLC A
 MOV R0,A
 MOV A,R4
 RLC A
 MOV R4,A
 XCH A,R3
 RLC A
 XCH A,R3
 MOV F0,C
 CLR C
 SUBB A,R7
 MOV R2,A
 MOV A,R3
 SUBB A,R6
 ANL C,/F0
 JC DIV6
 MOV R3,A
 MOV A,R2
 MOV R4,A
 INC R1
DIV6: DJNZ B,DIV5
 MOV A,R6 ;四舍五入
 CLR C
 RRC A
 SUBB A,R3
 CLR A
 ADDC A,R1 ;将结果存回R3R4
 MOV R4,A
 CLR A
 ADDC A,R0
 MOV R3,A
 POP ACC ;恢复R0R1R2
 MOV R2,A
 POP ACC
 MOV R1,A
 POP ACC
 MOV R0,A
 MOV A,R2 ;计算商的阶码
 CLR C
 SUBB A,R5
 LCALL MD ;阶码检验
 LJMP RLN ;规格化

plus 
 标号:  FMUL    功能:浮点数乘法

入口条件:被乘数在[R0]中,乘数在[R1]中。
出口信息:OV=0时,积仍在[R0]中,OV=1时,溢出。
影响资源:PSW、A、B、R2~R7、位1EH、1FH    堆栈需求:6字节

FMUL: LCALL MVR0 ;将[R0]传送到第一工作区中
 MOV A,@R0
 XRL A,@R1 ;比较两个操作数的符号
 RLC A
 MOV 1FH,C ;保存积的符号
 LCALL MUL0 ;计算积的绝对值
 LJMP MOV0 ;将结果传回到[R0]中
MUL0: LCALL MVR1 ;将[R1]传送到第二工作区中
MUL1: MOV A,R3 ;第一尾数为零否?
 ORL A,R4
 JZ MUL6
 MOV A,R6 ;第二尾数为零否?
 ORL A,R7
 JZ MUL5
 MOV A,R7 ;计算R3R4×R6R7-→R3R4
 MOV B,R4
 MUL AB
 MOV A,B
 XCH A,R7
 MOV B,R3
 MUL AB
 ADD A,R7
 MOV R7,A
 CLR A
 ADDC A,B
 XCH A,R4
 MOV B,R6
 MUL AB
 ADD A,R7
 MOV R7,A
 MOV A,B
 ADDC A,R4
 MOV R4,A
 CLR A
 RLC A
 XCH A,R3
 MOV B,R6
 MUL AB
 ADD A,R4
 MOV R4,A
 MOV A,B
 ADDC A,R3
 MOV R3,A
 JB ACC.7,MUL2;积为规格化数否?
 MOV A,R7 ;左规一次
 RLC A
 MOV R7,A
 LCALL RL1
MUL2: MOV A,R7
 JNB ACC.7,MUL3
 INC R4
 MOV A,R4
 JNZ MUL3
 INC R3
 MOV A,R3
 JNZ MUL3
 MOV R3,#80H
 INC R2
MUL3: MOV A,R2 ;求积的阶码
 ADD A,R5
MD: MOV R2,A ;阶码溢出判断
 JB ACC.7,MUL4
 JNB ACC.6,MUL6
 MOV R2,#3FH ;阶码上溢,设立标志
 SETB OV
 RET
MUL4: JB ACC.6,MUL6
MUL5: CLR A ;结果清零(因子为零或阶码下溢)
 MOV R3,A
 MOV R4,A
 MOV R2,#41H
MUL6: CLR OV
 RET


>>>>>>对该主题发表你的看法

本主题贴数3,分页: [第1页]


[上一篇主题]:[求助]各位前辈若能帮小妹一把,我将。。。呵呵!

[下一篇主题]:[求助]服务器/客户机编程问题