请教C51高手

[复制链接]
 楼主| ayb_ice 发表于 2008-2-26 14:59 | 显示全部楼层 |阅读模式
C51, ov, vr, ce, rc

请教C51高手
下面程序在输出显示时经常使用到

void main(void)
{
    unsigned int a,b,x,y;

    x = 1000;
    y = 40;
    a = x/y;
    b = x%y;

    while(1);
}


被KEIL C51编译如下汇编代码
其中两次调用?C?UIDIV库函数进行除法运算分别获取商和余数,
这样浪费太多的CPU时间,
但其实只要调用一次就可以获取商和余数,请问有没有什么方法
只一次就可以的,用C怎么写...

; void main(void)

    RSEG  ?PR?main?MAIN
main:
    USING    0
            ; SOURCE LINE # 64
; {
            ; SOURCE LINE # 65
;     unsigned int a,b,x,y;

;     x = 1000;
            ; SOURCE LINE # 68
;---- Variable 'x?042' assigned to Register 'R2/R3' ----
;     y = 40;
            ; SOURCE LINE # 69
;---- Variable 'y?043' assigned to Register 'DPTR' ----
    MOV      DPTR,#028H
;     a = x/y;
            ; SOURCE LINE # 70
    MOV      R7,#0E8H
    MOV      R6,#03H
    MOV      R5,DPL
    MOV      R4,DPH
    LCALL    ?C?UIDIV
    MOV      a?040,R6
    MOV      a?040+01H,R7
;     b = x%y;
            ; SOURCE LINE # 71
    MOV      R6,DPH
    MOV      R7,DPL
    MOV      R4,#03H
    MOV      R5,#0E8H
    XCH      A,R7
    XCH      A,R5
    XCH      A,R7
    XCH      A,R6
    XCH      A,R4
    XCH      A,R6
    LCALL    ?C?UIDIV
    MOV      b?041,R4
    MOV      b?041+01H,R5
?C0001:

;     while(1);
            ; SOURCE LINE # 73
    SJMP     ?C0001
; END OF main

    END
sz_kd 发表于 2008-2-26 15:03 | 显示全部楼层

不知道,估计要试

mohanwei 发表于 2008-2-26 15:09 | 显示全部楼层

显示本身周期就比较长,没必要优化这点代码的。

把编译优化设置为9即可
happystar 发表于 2008-2-26 19:00 | 显示全部楼层

我也想不出来,帮你顶顶吧

hotpower 发表于 2008-2-26 19:11 | 显示全部楼层

哈哈~~~俺是菜鸟...b=x-a*y;

dld2 发表于 2008-2-26 19:14 | 显示全部楼层

是喽,乘法比除法划算

happystar 发表于 2008-2-26 20:16 | 显示全部楼层

晕!hotpower强啊,我怎么没想到呢,佩服呀。

hotpower 发表于 2008-2-26 20:27 | 显示全部楼层

哈哈~~~俺是菜鸟~~~比DSP的优化差多了~~~

qjy_dali 发表于 2008-2-26 23:25 | 显示全部楼层

呵呵,看来有时候还是要把写法改改

 楼主| ayb_ice 发表于 2008-2-27 09:11 | 显示全部楼层

hotpower的方法有点创意

确实比求余要高效,但毕竟也要调用库函数,我这里只是个例子,实际可能是有符号32,64位数的求商,求余,这种方法效率还是比较低,应该有更高效的方法。。。
ljh2269 发表于 2008-2-27 09:36 | 显示全部楼层

用减法执行效率可能会更好

hotpower 发表于 2008-2-27 23:00 | 显示全部楼层

倒塌了~~~这本身是个小学题,只是优化是问题~~~

您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15490

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部