Jag har nyligen lärt mig grunderna av assembler, och nu vill jag lära mig att översätta det till maskinkod. Jag är mest intresserad av 32-bit, men 16- och 64-bit kan vara lärorikt att läsa om också. Det enda (i teorin) du behöver är en lista med olika kommandons betydelse i maskinkod. Och tänk på att t.ex. "mov" eller "add" inte bara har en enda binär motsvarighet utan ett antal beroende på om det är olika register, längd på adresser eller liknande. Det första hade jag redan, delvis anat mig till och jag letar just nu efter en sådan lista. Ehh, normalt sett så kan jag inte se så stor anledning att göra sådan översättning själv, bättre att använda någon assemblator (heter det så på svenska?) som gör det. Förmodligen kan du skriva assembler direkt tillsammans med din vanliga kod (fungerar utmärkt i till exempel Visual Studio). Det heter inte assemblator . . . Anledning till att jag vill lära mig hur det funkar är för att jag vill skriva en kompilator, som Visia Compiler (www.kidev.com) Ahh, då kan jag förstå varför du vill lära dig det hela. När det gäller hur man tex refererar till register med mera så är det inte riktigt så enkelt som att ett register har ett visst värde. Det bästa är om du läser manualerna som jag länkade till, i del 2 (uppdelad i del 2A och 2B) finns i början en genomgång av hur det hela är uppbyggt med mera, borde vara en bra början. Sen i resten av de mer än tusen sidorna gås varje instuktion igenom i tur och ordning. Appendix A och B är nog till nytta med. Maskinkod är typ det sista du behöver lära dig. Lär dig att parsa och typechecka först. Har redan skrivit en lexical parser och en bra början till en syntactical parser. Lär dig grunderna på <url>http://win32asm.cjb.net/</url> köp en bok som tar upp hur x86-instruktionerna fungerar eller läs om det på <url>http://x86.org/</url>. Skriv egna program som utnyttjar assembler, du kan skriva huvuddelen av i C++ och sedan använda dig av <b>__asm</b>-direktivet i Visual Studio för att få en kort uppstartssträcka. Skaffa en debugger som du kan stega igenom assemblerkod med och försök att förstå dig på hur koden är uppbyggd.Maskinkod
Någon som har tips om en bra sida eller bok?
Tack på förhand
AlexanderSv: Maskinkod
Om du inte skriver "ren" assembly utan assembly med en massa "fusk" såsom if-satser, loopar eller macron blir det förståss knöligare då du måste veta hur de implementeras.Sv:Maskinkod
Angående "ren" och "fusk" assembly så är sanningen den att jag bara läst allting, inte skrivit någon egen kod.
Tack för svaretSv: Maskinkod
Vill du absolut lära dig att översätta direkt till maskinkod så är det nog enklast att helt enkelt ladda ner specifikationerna för den processortyp som du kodar för. Intel har tex bra sådana dokument som beskriver de instruktioner deras processorer klarar av och hur de är uppbyggda. Någon generell sådan översättning finns inte då både de olika instruktionerna och hur de kodas skiljer sig mellan olika processorfamiljer.
Har en viss svag aning om att vi kanske inte menar riktigt samma sak med "assembler" och "maskinkod" men tror att man med assembler normalt menar den läsliga form av maskinkod som processorn använder, tex:
shl eax, 0x06
medans maskinkoden då blir (uttryckt med hexadecimala tal):
C1E006
Exakt hur man bryter detta tal till instruktionen finns i manualerna. Här är en länk till intels hemsida:
http://developer.intel.com/design/pentium/manuals/Sv:Maskinkod
Språket heter Assembly och kompilatorn heter Assembler om jag fattat det hela rätt
/ErikSv:Maskinkod
Tack för länken! Jag harr dock en fråga till dig, Sam:
Är E0h alltid eax?
>>shl eax, 0x06
>>C1E006
Tack för alla svaren =)Sv: Maskinkod
Sv: Maskinkod
Sv:Maskinkod
Jag vill veta lite mer om hur maskinkoden funkar innan jag förtsätter, så att jag går i rätt riktning.Sv: Maskinkod
Lär dig allt om minneshanteringen och framför allt, se till att ha gott om tid till förfogande, det är inget man lär sig i en handvändning.
Jag har programmerat assembler i 15 år på ett flertal plattformar och ser mig själv som nybörjare...