2
我觉得我要疯了。我试图编写一个模拟ARM汇编中硬件浮点加法的函数。我有一个函数float simulate_fp_add(float, float)
目前看起来是这样的:(ARM程序集)向右移位寄存器1将所有位设置为零
.global simulated_fp_add
.type simulated_fp_add, %function
simulated_fp_add:
push {r3, r4, r5, r6, lr}
mov r0, r0, lsr #1
pop {r3, r4, r5, r6, pc}
我的主文件(简体)目前只是调用我的两个任意花车ARM功能,结果以十进制和二进制输出:
#include <stdio.h>
float simulated_fp_add(float, float);
void prt_bin(unsigned int, unsigned int);
int main() {
float x,y,z;
unsigned int a,b,c;
union
{
float f;
unsigned int i;
} u;
x = 125;
y = 0.5;
u.f = x;
a = u.i;
u.f = y;
b = u.i;
c = simulated_fp_add(a, b);
u.f = c;
printf("simulated_fp_add(%d, %d) = %f\n", a, b, u.f);
printf("result in binary: ");
prt_bin(c, 32);
putchar('\n');
return 0;
}
void prt_bin(unsigned int value, unsigned int length) {
int i;
for (i=(length-1); i>=0; i--) {
if ((value >> i) & 1)
putchar('1');
else
putchar('0');
}
}
与换档线输出中除去:
simulated_fp_add(1123680256, 1056964608) = 125.000000
result in binary: 01000010111110100000000000000000
输出WITH变速:
simulated_fp_add(1123680256, 1056964608) = 0.000000
result in binary: 00000000000000000000000000000000
我的所有的simulated_fp_add函数都会将r0中的浮点数右移1,但结果为零?我错过了什么吗?