请教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 |