1.4.1.
De globala variablerna
unsigned int a,b;
int c,d;
är definierade.
Visa hur följande programsekvens kodas i assemblerspråk:
if( a < b ) { if ( c < d ) L1; } L2;
LDR R3,a LDR R2,b CMP R3,R2 BCS .L2 @ komplementärt villkor, inget tecken LDR R3,c LDR R2,d CMP R3,R2 BGE L2 @ komplementärt villkor, med tecken .L1: … .L2:
1.4.2.
De globala variablerna
int a,b,c;
är definierade.
Visa hur följande programsekvens kodas i assemblerspråk:
While_Continue: LDR R3,a TST R3,R3 BMI While_Break @ komplementärt villkor LDR R2,b CMP R3,R2 @ a-b BGE .L1 @ komplementärt villkor LDR R1,=c LDR R2,[R1] ADD R2,R2,#1 STR R2,[R1] @ c++; .L1: LDR R1,=a SUB R3,R3,#1 STR R3,[R1] B While_Continue While_Break: ...
1.4.3.
Funktionen
int mini( int a, int b);
och de globala variablerna
int x,y,z;
är definierade. Visa hur funktionsanropet:
x = mini( x, y );
kodas i assemblerspråk.
LDR R0,x LDR R1,y BL mini LDR R1,=x STR R0,[R1]
1.4.4.
Funktionen
char minc( char a, char b);
och de globala variablerna
char x,y,z;
är definierade.
Visa hur funktionsanropet:
x = minc( x, y );
kodas i assemblerspråk.
LDR R0,=x LDRB R0,[R0] SXTB R0,R0 LDR R1,=y LDRB R1,[R1] SXTB R1,R1 BL minc LDR R1,=x STRB R0,[R1]
1.4.5. Följande funktion är definierad:
g: ADD R0,R0,R1 ADD R0,R0,R2 ADD R0,R0,R3 BX LR
1.4.6. Följande funktion är definierad:
mean: ADD R0,R0,R1 ASR R0,R0,#1 BX LR
1.4.7. Följande funktion är definierad:
mini: CMP R0,R1 BLT .L1 MOV R0,R1 .L1: BX LR
1.4.8. Följande funktion är definierad:
minc: CMP R0,R1 BLE .L1 MOV R0,R1 .L1: UXTB R0,R0 @ konvertera till char BX LR
1.4.9.
Funktionen int testme( int a, int b )
är definierad.
Visa hur följande funktion kan kodas i assemblerspråk:
f: PUSH {LR} BL testme TST R0,R0 BNE .L1 MOV R0,#0 B .L2 .L1: MOV R0,#1 .L2: POP {PC}
1.4.10.
Funktionen int g( int )
är definierad.
Visa hur följande funktion kan kodas i assemblerspråk:
f: PUSH {R4,LR} MOV R4,R0 @ spill parameter till R4 ADD R0,R0,#1 BL g CMP R4,R0 BGT .L1 MOV R0,#0 B .L2 .L1: MOV R0,#1 .L2: POP {R4,PC}