Maskinnära programmering i C och assembler
Maskinnära programmering i C och assembler
Maskinnära programmering i C och assembler
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Unsigned <strong>och</strong> Signed<br />
I C förekommer de reserverade orden unsigned<br />
respektive signed i samband med datatyper. De<br />
föregår alltid typdeklarationen <strong>och</strong> om de<br />
utelämnas så förutsätts alltid att signed avses.<br />
Låt oss se exempel på vad detta innebär för<br />
kodgenereringen av ett C-program.<br />
UPPGIFT 130:<br />
Betrakta följande C-program<br />
int j,k;<br />
main()<br />
{<br />
if( k < 100 )<br />
j = 1;<br />
else<br />
j = 2;<br />
}<br />
Kompilera programmet till <strong>assembler</strong>kod <strong>och</strong><br />
identifiera kodutläggningen för if-satsen. Vilken<br />
villkorlig branch-instruktion används?<br />
Ändra nu datatypen till unsigned int <strong>och</strong><br />
kompilera på nytt till <strong>assembler</strong>, vilken villkorlig<br />
branch-instruktion används denna gång.<br />
SLUT PÅ UPPGIFT 130.<br />
Typkonverteringar<br />
Typkonverteringar är en viktig del i kompilatorns<br />
arbete att översätta C-kod till <strong>assembler</strong>kod. I<br />
programspråket definieras så kallade implicita<br />
typkoverteringar, dvs regler för hur kompilatorn<br />
ska bete sig vid operationer på variabler av olika<br />
typer. Man kan sätta implicit typkonvertering ur<br />
spel genom att ange vilken typ<br />
UPPGIFT 131:<br />
Kompilera följande program till <strong>assembler</strong> <strong>och</strong><br />
studera <strong>assembler</strong>filen.<br />
long int la;<br />
short int sa,sb;<br />
void main()<br />
{<br />
Implicit typkonvertering.<br />
Bestäms av att resultatets<br />
sa= la;<br />
(sa) typ är short int.<br />
}<br />
sa=(short int) la;<br />
Explicit typkonvertering,<br />
dvs<br />
angiven i källtexten<br />
Arbetsbok för MC12<br />
Upptäcker du någon skillnad mellan<br />
tilldelningssatserna?<br />
Ändra nu kompilatorns varningsnivå genom att ta<br />
bort flaggan<br />
"-w2" (Project | Settings, C-Compiler, Options) –<br />
kompilera på nytt. Vilka varningsmeddelanden får<br />
du?<br />
SLUT PÅ UPPGIFT 131.<br />
UPPGIFT 132:<br />
Kompilera följande program till <strong>assembler</strong>.<br />
unsigned int la;<br />
unsigned short int sb,sc;<br />
void main()<br />
{<br />
la = (sb