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,但結果爲零?我錯過了什麼嗎?