Avatar billede mysitesolution Nybegynder
28. august 2005 - 01:13 Der er 25 kommentarer og
1 løsning

Assembler compiler

Hej...

Sidder og læser en bog om computer arkitektur :)

Læser om hvad assembler og hvad maskinkode er... han mener åbenbart, at MOV bare skal erstattes af nogle 0 og 1 taller, men hhm... tror han springer liiidt let over det :/... tvivler på at nogle assembler compilere kan koste penge, hvis det bare er simple replace kommandoer :)...

Søger et svar på hvordan man laver de forståelige instruktioner til maskinkode... Er det virkelig så enkelt eller?

Eventuelle artikle om maskin og assembler kode søges :)
Avatar billede mysitesolution Nybegynder
28. august 2005 - 01:17 #1
Der må vel være en start som OS´en kan forstå?

Forresten, så er det info om (80)x86 assembly
Avatar billede arne_v Ekspert
28. august 2005 - 09:42 #2
en assembler konverterer ganske rigtigt fra en tekst fil med menneske læselige
instruktioner til en binær fil med maskine læselige instruktioner

MOV R1,R2

kunne blive til

0x07 0x01 0x02 hvis vi antager at MOV er unstruktion nummer 7 og register 1 og 2
identificeres med 1 og 2

i praksis tilbyder assembleren dog lidt mere iden den ikke genererer en EXE
fil men derimod en OBJ fil som er en input fil til linkeren - derfor skal den
også kende formatet til linkeren

CALL  minfunktion

skal oversættes til noget som får linkeren til på link tidspunt at erstatte
minfunktion med adressen på minfunktion som kommer fra noget andet kode

derudover understøtter assemblere normalt også makro ekspansion
Avatar billede arne_v Ekspert
28. august 2005 - 09:55 #3
med hensyn til x86 så check

http://www.intel.com/design/Pentium4/documentation.htm

    IA-32 Intel Architecture Software Developer's Manual Volume 1: Basic Architecture
    IA-32 Intel Architecture Software Developer's Manual Volume 2A: Instruction Set Reference, A-M
    IA-32 Intel Architecture Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z
    IA-32 Intel Architecture Software Developer's Manual Volume 3: System Programming Guide
Avatar billede simonvalter Praktikant
28. august 2005 - 10:05 #4
Her er et sample chapter fra "Professional Assembly Language"
http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764579010,descCd-tableOfContents.html
Jeg har fået læst et par kapitler af den og den er ok men mistede interessen lidt ;)
Avatar billede mysitesolution Nybegynder
28. august 2005 - 16:31 #5
det ved jeg arne... men ved også at DOS com fil, starter på 100h, men er der en "header" inden?

læser lige de andre ting i har linket til :)
Avatar billede mysitesolution Nybegynder
28. august 2005 - 16:34 #6
det virker vel ikke sådan at jeg tager

MOV X,X
MOV X,X
blah blah

og konverter det til
00000000 00000000 //Bare nogle tal ;)
00000000 00000000
blah blah

og derefter gemmer det... så kan programmet vel ikke køres...

Man skal jo vide forskellige ting eller hvad?
Avatar billede arne_v Ekspert
28. august 2005 - 16:37 #7
en DOS COM fil laves så vidt jeg ved direkte uden at skulle linkes

(men jeg lærte ikke assembler på PC i sin tid)
Avatar billede arne_v Ekspert
28. august 2005 - 16:38 #8
hvis det er en COM fil så er det nok tæt på

hvis vi snakker en OBJ fil så er der alle mulige headere og symbol tabeller

det mest udbredte OBJ format er COFF - og det kan du uden tvivl finde noget
dokumentation på
Avatar billede mysitesolution Nybegynder
28. august 2005 - 16:55 #9
com formatet starter ved 100h, om der er header heller noget, vil jeg lige finde ud af...

Egentlig, så er hoved spørgsmålet, er det let eller svært at lave en assembler til maskinkode translator?
Avatar billede mysitesolution Nybegynder
28. august 2005 - 16:56 #10
Bruger NASM, og det understøtter en masse forskellige formater...
Avatar billede arne_v Ekspert
28. august 2005 - 16:59 #11
nej - det tror jeg ikke

alt OBJ format er noget rimeligt fast som må kunne kodes med nogle hundreder
linier kode

selve assembler text -> binær kode må være en ret simpel parse og skrive
teknik
Avatar billede mysitesolution Nybegynder
28. august 2005 - 17:03 #12
nej - det tror jeg ikke <- tror du det er let eller svært? Sådanset som det lyder, er et jo ekstremt simpelt...
Avatar billede mysitesolution Nybegynder
28. august 2005 - 17:07 #13
hvad så med linker også? vil den være svær?
Avatar billede arne_v Ekspert
28. august 2005 - 17:08 #14
jeg lavede lige et lille eksperiment på mit VMS system

Fortran 77 compiler      19053 blokke
Pascal compiler          13857 blokke
C compiler              22879 blokke
Fortran 90 compiler      22006 blokke
C++ compiler            24013 blokke

Macro32 compiler (*)      9045 blokke
Macro64 assembler        12411 blokke

* er en compiler som oversætter assembler til en anden platform

hvis vi antager at:

arbejdet med at skrive en compiler/assembler = k * størrelsen på compiler EXE filen

så må assemblere være langt nemmere end en normal compiler
Avatar billede arne_v Ekspert
28. august 2005 - 17:09 #15
jeg vil klart anbefale dig at bruge system linkeren fremfor at lave din egen
Avatar billede arne_v Ekspert
28. august 2005 - 17:12 #16
og samme lille øvelse på windows med Borland:

1.198.592 bcc32.exe    (C og C++)
  188.416 tasm32.exe    (assembler)

og

  336.896 ilink32.exe  (linker)
Avatar billede mysitesolution Nybegynder
28. august 2005 - 17:13 #17
sjovt... grunden til at pascals er så lille, er at den er mere korrekt efter et datalogisk synspunkt?
Avatar billede mysitesolution Nybegynder
28. august 2005 - 17:15 #18
noget af en forskel...

vil stick til hvad jeg har så...

kan du sige mig, er PowerPC SÅ langt fra x86 assembler kode? eller er det små forskelle? Vil jo gerne lave noget platform independent... men hhm, hvis man er fortidssynet, så bliver apple jo også til x86 og 64 bit instruktioner, så det er jo meget godt :)
Avatar billede arne_v Ekspert
28. august 2005 - 17:16 #19
VMS Pascal er en helt regulær ISO Pascal (d.v.s. ikke med alle Borland
tilføjelserne)

og der er ikke så mange bells and whistles - og Pascal er et rimeligt
rent sprog
Avatar billede arne_v Ekspert
28. august 2005 - 17:18 #20
x86 er CISC

PPC er RISC

så det er et helt andet instruktions sæt

men har du lært assembler på en platform er det normalt ikke så svært at
lære på en ny platform, fordi selvom alle instruktionerne er andeledes så
er de overordnede principper de samme

lidt ligesom at C og Pascal deler ikke meget syntax, men derfor kan du alligevel
hurtigt lære det ene hvis du kan det andet
Avatar billede mysitesolution Nybegynder
28. august 2005 - 17:19 #21
takker for alt din viden, har jeg haft brug for mange gange efterhåenden... Mit mål lige i øjeblikket, er at udvikle et forholdsvis simpelt sprog, som i første omgang skal være til DOS... og vil så bruge det til linux, og mac også...

På længere sigt, kunne det være meget sjovt, at lave et .Net look-a-like sprog med nogle namespaces, med en form, der kan bruges på de 3 platforme
Avatar billede mysitesolution Nybegynder
28. august 2005 - 17:20 #22
dejligt at vide :)... RISC er så det der er brugt i PS2?
Avatar billede arne_v Ekspert
28. august 2005 - 17:27 #23
og vi tager linge Mingw GCC også:

2.620.928 cc1.exe        (C)
3.092.992 cc1plus.exe    (C++)
2.937.344 f771.exe      (Fortran 77)
  538.624 as.exe        (assembler)
Avatar billede arne_v Ekspert
28. august 2005 - 17:28 #24
jeg aner ikke hvilken processor der sidder i en PS2
Avatar billede mysitesolution Nybegynder
28. august 2005 - 19:09 #25
mener den hedder risc noget, men fair ;)...

du skal vel næsten oprette svar... :)
Avatar billede arne_v Ekspert
28. august 2005 - 19:10 #26
ok
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