Avatar billede mib33 Nybegynder
28. oktober 2002 - 23:04 Der er 8 kommentarer

Assembler Programmering ??

Er der nogen der kan hjælpe mig med at konstruere det kortest mulige program, i assembler, der kan udskrive alle ASCII karakterer på skærmen, dog uden de danske æ ø å ????
Avatar billede arne_v Ekspert
28. oktober 2002 - 23:10 #1
Du bør nok lige skrive hvilken assembler ?

(der er forskel på DOS Intel x86, VMS VAX, Motorola 680x0 etc.)
Avatar billede mib33 Nybegynder
29. oktober 2002 - 00:10 #2
Det må være det der hedder : DOS Intel x86, det er ihvertifald noget der kan afvikles på alm. pc'ere !!
Avatar billede soreno Praktikant
30. oktober 2002 - 22:38 #3
det mindste dos program jeg lige kan komme på må være:
debug.exe
-a0100
:0100 mov ah, 02
:0102 mov dl, 0
:0104 int 21
:0106 inc dl
:0108 cmp dl, ff
:010B jnz 0104
:010D int 20
:010F
-r cx
CX 0000
:f
-n c:\hello.com
-w
-q

c:\hello.com
Avatar billede soreno Praktikant
30. oktober 2002 - 22:39 #4
det er afhængigt af codepage hvor i ascii tabellen æøå er placeret..
Avatar billede soreno Praktikant
30. oktober 2002 - 22:39 #5
og om de overhovedet er der :-)
Avatar billede mib33 Nybegynder
31. oktober 2002 - 00:11 #6
soreno >>
Vil det program udskrive alle ASCII karakterer, og hvis det er tilfældet, gider du så bare skrive et par korte bemærkninger om hvordan ??? :-0.
Avatar billede mib33 Nybegynder
31. oktober 2002 - 00:28 #7
soreno>>
Og hvordan jeg kan afvikle det ??
Men det program du har skrevet er lavet i debug, de assembler programmer jeg arbejder med skal først kompileres til en EXE-fil ved hjælp af "TASM" og derefter "TLINK", så bliver de lavet om til en "EXE" fil, som så kan "køres" ?????
Avatar billede soreno Praktikant
31. oktober 2002 - 07:44 #8
programmet benytter sig af nogle interrupts som findes i dos (svarer lidt til et api)

http://www.ctyme.com/intr/rb-2554.htm

:0100 mov ah, 02 //funktion 2 i interrupt 21
:0102 mov dl, 0 //hvilken char skal der startes med, jvf. link
:0104 int 21 //udfør interrupt
:0106 inc dl //tæl dl én op (næste char)
:0108 cmp dl, ff //er dl == ff (255)
:010B jnz 0104 //hvis nej, så hop til lokation 0104 (nu er dl jo én højere og derfor udskrives næste char)
:010D int 20 //ellers udfør int20 (afslut til dos)

hvis du gør nøjagtigt som først postet, så vil den nederset linie køre programmet (der fylder 15Bytes)

det er mange år siden jeg sidst har leget med tasm og kan faktisk ikke rigtig huske hvordan man gør. Men det er noget med at man kan referere til en label (skal du bruge istedet for ":010B jnz 0104" som hopper direkte i memory. Det kan du lade sig gøre hvis det drejer sig om et .com program da det er givet at det altid starter i :0100
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