1.3.1. Utgå från att följande deklarationer är gjorda på global nivå.
int a,b,c;
Visa en kodsekvens, i ARM assemblerspråk, som evaluerar följande uttrycks värde till register R0.
a) -b;
b) ~b;
c) a * -b;
d) a * (b+c);
e) a * b + c;
Lösning: a) LDR R0,b NEG R0,R0 b) LDR R0,b MVN R0,R0 c) LDR R3,b NEG R3,R3 LDR R0,a MUL R0,R0,R3 d) LDR R3,b LDR R2,c ADD R3,R3,R2 LDR R0,a MUL R0,R0,R3 e) LDR R3,a LDR R2,b MUL R3,R3,R2 LDR R2,c ADD R0,R3,R2
1.3.2. Deklarationen
int a,b,c;
är given. Ange den bästa kodningen av tilldelningssatsen:
a = b + c;
De olika lösningsalternativen är graderade från -1p..3p.
a)
LDR R1,b LDR R2,c ADD R0,R1,R2 STR R0,a |
b)
LDR R1,=b LDR R2,=c ADD R0,R1,R2 STR R0,a |
c)
LDR R1,b LDR R2,c ADD R0,R1,R2 LDR R7,=a STRB R0,[R7] |
d)
LDR R1,b LDR R2,c ADD R0,R1,R2 LDR R7,=a STR R0,[R7] |
e)
LDR R3,=b LDR R2,=c LDRB R3,[R3] LDRB R2,[R2] SUB R3,R3,R2 SXTB R3,R3 LDR R2,=a STR R3,[R2] |
Svar: d(3p), c,e(0p), a,b(-1p)
1.3.3. Deklarationen
unsigned short a,b,c;
är given. Ange den bästa kodningen av tilldelningssatsen:
a = b + c;
De olika lösningsalternativen är graderade från -1p..3p.
a)
LDRH R1,b LDRH R2,c ADD R0,R1,R2 STRH R0,a |
b)
LDR R1,=b LDRB R1,[R1] LDR R2,=c LDRB R2,[R2] ADD R0,R1,R2 LDR R7,=a STRB R0,[R7] |
c)
LDR R1,=b LDRH R1,[R1] LDR R2,=c LDRH R2,[R2] ADD R0,R1,R2 LDR R7,=a STRH R0,[R7] |
d)
LDRH R1,b LDRH R2,c ADD R0,R1,R2 LDR R7,=a STRH R0,[R7] |
e)
LDR R1,=b LDR R1,[R1] LDR R2,=c LDR R2,[R2] ADD R0,R1,R2 LDR R7,=a STRH R0,[R7] |
Svar: c(3p), b,e(0p), a,d(-1p)
1.3.4. Deklarationerna
int a;
char b,c;
är givna. Ange den bästa kodningen av tilldelningssatsen:
a = b - c;
De olika lösningsalternativen är graderade från -1p..3p.
a)
LDR R3,=b LDR R2,=c LDRH R3,[R3] LDRH R2,[R2] SUB R3,R2,R3 SXTH R3,R3 STRH R3,a |
b)
LDR R1,b LDR R2,c SUB R0,R1,R2 LDR R7,=a STR R0,[R7] |
c)
LDR R3,=b LDR R2,=c LDRB R3,[R3] LDRB R2,[R2] SUB R3,R2,R3 SXTB R3,R3 LDR R2,=a STR R3,[R2] |
d)
LDR R1,=b LDR R2,=c SUB R0,R1,R2 LDR R7,=a STR R0,[R7] |
e)
LDR R3,=b LDR R2,=c LDRB R3,[R3] LDRB R2,[R2] SUB R3,R3,R2 SXTB R3,R3 LDR R2,=a STR R3,[R2] |
Svar: e(3p), c(2p), a,d(-1p)
1.3.5. Utgå från att följande deklarationer är gjorda på global nivå.
int a,b,c;
Visa en kodsekvens, i ARM assemblerspråk, som evaluerar följande uttrycks värde till register R0.
a) a & 4;
b) a & b;
c) ~(a&8);
d) ~a&8;
a) MOV R3,#4 LDR R2,a AND R0,R2,R3 b) LDR R3,b LDR R2,a AND R0,R2,R3 c) MOV R3,#8 LDR R2,a AND R0,R2,R3 MVN R0,R0 d) MOV R3,#8 LDR R2,a MVN R2,R2 AND R0,R2,R3
1.3.6. Deklarationen
unsigned int ua;
är given. Ange alternativet för den bästa kodningen av följande tilldelningssats:
ua = ua >> 5;
De olika lösningsalternativen är graderade från -1p..3p.
a)
LDR R6,=ua LDR R0,[R6] LSL R0,#5 STR R0,[R6] |
b)
LDR R6,=ua LDR R0,[R6] ASR R0,#5 STR R0,[R6] |
c)
LDR R6,=ua LDR R0,[R6] LSR R0,#5 STR R0,[R6] |
d)
LDR R0,ua LSR R0,#5 STR R0,ua |
e)
LDR R0,=ua LSL R0,#5 STR R0,ua |
Svar: c(3p), a,b(0p), d,e(-1p)
1.3.7. Deklarationen
int a;
är given. Ange alternativet för den bästa kodningen av följande tilldelningssats:
a = a >> 5;
De olika lösningsalternativen är graderade från -1p..3p.
a)
LDR R0,a LSR R0,#5 STR R0,a |
b)
LDR R6,=a LDR R0,[R6] ASR R0,#5 STR R0,[R6] |
c)
LDR R6,=a LDR R0,[R6] LSL R0,#5 STR R0,[R6] |
d)
LDR R6,a LDR R0,[R6] LSR R0,#5 STR R0,[R6] |
e)
LDR R0,=a LSL R0,#5 STR R0,a |
Svar: b(3p), c,d(0p), d,e(-1p)
1.3.8. Utgå från att följande deklarationer är gjorda på global nivå.
short b,c;
extern short f(void);
Visa en kodsekvens, i ARM assemblerspråk, som evaluerar följande uttrycks värde till register R0.
c * f();
BL f LDR R3,=c LDRH R3,[R3] MUL R0,R3
1.3.9. Utgå från att följande deklarationer är gjorda på global nivå.
int b,c;
extern int f(void);
Visa en kodsekvens, i ARM assemblerspråk, som evaluerar följande uttrycks värde till register R0.
c * f() - b;
BL f LDR R3,c MUL R0,R0,R3 LDR R3,b SUB R0,R0,R3
1.3.10. Utgå från att följande deklarationer är gjorda på global nivå.
char f(void);
int a,b;
Visa en kodsekvens, i ARM assemblerspråk, som evaluerar följande uttrycks värde till register R0.
f() + a * ~( b & 4 );
BL f SXTB R0,R0 LDR R3,b MOV R2,#4 AND R3,R3,R2 MVN R3,R3 LDR R2,a MUL R2,R2,R3 ADD R0,R0,R2