Bra kurs i assembler med simulator för förståelse mha 6502

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
gkar
Inlägg: 1585
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av gkar »

Nerre skrev:
4kTRB skrev:
Just en sån grej som Icecaps optimering av multiplicering med 10 tror jag faktiskt att gcc fixar, MEN koden måste då vara skriven så att 10 är definierad som en konstant.
Konstantdeklarerad eller inte brukar inte generera någon skillnad på koden, så länge som kompilatorn vet att värdet är konstant.
Kollar man på vad som kommer ut ur GCC eller ARMs kompilator för ARM så löser den alla sådana och mer komplicerade saker.

På ARM7, en booth multiplier, tar en extra cykel för varje byte av 0 eller 0xff i sourcen du skall multiplicera med. Detta jämförs med att lösa det med add, sub, rsb och skiftningar. Sedan väljs det bästa.

På 68k tar varje multiplikation (Om minnet inte sviker mig) 38 cykler + 2 cykler om varje grupp av 01 eller 10 i sourcen. Vilket du som assemebler programmerare måste kunna om du vill slå kompilatorn, dvs, du vill ha talet med flest grupper om 00 eller 11 i sourcen för att spara cykler.

Skrev detta förut, men det verkar relavant här också så:

Detta är min assembler, men en kompilator ger samma resultat:

(multiplikationskonstant och kod efter)
2 add r1, r0, r0
3 add r1, r0, r0 lsl #1
4 mov r1, r0 lsl #2
5 add r1, r0, r0 lsl #2
7 rsb r1, r0, r0 lsl #3
8 mov r1, r0 lsl #3
9 add r1, r0, r0 lsl #3

if (a){
b *= 5;
} else {
b *= 7;
}

movs r0, r0
addne r1,r1,r1 lsl #2
rsbeq r1,r1,r1 lsl #3

rsb står för reverse subtract.

I praktiken, om man inte van och slipad i rätt assemblerdialekt gör kompilatorn ett bättre jobb en "standard" assemblerprogrammerare...

Det vanligaste problemet med C är att man skriver kod som inte tillåter kompilatorn att göra full optimering. Men det är ju ett annat problem, antagligen det största...
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av Icecap »

Nerre: nu kan det vara så att jag uttryckte mig fel men jag menar rent faktisk en bit hårdvara rimligt lik t.ex. en Vellemann K8055 som medger att man rent faktisk kan ha extern hårdvara inkopplat.
Nerre
Inlägg: 27229
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av Nerre »

Ja men poängen med den här kursen är ju att man SLIPPER skaffa sig hårdvara.

Kursen riktar sig ju inte till folk som vill börja programmera en mikrocontroller, den riktar sig till folk som vill förstå hur en mikroprocessor fungerar. Och som troligen aldrig nånsin kommer att BEHÖVA skriva assemblerkod för hårdvara. Så varför skulle de vilja köpa hårdvara för att testa sin kod?

Men jag tror att 90% av alla nybörjare som kommer till forumet här och ställer konstiga frågor (om kod som de försökt skriva av från nån sida på Nätet utan att veta vad den gör) faktiskt skulle ha nytta av att gå igenom den där kursen, även om de nu råkar hålla på med PIC eller AVR.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av blueint »

Icecap skrev:* Kopiera Result till en mellanvariabel.
* Dubbla Result två gg vid att shifta det två gg till vänster.
* Addera kopian. Result är då multiplicerat med 5.
* Shifta Result ett steg ytterligare till vänster vilket ger en 10-faltig multiplicering.
Smart! :idea:
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av Swech »

Jag kör en annan variant som ger samma resultat och samma antal instruktioner
Var bara kul att det fanns en som jag inte tänkt på

Skifta 1 steg vänster ( Värde = Startvärde*2)
Kopiera till temp (startvärde *2)
Skifta 2 steg vänster ( Värde = Startvärde *8 )
Addera temp ( startvärde * 8 + startvärde *2)

Swech
Användarvisningsbild
Icecap
Inlägg: 26648
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av Icecap »

Nerre: jag förstår - men likaväl är det extremt mycket mer motiverande för mig att ha en hårdvara som rent faktisk medger att man kan styra något. Det perfekta ville ju vara att ha båda möjligheter, alltså kunde torrköra och/eller ansluta en hårdvara.

Skulle jag designa sånt hade jag nog vald en mer generell op-kod uppsättning, sannolikt en RISC och givit möjlighet att dels köra med index i minne, setup av portar, stackhantering osv. men samtidig satt en "auto-möjlighet" så att man kan komma igång snabbare och sedan bygga på eftersom.

Och jag ville inte kopiera någon specifik µC instruktionsuppsättning, det borde vara mer "generella" funktioner med enkla mnemonics och de funktioner som behövs.

Men det får vänta till jag inte har annat att göra, just nu lekar jag med tanken om att göra en Z80 emulator för Renesas RX-serien, detta för att köra TRS80-program på den. Inte för att jag behöver det men bara för skoj.

Jag hoppas att hinna med inom 3-4 år...
Nerre
Inlägg: 27229
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av Nerre »

Jag förstår att de flesta här på forumet hellre skulle ha riktig hårdvara att leka med, men jag postade länken som tips på "en kurs man kan visa de som inte är intresserad av att pilla på hårdvaran" eller "en kurs för de som pillar på hårdvara utan att fatta vad de pysslar med).

Om nån annan har tips på en kurs i assembler som är lika kortfattad och enkel så kan ni ju länka till den här. Att säga att kursen är dålig utan att komma med exempel på nåt som är bättre är inte så konstruktivt.
gkar
Inlägg: 1585
Blev medlem: 31 oktober 2011, 15:28:29
Ort: Linköping

Re: Bra kurs i assembler med simulator för förståelse mha 65

Inlägg av gkar »

Pollux upp för kursen!
Skriv svar