|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
KEIL C51中没有实现ldivt,所以有时做BCD码处理时的除法和取模效率不高,要无谓的计算两次,研究了一下,用了在线汇编把结果直接取出来,比较方便,实现如下:
typedef struct {
long quot;
long rem;
} ldiv_t;
ldiv_t ldiv(long numer, long denom) {
ldiv_t result;
result.quot = numer / denom;
// result.rem = numer % denom; //此行用于校验result的地址
__asm MOV ?_ldiv?BYTE+8+4,R0
__asm MOV ?_ldiv?BYTE+8+5,R1
__asm MOV ?_ldiv?BYTE+8+6,R2
__asm MOV ?_ldiv?BYTE+8+7,R3
return result;
}
使用:
ldiv_t test = ldiv(0x12345678, 0x98765);
以上文件可以单独放在一个C文件里实现,这样变量一般不会出错,否则要自行修改以上的汇编中的局部变量引用.
最后C文件属性中注意勾选src两项!
|
打赏
-
查看全部打赏
|