【发布时间】:2011-10-25 21:01:59
【问题描述】:
我的任务是取一个数字数组并把它放入 ARM 汇编并执行 2 的补码,然后再次输出以显示。我能够完成大部分工作,但输出告诉我它工作不正常。
C 代码:
#include <stdio.h>
int * comp( int a[], int size ) ;
void main( int argc, char * argv[] )
{
int array[] = { 1, -1, 252, -252, 0, 3015 } ;
int size = sizeof(array) / sizeof(int) ;
int * result ;
int i ;
result = comp( array, size ) ;
printf( "Original Complement\n" ) ;
for( i = 0 ; i < size ; i++ )
printf( "%d %d\n", array[i], *(result+i) ) ;
}
ARM 组装:
AREA |comp$code|, CODE, READONLY ; tell the assembler stuff
IMPORT malloc ; import malloc to be used
EXPORT comp ; tell the assembler to show this label to the linker
comp ; the label defining the entry point
stmfd sp!, {v1-v6, lr} ; standard entry
str v1, [a1] ; copy a1 over to v1
str v2, [a2] ; copy a1 over to v1
bl malloc ; clears pointer for new array
loop
ldr a4,[v1],#4 ; start going through loop starting at top or array
mvn a4, a4 ; ones complement
add a4,a4,#1 ; make it 2's complement
str a4,[a1], #4 ; move back into the array
subs v2, v2, #1 ; set a flag for the end of the loop
bne loop ; start again for the next value in the array
ldmfd sp!, {v1-v6, pc} ; puts all registers back into the caller
END
输出:
Original Complement
0 -442500552
-1 -442500552
252 0
-252 0
0 0
3015 0
谁能帮我弄清楚为什么它给了我如此混乱的输出
【问题讨论】: