1.5.1.
De globala variablerna int j,c
och vecc
är
definierade enligt:
int j;
char c, vecc[80];
Koda följande tilldelningar i assemblerspråk:
a) c = vecc[0];
b) c = vecc[24];
c) c = vecc[j];
d) c = vecc[j+1];
a) LDR R3,=vecc LDRB R2,[R3] LDR R3,=c STRB R2,[R3] b) LDR R3,=vecc LDRB R2,[R3,#24] LDR R3,=c STRB R2,[R3] c) LDR R3,j LDR R2,=vecc LDRB R2,[R2,R3] LDR R3,=c STRB R2,[R3] d) LDR R3,j LDR R2,=vecc ADD R3,R2,R3 LDRB R2,[R3,#1] LDR R3,=c STRB R2,[R3]
1.5.2.
De globala variablerna k
, s
och vecs
är definierade enligt:
int j;
short s, vecs[80];
Koda följande tilldelningar i assemblerspråk:
a) s = vecs[0];
b) s = vecs[24];
c) s = vecs[j];
d) s = vecs[j+1];
a) LDR R3,=vecs LDRH R2,[R3] LDR R3,=s STRH R2,[R3] b) LDR R3,=vecs LDRH R2,[R3,#48] LDR R3,=s STRH R2,[R3] c) LDR R3,j LSL R3,R3, #1 LDR R2,=vecs LDRH R2,[R3,R2] LDR R3,=s STRH R2,[R3] d) LDR R3,j ADD R3,R3,#1 LSL R3,R3,#1 LDR R2,=vecs LDRH R2,[R3,R2] LDR R3,=s STRH R2,[R3]
1.5.3.
De globala variablerna i
,j
och veci
är definierade enligt:
int j;
int i, veci[80];
Koda följande tilldelningar i assemblerspråk:
a) i = veci[0];
b) i = veci[24];
c) i = veci[j];
d) i = veci[j+1];
a) LDR R3,veci LDR R2,=i STR R3,[R2] b) LDR R3,=veci LDR R2,[R3,#96] LDR R3,=i STR R2,[R3] c) LDR R3,j LSL R3,R3,#2 LDR R2,=veci LDR R2,[R3,R2] LDR R3,=i STR R2,[R3] d) LDR R3,j ADD R3,R3,#1 LSL R3,R3,#2 LDR R2,=veci LDR R2,[R3,R2] LDR R3,=i STR R2,[R3]
1.5.4.
Vi har de globala deklarationerna:
int i;
char vc[20];
Visa en kodsekvens som evaluerar uttrycket vc[i]-vc[i+1]
till register R0.
LDR R3,i LDR R2,=vc ADD R1,R2,R3 @ R1 = vc[i] LDRB R3,[R2,R3] @ R3 = M(char)(vc + i) LDRB R2,[R1,#1] @ R2 = M(char)(vc + i + 1) SUB R0,R3,R2 @ R0 = (M(char)(vc + i))- (M(char)(vc + i + 1))
1.5.5.
Vi har de globala deklarationerna:
int i;
char vc[20];
short vs[20];
Visa en kodsekvens som evaluerar uttrycket vc[i]+vs[i]
till register R0.
LDR R3,i LDR R2,=vc LDRB R2,[R2,R3] @ R2 = M(char)(vc+i) LSL R3,R3,#1 @ R3 = i*2 (sizeof(short)) LDR R1,=vs LDRH R3,[R3,R1] @ R3 =M(short)(vs + i*2 ) ADD R0,R2,R3 @ R0 = M(vc+i) + M(vs + i*2 )
1.5.6.
Vi har de globala deklarationerna:
int i,j;
char mc[8][16];
Visa en kodsekvens som evaluerar uttrycket mc[i][4]
till register R0.
@ adress = mc + (i*16) + 4 LDR R3,i LSL R3,R3,#4 @ R3 = i*16 LDR R2,=mc ADD R3,R2,R3 @ R3 = mc + (i*16) LDRB R0,[R3,#4] @ R0 = M(char) (mc + (i*16) + 4)
1.5.7.
Vi har de globala deklarationerna:
int i,j;
char mc[8][5];
Visa en kodsekvens som evaluerar uttrycket mc[3][j]
till register R0.
@ adress = mc + (3*5) + j LDR R3,j LDR R2,=mc ADD R3,R2,R3 @ R3 = mc + j LDRB R0,[R3,#15] @ R0 = M(char)( mc+j+(3*5) )
1.5.8.
Vi har de globala deklarationerna:
int i,j;
short ms[8][16];
Visa en kodsekvens som evaluerar uttrycket ms[7][j]
till register R0.
@ adress = ms + ( 7*16 + i ) * sizeof(short) LDR R3,j ADD R3,R3,#112 @ R3 = j+(7*16) LSL R3,R3,#1 @ R3 = (j+(7*16))*2 LDR R2,=ms LDRH R0,[R3,R2] @ R0 = M(short) ((j+(7*16))*2)
1.5.9.
Vi har de globala deklarationerna:
int i,j;
short ms[8][16];
Visa en kodsekvens som evaluerar uttrycket ms[i][3]
till register R0.
@ adress = ms + (i*16 + 3) * sizeof(short) LDR R3,i LSL R3,R3,#5 @ R3 = i*32 = i * 16 * 2 LDR R2,=ms ADD R3,R2,R3 @ R3 = ms + i*16*2 LDRH R0,[R3,#6] @ R0 = M(short) (ms + i*16*2 + 3*2 )
1.5.10.
Vi har de globala deklarationerna:
int i,j;
int vm[10][5];
Visa en kodsekvens som evaluerar uttrycket vm[i][j]
till register R0.
@ adress = vm+( (i*5) + j )* sizeof(int) LDR R3,i LSL R2,R3,#2 @ R2=i*4 ADD R3,R2,R3 @ R3 = (i*4)+i = (i*5) LDR R2,j ADD R3,R3,R2 @ R3=(i*5)+j LSL R3,R3,#2 @ R3 = ((i*5)+j)*4 LDR R2,=vm LDR R0,[R3,R2] @ R0 = M(int) ( ((i*5)+j)*4 )
1.5.11.
Vi har de globala deklarationerna:
int i,j;
char vm[10][10];
Visa en kodsekvens som evaluerar uttrycket vm[i][j+1]
till register R0.
@ adress = vm + i*10 + j + 1 LDR R3,i LDR R1,j LSL R2,R3,#2 @ R2 = (i*4) ADD R3,R2,R3 @ R3 = (i*4+i) LSL R2,R3,#1 @ R2 = (i*4+i)*2 = i*10 LDR R3,=vm ADD R3,R3,R2 @ R3 = vm + i*10 ADD R3,R3,R1 @ R3 = vm + i*10 + j LDRB R0,[R3,#1] @ R0 = M(char)( vm + i*10 + j+1 )
1.5.12. Vi har deklarationen:
struct { int a; char b; short c; COORD d; } st;Visa kodsekvenser som evaluerar följande uttryck i register R0.
a) st.c; b) st.d.y
a) LDR R3,=st LDRB R0,[R3,#6] @ R0 = st + 6 (offset_c) b) LDR R3,=st LDR R0,[R3,#12] @ R0=st.d.y (offset_d_y )