Themuslim7 116
Postad: 20 jan 19:27

C, C++, assembly - från kod till MCU:ns utförande

För att få en MCU att göra olika önskade saker, kan man programmera detta och översätta till binärt till mcu:n som utför koden. Man kan skriva kod i C, C++, Assembly eller många fler. Assembly är dock det allra närmaste till maskinkod och gör i princip det som egentligen sker i mcu:n senare. Hur ser dock denna process ut

 

Programmet laddas ju på flashminnet på mcu:n via exempelvis usb, sedan går programräknaren igenom flashminnet där programmet står och saker börjar hända. Hur vet den dock var och hur mycket den ska läsa i flashminnet eller går den igenom alla adresser i flashminnet

farfarMats 1018
Postad: 21 jan 14:21 Redigerad: 21 jan 14:22

Den börjar på en förutbestämd adress (troligen 1) och fortsätter i sekvens tills den kommer till en 'jump' då den hoppar till angiven adress ofta beroende på aktuellt innehåll i något register och ofta villkorligt dvs bara om ett angivet villkor är uppfyllt, t.ex. att innehållet i ett register är större än noll. Sen fortsätter den med nästa instruktion o.s.v. tills den kommer till en 'stop' -instruktion.

I praktiken i en dator finns ett resident program, operativsystemet, som startar ditt program och tar över när det kommer till stop.

Mycket förenklat... 

Themuslim7 116
Postad: 23 jan 16:16
farfarMats skrev:

Den börjar på en förutbestämd adress (troligen 1) och fortsätter i sekvens tills den kommer till en 'jump' då den hoppar till angiven adress ofta beroende på aktuellt innehåll i något register och ofta villkorligt dvs bara om ett angivet villkor är uppfyllt, t.ex. att innehållet i ett register är större än noll. Sen fortsätter den med nästa instruktion o.s.v. tills den kommer till en 'stop' -instruktion.

I praktiken i en dator finns ett resident program, operativsystemet, som startar ditt program och tar över när det kommer till stop.

Mycket förenklat... 

Jag förstår, angående en mcu med RISC-V. Jag har denna mcu: RV32IMAC med 32 interna register där det bland annat finns temporära register (t0-t6), argument/return (a0-a1) och argument (a2-a7) - register.

Vad skulle hända eller vilka problem skulle man stöta på om man bara hade t-register, inga a-register? Jag kan C, så liknelser kan kopplas med programmeringsspråket

farfarMats 1018
Postad: 24 jan 15:35

Det beror naturligtvis på vad man använder a-register till om man kan kompensera genom att använda andra register.  Lustigt namn temporära register, alla register är väl temporära t.o.m. ännu mer temporära än minnet.

Om du kan använda t-register eller något av de andra 18 registren som adress och index i instruktioner så borde det gå bra. För användningen av a0 /a1 till att peka ut argumentlistan resp returadressen är väl bara en programmerarkonvention och inte inbyggt i hårdvaran?

Den enda RISC-maskin jag haft kontakt med på assemblernivå är CDC6600 på sena 60-talet ( jag vet begreppet RISCprocessor är yngre men den hade bara 64 maskininstruktioner, och det är väl Reduced Instruction Set CPU vi talar om?) 

Svara Avbryt
Close