2017-09-16 1 views
2

Comment convertir ce programme C en code d'assemblage? J'ai du mal à comprendre la manipulation int non signée.Conversion de la fonction C en langage ARM

unsigned int sum(unsigned int n){ 
    if(n==0) return 0; 
    else return n+sum(n-1); 
    } 

Je l'ai fait si je considère int .Comment penser pour unsigned int?

sum: 
SUB sp, sp, #8 
STR lr, [sp,#4] 
STR r0, [sp,#0] 
CMP r0,#0 
BGE L1 
MOV r0, #0 
ADD sp, sp, #8 
MOV pc, lr 
L1: SUB r0, r0, #1 
BL sum 
MOV r12, r0 
LDR r0, [sp,#0] 
LDR lr, [sp,#4] 
ADD sp, sp, #8 
ADD r0, r0, r12 
MOV pc, lr 
+2

Eh bien, vous prenez un compilateur et passez ce programme avec quelques drapeaux. Pour clang, c'est quelque chose comme "clang -march arm -S yourprogram.c". – arrowd

+0

@arrowd 'clang -target arm -S votreprogramme.c' est correct. – fuz

Répondre

1

Il ne sera pas question pour unsigned int, des instructions comme ADD et SUB correctement dans les deux se comportent.

Certains ISA fournissent des ADD et SUB non signés (ADDU et SUBU) comme MIPS, qui ne diffèrent que par un comportement de débordement.