Avatar billede radiohead Nybegynder
06. februar 2007 - 16:13 Der er 55 kommentarer og
1 løsning

Programmeringssprog - Assembly?

Er det forkert, hvis jeg siger, at Assembly har været grobund for samtlige programmeringssprog vi kender?

Og er det forkert hvis jeg siger at alt programmering compiles til Assembly hvorefter det assembles til binary?
Avatar billede radiohead Nybegynder
06. februar 2007 - 16:15 #1
Jeg har forstået det sådan at "assembly" var den første egentligt måde at beordre en computer på. Altså programmere den. Er det forkert?
Avatar billede ejvindh Ekspert
06. februar 2007 - 16:21 #2
Man bør vel egentlig sige at assembler-koden og "binary" er på samme niveau: Det er 2 forskellige måder at repræsentere det, der foregår rent elektronisk inde i hardwaren. Og det er de 2 mest oprindelige måder at repræsentere det på. Når du instruerer en assembler-/binary kode så instruerer du direkte til hardwaren, og derefter er der ingen oversættelse efterfølgende.

Derfor giver det udmærket mening at tale om at de højere sprog "oversættes" til assembler/binary. Man skal bare være opmærksom på at assembler og binary også blot er repræsentationer af elektroniske tilstande.
Avatar billede radiohead Nybegynder
06. februar 2007 - 16:26 #3
Ahh på den led. Troede det var et sprog for sig, og alle at alle sprog var blevet nedarvet derfra.

Tak for det. Det var useful.
Avatar billede ejvindh Ekspert
06. februar 2007 - 16:30 #4
Du er velkommen :-)
Avatar billede arne_v Ekspert
06. februar 2007 - 16:48 #5
assembler en en textuel representation af binary (og det program som kan konvertere
fra den textuelle repraesentation til binary)

nogle compilerere genererer en assembler fil udfra high level language kildeteksten
og bruger saa et assembler program til at konvertere assembler filen til
binary

andre compilere genererer binary direkte

all der arbejder paa kode genererings delen af en compiler er noedt til at vide
en masse om assembler/binary og den CPU arkitektur de genererer kode til
Avatar billede radiohead Nybegynder
06. februar 2007 - 17:03 #6
ok - Tak for det, arne!
Avatar billede Kenneth199 Nybegynder
28. december 2010 - 17:44 #7
Forkert. Assembly er det en lettere form for computer instruktioner, hvilket er en form for mnemoteknik, for de binære tal. Bedre sagt, Assembly er en mnemoteknik for computer instruktioner, og computer instruktioner er en mnemoteknik for binære tal, hvilke computeren arbejder I og Med.

F.eks.

mov ebp, esp ; Hvilket er Assembly sprog

Denne funktion gemmer stack pointeren i ebp.

En mnemoteknik for dette er i computer instruktioner

8BH ECH ; Hvilket er Computeren måde at gøre det samme som før.

så at sige at Assembly er textuel representation af binary, passer ikke. Det er representation af computer instruktioner. Og computer instruktioner er en representation af binære.
Avatar billede arne_v Ekspert
28. december 2010 - 23:02 #8
Nu er spørgsmålet altså næsten 4 år gammel.

:-)

Men det passer skam.

Assembler instruktioner er tekst som repræsenterer binary instruktioner.

Computer instruktioner findes altså i både en tekst og en binary form, men de findes ikke selvstændigt.
Avatar billede Kenneth199 Nybegynder
28. december 2010 - 23:25 #9
Jamen hov hov du, binær form? Der er vist noget du har gået glip af. Når du skriver en source code file i assmebly, og bruger NASM til at compile den så laver NASM den om til computer instruktioner, der efter skal man compile objekt kode filen til binær. Nu har jeg skrevet assmebly i 4 år, så jeg ved hvad jeg taler om. Assembly repræsenterer IKKE binary instruktioner. Computer instruktioner er det tætteste du kommer på det. Når du har compilet dit program færdigt så er det binære tal, ellers, i assembly er det først Source Code File og så Object code File, derefter Binary file. Hvilket er en exe fil, i denne sammenhæng.
Avatar billede arne_v Ekspert
29. december 2010 - 00:11 #10
.obj filen er binær.
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 00:18 #11
Nej. Det er Computer instruktioner .o filen inde holder.
Avatar billede arne_v Ekspert
29. december 2010 - 03:31 #12
Object filen indeholder præcis den samme binary kode som executablen, bortset fra de referencer som linkeren skal resolve (og så er fil formatet anderledes, fordi meta information linker og image loader er forskelligt).
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 15:33 #13
Det kan du jo sige om alle programmer du skriver min ven. Og for sidste gang, Computer instruktioner, hvilket O. filen indeholder, er IKKE præcis den binære kode. Så kunne du jo, som sagt før, sige det samme om et program i C or Perl. For det første ville den binære kode blive meget længere når den er oversat fra Computer instruktioner til binær. Og nu har jeg også talt med en der har arbejdet med det i 19 år, og han siger at du tager fejl.
O. filen indeholder IKKE den præcise binære fil. Det som du siger at ( Object filen indeholder præcis den samme binary kode som executablen ). Så kan du lige så godt sige at en C#, Perl, Python, eller Soure Code file fra Assembly også gør det. FORDI de indeholder de funktioner programmet har og hvad det skal gøre. Så, Computer instruktioner er ikke den præcise binære fil. Nu tror jeg vi stopper det her, fordi når en der har arbejdet med computer i næsten 19 år og har skrevet Assembly i 7 så tror jeg nu nok han ved hvad han siger.
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 15:43 #14
Forklar mig så lige dette.

Vi har en Assembly kode ( mov ebp, esp )

Som Computer Instruktion ser den sådan her ud ( 8BH ECH )

Hvordan ser den binære kode så ud?
Avatar billede ksoren Nybegynder
29. december 2010 - 15:51 #15
Du forstår vist ikke hvad arne siger. Din #14-post er blot to måder at skrive det samme på.

De fleste bruger den første form, fordi den er nemmere at huske.
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 16:00 #16
Godt men så forklar mig. En binær kode er skrevet i 0 og 1 taller. Hvordan kan 8BH ECH være det samme?
Avatar billede ksoren Nybegynder
29. december 2010 - 16:03 #17
Værdien af tallet ændres ikke fordi man angiver det i et andet talsystem.
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 16:03 #18
og ja en anden måde at skrive det på? Er en source code fil ikke også en anden måde at skrive det på?
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 16:03 #19
Godt, så vil jeg gerne have at du lige oversætter 8BH ECH til binær.
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 16:07 #20
Sorry for de mange posts. Men jeg ved da godt at værdien er det samme, men de ser ikke ens ud. 8BH ECH er jo ikke binære tal, og det er det jeg mener med det at de ikke HELT præcist er ens.
Avatar billede ksoren Nybegynder
29. december 2010 - 16:11 #21
De er da fuldstændig helt og aldeles ens. Du repræsenterer bare tallene på forskellige måder.

Og det er det der med at repræsentere tingene, at arne taler om.
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 20:42 #22
ja men det er jeg jo enig i som jeg også siger. Men det er jo ikke præcist fordi instruktionerne er jo ikke binære. De har den samme funktion og betydning. Men er ikke binære. De betyder det samme men er vist ens for sig selv. Og det er det jeg mener når jeg siger at det ikke er binære tal men det er en anden måde at vise dem på.
Avatar billede Kenneth199 Nybegynder
29. december 2010 - 23:56 #23
Men jeg ville ikke sige de var fuldstændig helt og aldeles ens. Fordi det ene er HEX det andet er Binær. Men de repræsentere det samme.
Avatar billede ejvindh Ekspert
03. januar 2011 - 14:33 #24
Som filosof med computer som område er det en diskussion, jeg synes er spændende. Men jeg håber vi er enige om, at hvis vi siger, at "assembler en en textuel representation af binary" (som blev sagt af Arne i starten af tråden), så er det kun rigtigt for såvidt vi ikke tænker på det binære talsystem. Lige så lidt som der ingen assembler-instruksioner findes inde i computeren, så er der heller ingen tal. Der er en (temmelig stor) række tilstande af tændt/slukket (binære elektriske tilstande). Alt efter hvilke kombinationer af tændt/slukket processoren møder, så gør den nogle bestemte ting.

Så har vi mennesker brug for at kunne huske det på en lidt lettere måde. Til nogle ting er assembler mest nyttigt; til andre ting er binære tal meget nyttige. Men assembler repræsenterer ikke binære tal, eller omvendt. Begge dele peger mod noget tredje: Kombinationer af elektriske tilstande.

Undskyld hvis det er flueknepperi, men jeg tror måske at noget af diskussionen skyldes uklarhed i påstanden...
Avatar billede ksoren Nybegynder
03. januar 2011 - 14:38 #25
Assembler er lidt ligesom en ascii-tabel. Hvert tegn i tabellen angiver en værdi.
Avatar billede ksoren Nybegynder
03. januar 2011 - 15:04 #26
Hvis vi ser bort fra de hjælpeegensakber der er ved assembler, så kan man altså gå direkte fra den ene form til den anden.

Det er ikke tilfældet med et højniveau-sprog.
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 22:13 #27
Lige til at starte med vil jeg lige sige at du ikke bare kan gå direkte fra den ene form til den anden. Ksoren, du ved godt at Source Code filen ikke er binær? Det er ASCII. Men du kan fra .O filen gå direkte til binær, fordi det er det samme bare vist som HEX.

Assembler sprogene er det nederste niveau før maskinkode (hvilket er binært, da CPU'en er opbygget af transistorer som er enten slukket = 0 eller tændt = 1). Den kode du får er en hexadecimal repræsentation(H'et betyder hexadecimal i din kode) af den binære maskinekode. Denne kode bliver så via en linker omdannet til maskinkode, hvorefter dit program kan eksekveres. Så principielt er al programmering jo en repræsentation af binær maskinkode, bare på forskellige abstraktionsniveauer. Object code er resultatet af en kompilering, som kan eksekveres og er altid binær maskinkode. I dit tilfælde får du altså først den hexadecimale værdi af maskinkoden, hvorefter du bruger en linker og så kan eksekvere programmet, da det nu er ren binær maskinkode. En compiler oversætter indholdet af source code filen til et andet sprog, hvilket typisk ville være maskinkode eller assembler(en del lettere!). Den HEX kode du få...r er jo bare intermediary code, som ikke kan eksekveres før du bruger en linker, så vil mene at det er fint nok at sige at .obj filen er binær, da det jo er slut resultatet du er interesseret i. Men dog er de stadig ikke helt ens, da det ene er HEX og andet Binær. Men som sagt, de repræsentere det samme.
Avatar billede ksoren Nybegynder
03. januar 2011 - 23:00 #28
Du misser pointen. Hvis vi taler ascii og jeg har tallet 65, så ved jeg det står for A. Hvis jeg har et A, så ved jeg det står for tallet 65. Det betyder det samme.

Det samme gør sig gældende med assembler. Den binære kode er et direkte billede af din kildekode. Det er også derfor, at du får kildekoden tilbage (sådan da), hvis du indlæser den binære fil i en disassembler.
Avatar billede ksoren Nybegynder
03. januar 2011 - 23:02 #29
Det nederste niveau er i øvrigt ikke digitalt, det er analogt :)
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:20 #30
kosren, som jeg nu har sagt for 1000 gange så er jeg enig. Men computer instruktionerne er stadig med HEX og det kan du lige som ikke lige lave om på vel? Derfor er det ikke HELT og ALDELES ens, men som jeg nu også har sagt 1000 gange beskriver/repræsentere det samme. Hvis de var helt og aldeles ens så ville der i .O filen ikke stå 8BH ECH, men 10001011 11101100, forstår du hvad det er jeg prøver at sige her? og jo, Assembler sprogene er det nederste niveau før maskinkode, og hvis du ikke er enig i det så beskriv hvordan det som du nu siger er nederst, fungere? Indirekte har du lige sagt at binary ikke er det nederste, når vi nu taler om computer.
Avatar billede ksoren Nybegynder
03. januar 2011 - 23:31 #31
Strøm. Dét er nederste niveau. Det er analogteknik, ikke digitalt.

Jeg tror ikke vi kommer mere videre her :)
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:34 #32
Jo, nu vil jeg så gerne have at du forklare mig hvordan de binære tal fungere? Og nu kan jeg se at vi skal til at tale om ingeniør parten af computeren. Det er jo netop strømmen der er med til at udgøre de binære tal???
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:35 #33
og de binære tal der er med til at udgøre strømmen
Avatar billede ksoren Nybegynder
03. januar 2011 - 23:40 #34
Vi befinder os tankemæssigt i hvert vores hjørne af universet. Jeg tror ikke vi kan nærme os hinanden umiddelbart :)
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:43 #35
Nej det tror jeg ikke vi gør, eller det gør vi ikke. Du sagde strøm, så lad os da lige få på plads hvordan computerens arkitektur er?

Lad os antage at du skal skrive et A i word. Kan du så forklare mig hvordan strømmen og de binære tal hænger sammen?
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:43 #36
mht. strøm*
Avatar billede ksoren Nybegynder
03. januar 2011 - 23:46 #37
Analog- og digitalteknik er jo et helt studie. Klokken bliver mange, hvis jeg skal til at udrede alt det her :)

Men groft fortalt: digitalteknikken ligger ovenpå analogteknikken (det der med strøm).
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:54 #38
For mig ser det ud som om du ikke helt kan svare, men lad mig.

Lad os som sagt antage at du skal skriv et a i word, og du trykker på a på dit tastatur.

Lad os kigge på hvad der sker i dine RAM. Når du trykker på a giver du en impuls til din pc, hvor efter den så ved hvilke transistorer der skal gives strøm til. Det var den meget korte version af hvad der sker i dine ram.

Det ser sådan her ud:

a = 0100 0001

          | | | | | | | |
        -o-o-o-o-o-o-o-o-
          | | | | | | | |
          0 1 0 0 0 0 0 1

Hvis man skulle forklare det til en nybegynder ville det være bedst sådan. o'erne er transistorer, de streger over dem er impuls pinde, den lange pin der går igennem dem er adresse pinden, de pinde der er under dem er data-pinde. Der er selvfølgelig meget mere i det end som så!
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:56 #39
.|.|.|.|.|.|.|.|
-o-o-o-o-o-o-o-o-
.|.|.|.|.|.|.|.|
0 1 0 0 0 0 0 1

Tag dig ikke af .'erne, de er til at fylde de mellemrum.
Avatar billede Kenneth199 Nybegynder
03. januar 2011 - 23:56 #40
okay det virkede så ikke.... Nå men prøv dig frem
Avatar billede ksoren Nybegynder
04. januar 2011 - 00:07 #41
Du er slet ikke med på hvad jeg mener. En ramkreds består ikke af nuller og ettaller. Den består af en masse transistorer, som hver især kan holde en spænding. Spændingsniveauet på den enkelte transistor angiver om det er et 0 eller 1.

Det var det, der var min pointe med analogteknik som værende det nederste niveau.
Avatar billede Kenneth199 Nybegynder
04. januar 2011 - 01:26 #42
Hvis du nu gas læse lidt, så kunne du forstå hvad jeg taler om. Og det du siger lige der er det jeg har sagt. 8 transistorer er 8 bits = 1 byte, der med når strømmen går igennem sådan her 01000001 er det et a. Så svært er det ikke at forstå, når jeg lige har forklaret dig det.
Avatar billede Kenneth199 Nybegynder
04. januar 2011 - 01:27 #43
hvis du gad* Og jeg har ikke snakket om at de var 0 og 1 taller? læs for du skriver tak,
Avatar billede Kenneth199 Nybegynder
04. januar 2011 - 01:30 #44
Igen sorry for de mange posts. Når jeg siger at strømmen går igennem sådan her 01000001 så betyder det at der hvor der er et 1 tal er transistoren lukket hvilket betyder at der er en gennemgang af strøm. 0 tallene betyder slf at transistorene er åbne og der ikke er en gennemgang af strøm.
Avatar billede ejvindh Ekspert
04. januar 2011 - 13:49 #45
Jeg tror egentlig heller ikke I er så uenige. Men Kenneth199 det er altså forkert at sige, at "Men computer instruktionerne er stadig med HEX og det kan du lige som ikke lige lave om på vel" (#30). Det er rigtig at de normalt gengives i Hex, men det er jo bare fordi det er mest pædagogisk.

På samme måde "står" der heller ikke noget i .o-filen. Men når vi har brug for at undersøge den, så er det nemmest at starte med et HEX-dump -- for det kan man forholdsvis nemt afkode, hvis man forstår sig på den slags.

Jeg tænker på, om den fortsatte diskussion skyldes at vi taler om noget forskelligt, når vi taler om assembler. Det er mange år siden, at jeg selv programmerede i assembler, men den gang skelnede man mellem alm. assembler og macro-assembler (hedder nok noget andet i fagsproget i dag). For macro-assembler programmering giver det mening at sige at den er "over" maskinssproget, da den først skulle oversættes, inden den kunne køres. Men for almindelig assembler var der ingen oversættelse nødvendigt. Det var ren maskinkode.
Avatar billede Kenneth199 Nybegynder
04. januar 2011 - 21:02 #46
Ejvindh nu sidder jeg og kigger i det 3 bøger jeg har på engelsk om Assembly, og jeg skriver:" The Assembler reads the line from the source code file, and writes the equivalent machine instruction in HEX to an object code file." Det skal så siges at der i alle 3 bøger også står at .O filen inde holder machine instructions i HEX, og med hjælp fra linkeren bliver de omdannet til binære. Det har ikke noget med at det er mest pædagogisk, fordi .O filen er machine instructions skrevet i HEX, grunden til det er at binære, ja som sagt, ville være sværer at læse, men det er HEX den inde holder. Den HEX kode machine instructions er, er jo bare intermediary code, som ikke kan eksekveres før du bruger en linker. Jeg ved ikke om i forstår mig. Du kan, og nu siger jeg det igen, ikke lave om på at når du har brugt NASM til at compile din source code file, og får .O filen, så består den af HEX. Ret mig hvis det jeg skriver fra bøgerne ikke er sandt.
Avatar billede ejvindh Ekspert
05. januar 2011 - 10:17 #47
Nu kender jeg ikke NASM personligt, men en søgning på nettet tyder på, at det her drejer sig om det, jeg ovenfor kalder en macro-assembler. Så derfor er det rigtigt at DEN slags assembler kode naturligvis først skal oversættes til maskinkode. Men det er ikke det jeg taler om (og jeg tror heller ikke ksoren).

Angående det med Hex, så må jeg sige, at "det du skriver fra bøgerne" ikke er sandt. Hex er jo et talsystem, og eftersom der ingen tal befinder sig i filerne, så...

Hvis jeg skal se en detaljeret udskrift af en binær fil, vil jeg ofte bede om et hex-dump. Men jeg kunne ligeså godt programmere et fil-dump program, der viste mig indholdet i decimal-tal, binære tal, oktale tal. Når man maskinkoder er Hex bare nemmere at arbejde med, fordi den binære struktur er forholdsvis synlig i de hexadecimale tal (på en overskuelig måde). Og derfor er det nemmere at forstå de binære operationer. Og fordi det er mere indlysende hvorfor bytes-ene går i nul ved 256.
Avatar billede Kenneth199 Nybegynder
05. januar 2011 - 12:01 #48
Så du siger at .O filen ikke indeholder Hex?

Ja eller Nej?
Avatar billede Kenneth199 Nybegynder
05. januar 2011 - 12:07 #49
Jeg ved godt at .O filen og den eksekver fil indeholder det samme. Bedre sagt de repræsentere det samme. Men hvis du kigger i en .O fil uden at om-code det, så er det HEX, hvor efter at linkeren skriver det til binary, og lægger programmet de steder det skal.
Avatar billede ejvindh Ekspert
05. januar 2011 - 13:03 #50
.o filen indeholder ikke hex.

Når du siger "hvis du kigger i en .O fil uden at om-code det", så vil jeg gerne have, at du spørger dig selv: Hvad er det jeg kigger med?

Mit gæt vil være, at du svarer noget i stil med "jeg kigger med et program". Dette program har du brug for til at omsætte nogle fysiske tilstande på din disk, til noget du som bruger kan forstå. Et program omkoder. Hvis filen havde bestået af Hex-tal, så havde du ikke haft brug for et program, for at se, hvad der er i det.
Avatar billede madand Nybegynder
05. januar 2011 - 14:22 #51
"Nu tror jeg vi stopper det her, fordi når en der har arbejdet med computer i næsten 19 år og har skrevet Assembly i 7 så tror jeg nu nok han ved hvad han siger."

Antal år man har arbejdet med programmering har aldrig været et kvalitets stempel for god du er, eller hvor godt du har forstået det. Just saying..
Avatar billede Kenneth199 Nybegynder
05. januar 2011 - 16:45 #52
Nej, men så må du gerne svare mig. I den ene bog jeg har om Assembly står der f.eks. dette (mov ebp, esp) der står direkte oversat til dansk at assembleren læser linien og skriver den samme kode i computer instruktioner sådan her ( 8BH ECH ). Nu vil jeg så godt vide hvorfor de valgte at vise det i hex og ikke med binære tal når det som du siger er at .O filen er binær. Jeg synes bare det er sjov at der står det, og ikke det som du siger. 

madand hvem har skrevet Assembly i 7 år*? ejvindh har nævnt at det er lang tid siden han skrev i det?
Avatar billede Kenneth199 Nybegynder
05. januar 2011 - 16:51 #53
Det der irritere mig er så at bogen ikke præcis besriver hvad der sker, altså at den ikke bare siger at NASM assembleren skriver linien om til ( 8BH ECH ) i .O filen, i stedet for at forklare hvad der enlig sker, og hvad .O filen egentlig indeholder.
Avatar billede Kenneth199 Nybegynder
05. januar 2011 - 17:03 #54
Men lige for at opsummere -

Nasm skriver source code filen om til object filen, hvilket indeholder maskin koden i binære tal, og så bruger man linkeren til at gøre den eksekver bar.

Men hvis det er rigtigt, så vil jeg da bare sige mange tak for denne diskussion, den har været lære-rig. Lidt skuffende at man ikke helt kan stole på den bog man nu engang har, og har brugt den i et par år....
Avatar billede madand Nybegynder
05. januar 2011 - 20:45 #55
Aner det ikke, tilsyneladende en du kender

"Skrevet ons. d. 29. december 2010 kl. 15:33:25| #13"
Avatar billede Kenneth199 Nybegynder
05. januar 2011 - 22:47 #56
nåå Casper ja, det havde jeg glemt jeg havde nævnt. Men jeg forstår godt hvad Arne prøvede at fortælle mig. Det som jeg forstod ved min bog var at .O filen kun var i HEX. Men som de andre også siger så er det mere læseligt i HEX end i binær. Så jeg har gået grundt i et par år nu og troede noget andet :S Men det som Casper fortalte mig var at man normalt ville læse det i HEX, men det havde jeg så ikke lige fået helt ind...

Men tak ellers! Man bliver jo klogere som tiden går!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester