22.08.2013 Views

Maskinnära programmering i C och assembler

Maskinnära programmering i C och assembler

Maskinnära programmering i C och assembler

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!