Typkonverteringar

1.2.1 Ange talområdena för följande heltalstyper i C på hexadecimal form (Avser ARM-v6):
a) unsigned char;
b) signed char;
c) unsigned short;
d) signed short;
e) unsigned int;
f) signed int;
g) unsigned signed long;
h) signed long;

a)0..0xFF
b)0x80..0x7F
c)0..0xFFFF
d)0x8000..0x7FFF
e)0..0xFFFFFFFF
f)0x80000000..0x7FFFFFFF
g)0..0xFFFFFFFF
h)0x80000000..0x7FFFFFFF

1.2.2. Utgå från följande deklarationer på global nivå:
signed char c;
signed short s;
unsigned short us;
signed int i;
unsigned int ui;

visa hur följande tilldelningssatser kodas i ARM-v6 assemblerspråk:
c = us;
c = s;
c = ui;
c = i;

a)
    LDR	    R3,=us
    LDRH	R3,[R3]
    LDR	    R2,=c
    STRB	R3,[R2]
b)
    LDR	    R3,=s
    LDRH	R3,[R3]
    LDR	    R2,=c
    STRB	R3,[R2]
c)
    LDR	    R3,=ui
    LDR	    R3,[R3]
    LDR	    R2,=c
    STRB	R3,[R2]
eller:
    LDR	    R3,ui
    LDR	    R2,=c
    STRB	R3,[R2]
d)
    LDR	    R3,=i
    LDR	    R3,[R3]
    LDR	    R2,=c
    STRB	R3,[R2]
eller:
    LDR	    R3,i
    LDR	    R2,=c
    STRB	R3,[R2]

1.2.3. Utgå från följande deklarationer på global nivå:
unsigned char uc;
signed short s;
unsigned short us;
signed int i;
unsigned int ui;

visa hur följande tilldelningssatser kodas i ARM-v6 assemblerspråk:
uc = us;
uc = s;
uc = ui
uc = i;

Lösning:
a)
    LDR	    R3,=us
    LDRH	R3,[R3]
    LDR	    R2,=uc
    STRB	R3,[R2]
b)
    LDR	    R3,=s
    LDRH	R3,[R3]
    LDR	    R2,=uc
    STRB	R3,[R2]
c)
    LDR	    R3,=ui
    LDR	    R3,[R3]
    LDR	    R2,=uc
    STRB	R3,[R2]
eller:
    LDR	    R3,ui
    LDR	    R2,=uc
    STRB	R3,[R2]
d)
    LDR	    R3,=i
    LDR	    R3,[R3]
    LDR	    R2,=uc
    STRB	R3,[R2]
eller:
    LDR	    R3,i
    LDR	    R2,=uc
    STRB	R3,[R2]

1.2.4. Utgå från följande deklarationer på global nivå:
signed char c;
unsigned char uc;
signed short s;
signed int i;
unsigned int ui;

visa hur följande tilldelningssatser kodas i ARM-v6 assemblerspråk:
s = uc;
s = c;
s = ui
s = i;

Lösning:
a)
    LDR	    R3,=uc
    LDRB	R3,[R3]
    LDR	    R2,=s
    STRH	R3,[R2]
b)
    LDR	    R3,=c
    LDRB	R3,[R3]
    SXTB    R3,R3
    LDR	    R2,=s
    STRH	R3,[R2]
eller
    LDR	    R3,=c
    MOV	    R2,#0
    LDRSB	R3,[R3,R2]
    LDR	    R2,=s
    STRH	R3,[R2]
c)
    LDR	    R3,=ui
    LDR	    R3,[R3]
    LDR	    R2,=s
    STRH	R3,[R2]
eller:
    LDR	    R3,ui
    LDR	    R2,=s
    STRH	R3,[R2]
d)
    LDR	    R3,=i
    LDR	    R3,[R3]
    LDR	    R2,=s
    STRH	R3,[R2]
eller:
    LDR	    R3,i
    LDR	    R2,=s
    STRH	R3,[R2]

1.2.5. Utgå från följande deklarationer på global nivå:
signed char c;
unsigned char uc;
unsigned short us;
signed int i;
unsigned int ui;

visa hur följande tilldelningssatser kodas i ARM-v6 assemblerspråk:
us = uc;
us = c;
us = ui
us = i;

Lösning:
a)
    LDR	    R3,=uc
    LDRB	R3,[R3]
    LDR	    R2,=us
    STRH	R3,[R2]
b)
    LDR	    R3,=c
    LDRB	R3,[R3]
    LDR	    R2,=us
    STRH	R3,[R2]
c)
    LDR	    R3,=ui
    LDR	    R3,[R3]
    LDR	    R2,=us
    STRH	R3,[R2]
eller:
    LDR	    R3,ui
    LDR	    R2,=us
    STRH	R3,[R2]
d)
    LDR	    R3,=i
    LDR	    R3,[R3]
    LDR	    R2,=us
    STRH	R3,[R2]
eller:
    LDR	    R3,i
    LDR	    R2,=us
    STRH	R3,[R2]

1.2.6. Utgå från följande deklarationer på global nivå:
signed char c;
unsigned char uc;
signed short s;
unsigned short us;
signed int i;

visa hur följande tilldelningssatser kodas i ARM-v6 assemblerspråk:
i = uc;
i = c;
i = us;
i = s;

Lösning:
a)
    LDR	    R3,=uc
    LDRB	R3,[R3]
    LDR	    R2,=i
    STR	    R3,[R2]
b)
    LDR	    R3,=c
    LDRB	R3,[R3]
    SXTB    R3,R3
    LDR	    R2,=i
    STR	    R3,[R2]
eller
    LDR	    R3,=c
    MOV	    R2,#0
    LDRSB	R3,[R3,R2]
    LDR	    R2,=i
    STRH	R3,[R2]
c)
    LDR	    R3,=us
    LDRH	R3,[R3]
    LDR	    R2,=i
    STR	    R3,[R2]
d)
    LDR	    R3,=s
    LDR	    R3,[R3]
    SXTH    R3,R3
    LDR	    R2,=i
    STR	    R3,[R2]
eller:
    LDR	    R3,=s
    MOV	    R2,#0
    LDRSH	R3,[R3,R2]
    LDR	    R2,=i
    STRH	R3,[R2]

1.2.7. Utgå från följande deklarationer på global nivå:
signed char c;
unsigned char uc;
signed short s;
unsigned short us;
unsigned int ui;

visa hur följande tilldelningssatser kodas i ARM-v6 assemblerspråk:
ui = uc;
ui = c;
ui = us;
ui = s;

Lösning:
a)
    LDR	    R3,=uc
    LDRB    R3,[R3]
    LDR	    R2,=ui
    STR	    R3,[R2]
b)
    LDR	    R3,=c
    LDRB    R3,[R3]
    LDR	    R2,=ui
    STR	    R3,[R2]
c)
    LDR	    R3,=us
    LDRH    R3,[R3]
    LDR	    R2,=ui
    STR	    R3,[R2]
d)
    LDR	    R3,=s
    LDRH    R3,[R3]
    LDR	    R2,=ui
    STR	    R3,[R2]