jeg har installeret tasm i den ide jeg havde downloadet, og det virker. men det er jo kun 16-bit, som I selv skriver. Nu skal jeg i første omgang kun bruge det til en ti83, som kører 16-bit på chipset 80 (tror jeg, eller er det helt forkert??). men jeg ville jo også gerne kunne kompilere 32-bit til windows. hvordan?
Så vidt jeg ved har Borland ikke lavet en 32-bit Tasm. Det er vel heller ikke assembleren, der afgør om din kode kan afvikles på en 32-bit platform. Det er din egen kode, der afgør det.
Er det ikke lidt teoretisk at lave et 32-bit program i assembler? Der findes masse af høj-niveau sprog, som kan gører det (bedre).
Det er også lidt forvirrende, for jeg vil gerne flere ting. Dels vil jeg skrive nogle programmer/spil til min TI-83. De skal skrives i assembler før lortet går stærkt nok. Det går ikke at bruge den indbyggede Basic-fortolker. Dels vil jeg gerne kunne lave mit eget program, der kan oversætte nogle kommandoer til assembler og derfra til rå maskinkode. Specielt sidste del ved jeg ikke hvordan gøres.
Jeg læser det som om du vil lave et 32-bit program, der f.eks. skal afvikles under Windows.
Glem alt om at gører det i assembler. Du skal være mere langhårdet en de fleste langhårede nørder for at vil lykkes for dig. Man bruger idag ikke assembler til f.eks. Windows, med mindre der et helt specielle forhold, som gør det umuligt at bruge et højniveau-sprog (f.eks. hastighede).
Du bør lave det i er højniveau-sprog som C, C++, Visual Basic eller Delphi (Pascal).
Jeg har downloadet en TASM ide med eksempler på hvordan man laver en 16-bit applikation, der kan afvikles under windows. Den består af et enkelt vindue med en menu. Den bruger funktioner fra gdi32.dll, kernel32.dll, user32.dll osv. Så det kan godt lade sig gøre. Men jeg aner intet om hvordan man oversætter fx den meget simple kommando
mov ax, bx
til maskinkode... Dvs jeg ved faktisk intet om den del. Nogen forslag?
og du har helt ret i at det er hastigheden der er vigtig. og problemet er ikke at delphi eller c ikke kan gøre det hurtigt nok. det skal bruges til script-fortolkning, som jo unægteligt foregår hurtigere når det er en selvstændig exefil, der eksekveres.
cms >> Jeg sagde ikke at det ikke kunne lade sig gører, men du kan ikke lave ret store programmer i assembler når vi taler Windows. Du kan lave programmer i f.eks. Delphi, som er lige så hurtige som programmer skrevet i assembler (jeg har prøvet). I dag skriver man programmet i et højniveau-sprog og laver så små rutiner i inline-assembler (10-25 linie kode).
Når jeg taler om hastighed er det f.eks. HW-drivere jeg mener. Man vil ikke give sig til at lave en script-fortolker i assembler.
Jeg har ikke forklaret godt nok. Jeg ved ikke om du kender DelphiWebScript, et opensource scriptsprog. Fortolkeren/compileren hvad man nu vil kalde den er skrevet i Delphi. Når man kører sit script er det en række objekter der kører nogle methods vhja. VMT osv. Dette er langsomt.
Jeg vil lave en \'udvidelse\' til dws, som i stedet kompilerer scriptet til en exefil, som så kan køres.
Da jeg ikke har licens til Delphis compilere el. noget lignende kan jeg jo ikke bruge Delphi til at lave exefilerne.
sagt på en anden måde: exefilerne skal laves af et program, runtime. der er ingen nåde. desuden skal programmerne jo så heller ikke være særligt store...
men tilbage til mit oprindelige spørgsmål: jeg mangler stadig tasm32.exe, altså 32-bit versionen af tasm.exe derudover mangler jeg turbodebugger-filerne, og det skal jo så også være 32-bit (td32.exe)
PS: Jeg mener stadig du vælger det forkerte værktøj til udvikling af 32-bit applicationer.
Delphi, C-Builder eller C++ er mere rigtige værktøjer til dit formål.
Lige en sjov ting. Delphi er faktisk skrevet i Delphi (ikke i assembler). Delphi er en hurtig compiler, så jeg tror ikke på at du selv kan lave det bedre i assembler :o)
Der er ingen der siger at man absolut SKAL benytte borlands, iøvrigt absolut fine Assembler produkt, ider der er mange andre på markedet man kan downloade. Tag fx. et kig på A86 http://eji.com/a86/index.htm (og den tilhørende debugger D86).
>Men jeg aner intet om hvordan man oversætter fx den meget simple kommando >mov ax, bx
Oversættelse fra ASM til maskincode er basalt set en øvelse i tabelopslag. som input skal man vide hvilken ASM instruktion og hvilken mode der er tale om, samt hvilke argumenter der er til instruktionen. Som output får man så en eller flere HEX værdier = maskincodes. Jeg kan i denne sammenhæng varmt anbefale at du får fat i en assembler bog - eller som minimum en Assembler Quick reference, hvilket så absolut må være muligt på nettet.
Hvis du vælger at begrænse dit programs muligheder, kan du vælge at lave en lille liste af tilladte instruktioner, fx. den omtalte \"mov AX, BX\". Uden dokumentation eller assembler, kan du nemmest få oplyst makinkoden til de aktuelle instruktion med Delphi. Fremgangs måden er som følger:
1: Opret et nyt Delphi project. 2: Plant en button på formen. 3: I dens onClick event skriver du den ønskede ASM code, fx:
procedure TForm1.Button1Click(Sender: TObject); Begin Asm Push AX Mov AX, BX POP AX end; end;
4: Sæt et breakpoint på første linie i metoden, dvs. \"Push AX\" 5: Kør programmet og tryk på knappen. 6: Vis nu CPU debug window\'et i Delphi\'s IDE (View->Debug Windows->CPU) 7: Du kan nu direkte se maskincode instruktionerne der matcher dine ASM linier:
PS: Borlands TASM er forresten en 16/32 bit assembler - godt nok er programmet skevet i 16 bit, men kan sagtens lave 32 bit programmet til Win32 incl. WinNT.
det lyder meget spændende. et enkelt spørgsmål, når du skriver modes, hvad mener du så? og et enkelt spørgsmål til: er oversætningen af opcodes til maskinkode afhængig af om det fx er en z80 eller en pIII processor?
Du ER nødt til at få fat i en Assembler lære bog eller følge en online tutorial. Kort fortalt så dækker ordet modes over hvorledes processoren skal fatte en specifik instruktion. Her er et eksempel med tre næste enslydende assembler instruktioner:
Mov AX, 0xFFFF ; Immidiate mode - Load hex værdien FFFF ind i register AX Mov AX, BX ; Direct mode - Load register AX med indhold af register BX MOV AX, [BX] ; Indirect mode - Load register AX med indhold af den memoryadresse der er placeret i register BX
Som du ser er der tale om den \'samme\' instruktion, dvs. \"Mov\" og første argument er hver gang register AX. Forskellen ligger i andet argument - fortolkningen af dette argument viser hvilken \'mode\' der er tale om. Hver linie resulterer derfor i hver sin maskincode værdi. Intels CPU har så vidt jeg hukser noget i retning af 7 (?) programming modes, dog er de tre viste nok de hyppigst anvendte.
Der er stor forskel på opcodes til to forskellige processor (familier). Der er således absolut ingen sammenhæng mellem Z80 og Pentium (dvs. 80x86 familiens) processore.
Du kan med garanti downloade mange freeware Z80 compilere på nettet. Prøv evt at finde en med Morpheus.
cms >> Tak for point. Held og lykke med dit projekt. Ja, der er meget stor forskel på opcodes til forskellige processore. Hver familie har sine egne opcodes. Jeg sidder f.eks. med en PIC16F84. I den hedder det ikke en accumulator men W-reg. Det betyder at alle opcodes der vedrører w-reg. hedder noget med W f.eks. movw.
delphi >> Der er da vist en gammel assembler-programmør mere *s*
Tjaa.... selvom jeg for tiden gør mest i Atmel assembler....
Listen af CPU\'er, som jeg har rodet med assembler på, går tilbage til Intels 8008... Det må ha\' været i 1980 +/- et par år.. Den gang var jeg ca. 14!
delphi >> En 14 årig knægt, der legede med en 8080 (må det være) i 1980. Det må jeg sige. Så vidt jeg ved sad der ikke 8080 i nogen af de små computere fra den gang.
Jeg har nogenlunde samme alder og startede også ca. samme tid.
- Da hed det ZX81 med en Zilog Z80. - Derefter assembler til 6502 på Commodore-64 - Da jeg kom i lære var det en 8080 på et udviklingskit (ælgammel selv i 1984). - Senere blev vi så moderne at det blev Intel 8031. - Senere fik jeg en PC XT med en 8086, hvor der også blev programmeret assembler.
I dag programmerer jeg kun assembler til embeddede applicationer med PIC-familien og 8031/51
Lidt sjovt at vi har næsten samme alder og \"udviklings-forløb\" :o)
Jo ca. 14 år.... nørdet før begrebet var opfundet og jeg vidste det ikke en gang selv. Mine venner gjorde det jo også...
Jeg skrev iøvrigt 8008, ikke 8080... Det var et CPU kit, som en af mine storebrors venner havde - han var ingeniør studerende og har ved nærmere eftertanke haft en voldsom indflydelse på mit senere liv. Han havde igen fået det af sin far, som var udviklings et-eller-andet på ELSAM (Ja, jeg er opvokset i skyggen af Skærbækværkets - det eneste danske ord med tre æ\'er - skorsten).
Min første computer var iøvrigt en ZX80 (ikke ZX81), som jeg fik af selvsamme ven til min storebror. ZX80 var et hjemmebygger kit, som Sinclair solgte pr. mailorder. Så vidt jeg husker var det iøvrigt også til den man kunne købe en hukommelses udvidelse, der var hammer smart idet den også kunne benyttes til ZX81. Med et slag blev hukommelsen fordoblet fra 1 to 2 kByte - se det var sager!
Derefter var det VIC-20, CBM-64, CBM-PET, CBM-128, PC, AMIGA-2000, PC, PC, PC, PC ..... plus div. embeddede CPU\'er, såsom Siemens 8031 serien (80535 så vidt jeg husker), PIC\'s, Atmel etc. Man bliver jo helt melankolsk.
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.