工具/软件:TI C/C++编译器
我有以下代码片段:
void To523 (float param_dec、uint16* param_hex){ long param223; long param227; #define One_23 0x000#define One_27 0x800000000 param_dec = param_dec *(1L << 23);//将十进制数乘以2^ ^23 (浮点数转换为 long) param_dec = param_dec *(param_dec 1) param_dec *(1) param_dec 23);param23 (将十进制数乘以 float
这里是生成的汇编代码...
32 param223 = param_dec *(1L << 23);//将十进制数乘以2^23 (将浮点型转换为长整型) 3f1234:9A00 MOVB AL、#0x0 3f1235:28A84B00 MOV @AH、#0x4b00 3f1237:1E42 MOVL *-SP[2]、ACC 3f1238:0644 MOVL ACC、*- SP[4] 3f1239:767F2A41 LCR FS$$MPY 3f123b:767F2B78 LCR FS$$TOL 3f123d:1E48 MOVL *-SP[8]、ACC 33 param223 = param_dec *(One_23);//将十进制数乘以2^23 (将浮点型转换为长整型) 3f123e:9A00 MOVB AL、#0x0 3f123f:28A84B00 MOV @AH、#0x4b00 3f1241:1E42 MOVL *-SP[2]、ACC 3f1242:0644 MOVL ACC、*- SP[4] 3f1243:767F2A41 LCR FS$MPY 3f1245:767F2B78 LCR FS$$TOL 3f1247:1E48 MOVL *-SP[8]、ACC
您将看到两个 C 指令编译为相同的代码、这很好、编译器注意到1L << 23是一个常数。
但是、我的问题是、"前2条汇编指令不应该将0x800000加载到 ACC 中? 我看到正在加载0x4b000000。 为什么?
谢谢、Mark。