打印

求教:没有除法指令,使用汇编实现除法运算的思路

[复制链接]
7664|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szshawn2010|  楼主 | 2010-3-5 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
古道热肠| | 2010-3-5 12:37 | 只看该作者
好象有个除2取余生成二进制,除2用右移,最好的方法是用C语文写个除法代码,编译成汇编代码,然后查看其实现方法,通常是比较高效和实用的。

使用特权

评论回复
板凳
szshawn2010|  楼主 | 2010-3-5 13:01 | 只看该作者
哪个哥们能使用51的汇编源代码贴一下.  我的除数还是一个变量.

使用特权

评论回复
地板
maychang| | 2010-3-5 13:05 | 只看该作者
;*******************************
;*******无符号数五字节除以三字节除法
;*******被除数在R0R1R2R3R4中,除数在R5R6R7中
;*******OV=0时商在R0R1R2R3R4中,余数在R5R6R7中;OV=1溢出
;*******影响PSW,A,B,R0-R7,5字节存储器
;*******堆栈2字节
TEMP0        EQU        30H
TEMP1        EQU        31H
TEMP2        EQU        32H
TEMP3        EQU        33H
TEMP4        EQU        34H
TEMP5        EQU        35H
TEMP6        EQU        36H
TEMP7        EQU        37H

DIV53:        CLR        A
        MOV        TEMP0,A                ;余数(TEMP0-2)初始化为零
        MOV        TEMP1,A
        MOV        TEMP2,A
        MOV        B,#40                ;设定移位次数
        MOV        A,R7                ;检查除数是否为零
        JNZ        DIV530
        MOV        A,R6
        JNZ        DIV530                ;非零,可计算
        MOV        A,R5
        JNZ        DIV530                ;非零,可计算
        SETB        OV                ;是零,溢出
        RET
DIV530:        CLR        C                ;被除数和部分商左移
        MOV        A,R4
        RLC        A
        MOV        R4,A
        MOV        A,R3
        RLC        A
        MOV        R3,A
        MOV        A,R2
        RLC        A
        MOV        R2,A
        MOV        A,R1
        RLC        A
        MOV        R1,A
        MOV        A,R0
        RLC        A
        MOV        R0,A
        MOV        A,TEMP2                ;余数(TEMP0-2)左移
        RLC        A
        MOV        TEMP2,A
        MOV        A,TEMP1
        RLC        A
        MOV        TEMP1,A
        MOV        A,TEMP0
        RLC        A
        MOV        TEMP0,A
        MOV        F0,C                ;保护余数溢出位
        CLR        C
        MOV        A,TEMP2
        SUBB        A,R7                ;计算(TEMP012-R5R6R7)
        MOV        TEMP4,A                ;低字节差暂存至TEMP4
        MOV        A,TEMP1
        SUBB        A,R6
        MOV        TEMP3,A                ;中字节差暂存至TEMP3
        MOV        A,TEMP0
        SUBB        A,R5
        ANL        C,/F0                ;结果判断
        JC        DIV531                ;不够减,余数不变
        MOV        TEMP0,A                ;够减,存放新的余数
        MOV        A,TEMP3
        MOV        TEMP1,A
        MOV        A,TEMP4
        MOV        TEMP2,A
        INC        R4                ;商的低位加一
DIV531:        DJNZ        B,DIV530        ;计算完40位商(R0R1R2R3R4中)
        MOV        A,TEMP2                ;余数移到R5R6R7
        MOV        R7,A
        MOV        A,TEMP1
        MOV        R6,A
        MOV        A,TEMP0
        MOV        R5,A
        CLR        OV                ;置计算成功标志
        RET
;*******************************

使用特权

评论回复
5
szshawn2010|  楼主 | 2010-3-5 14:42 | 只看该作者
4# maychang


哥们谢谢你.

能否再给一个 乘法的运算.带浮点的那种.


谢谢

使用特权

评论回复
6
woshixinshou| | 2010-10-28 19:31 | 只看该作者
可以给一个AVR汇编除法吗,谢谢啊,maychang

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

636

帖子

1

粉丝