2
我的任务是获取一组数字并将其放入ARM程序集并执行2的补码,然后再次输出以供显示。我能够完成大部分工作,但是输出结果告诉我这是行不通的。ARM编程输出数组和malloc来清除输入数组?
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
谁能帮助我弄清楚为什么它给我这么搞砸输出
我没有任何输出做你所选择的变化的差异,但我感谢你的回应。 – NaGeLxZ