Avatar billede krukken Mester
30. april 2002 - 20:40 Der er 16 kommentarer og
2 løsninger

Asember-programmering!

Model og processor
    .MODEL SMALL, FARSTACK
    .386
    .LISTALL    ; SE BESKRIVELSE

;-------------------------------------------
; Stack-segment oprettes
    .STACK

;-------------------------------------------
; Data-segment oprettes
    .DATA
tekst1    DB 'Hallo', 0Dh, 0Ah, '$'

;-------------------------------------------
; Kode-segment oprettes
    .CODE
    .STARTUP

    MOV AH,9
    MOV DX,OFFSET tekst1
    INT 21h

;-------------------------------------------
; Retur til DOS
    .EXIT

;===========================================
    END


Er der nogle der kan forklare dette meget detajeret?! Især hvad der sker med:

tekst1    DB 'Hallo', 0Dh, 0Ah, '$'


og:

INT 21h
Avatar billede siz23 Nybegynder
30. april 2002 - 20:45 #1
tekst1    DB 'Hallo', 0Dh, 0Ah, '$'
DB=define byte=resevere et stykke hukommelse til at holde din tekst, eller anden form for data.

'hallo'=siger sig selv, skriver hallo i hukommelsen.

0Dh= 13 decimalt, som er lig med en return, som vil sige at den sætter corsuren helt til venstre

0Ah=10 decimalt, som er lig med et line feed, som vil sige at den hopper til næste linje.

alså 0Dh, 0Ah=linje skift ;)

'$' er sandsynlig vis det karakter som personen der har lavet rutinen bruger til at angive at hans tekst er slut.

btw: jeg tror nu heller ikke det har så meget med ASP at gøre, men OK der er ikke nogle ASM kategori, så et eller andet sted skulle du jo smide dit spørgmål ;)

håber det kunne hjælpe dig.
Avatar billede siz23 Nybegynder
30. april 2002 - 20:45 #2
når fandt da dit nye spørgsmål ;)
Avatar billede krukken Mester
30. april 2002 - 21:02 #3
Det var faktisk mest der det INT21 jeg ledte efter hvad betød! Hvor gør den interrupt?!
Avatar billede erikjacobsen Ekspert
30. april 2002 - 21:03 #4
Eller for at præcisere lidt

tekst1 bliver til 8 bytes i hukommelsen. Startende med 'H' og sluttende med '$'

Men sjovere er:

    MOV AH,9
    MOV DX,OFFSET tekst1
    INT 21h

Det er nemlig et "gammelt" kald til en DOS rutine. Den har nummer 9, og det tal
gemmes i registret AH - det er konventionen. Denne funktion får så adressen
på teksten med i DX-registret. Og det den gør, og har gjort lige siden DOS blev
opfundet, er at udskrive teksten indtil, men ikke med, det første $-tegn den
møder. Skør idé, men det virker.
Avatar billede erikjacobsen Ekspert
30. april 2002 - 21:04 #5
og INT 21H er måden man kalder en DOS rutine på. Det svarer fuldstændigt
til et interrupt fre en ekstern enhed, men bliver altså lavet i et
program. Det der sker er så bestemt af indholdet af diverse
registre.
Avatar billede krukken Mester
30. april 2002 - 21:06 #6
Ja, det er jeg også godt klar over! Men hvad står lige nøjagtig interruptet INT 21h for?!
Avatar billede erikjacobsen Ekspert
30. april 2002 - 21:13 #7
Præcist? Ok da.

De først par K af lageret på en go' gammel 8086-er (og også i de nye)
er afsat til interruptvektorer. 4 bytes til hver. De første 4 bytes
til interrupt 0, de næste 4 til nummer 1, osv. Nogle af disse er koblet
til ydre enheder (tastatur, disk, ur), og nogle er ikke. Nummer 21H
er ikke.

Når der sker en interrupt med det pågældende nummer hoppes til den
pågældende adresse, hvor der så er en interrupt-handler-rutine.

Nummer 21H bliver ikke brugt til hardware. Men DOS sætter en adresse
ind i den allivel. Og kommer man til den adresse kan man altså udføre
rutiner i DOS (læse filer, skrive på skærmen osv.)

Det er meget bedre en at skulle hoppe til adressen direkte fra et
program, for den præcise adresse afhænger af DOS version, og diverse
drivere man har.

Men de 21H ligger fast. Smaaaart.
Avatar billede krukken Mester
30. april 2002 - 21:17 #8
Undskyld erikjacobsen, du ar jo sådan set svaret det det sidste også! Men gider du ikke at forklare det "like i was a ten year old!" Også lave det til en svar?!
Avatar billede krukken Mester
30. april 2002 - 21:19 #9
Jamen hvorfor gemmes 9 ikke i dx istedet for AH?!
Avatar billede soreno Praktikant
30. april 2002 - 21:27 #10
betragt det som ligger i ah som "valg af metode kald" (se iøvrigt listen over metode kald på int21h her: http://www.ctyme.com/intr/int-21.htm )

mere specifikt beskrives nummer 9 her:
http://www.ctyme.com/intr/rb-2562.htm
Avatar billede erikjacobsen Ekspert
30. april 2002 - 21:28 #11
Det er jo bare konventionen. Det skal gøres (læse, skrive, disk ....)
bestemmes af tallet i AH. Så kan der komme adresser på i de andre
registre.

Nej, jeg kan ikke forklare det til en 10-årig ....
Avatar billede soreno Praktikant
30. april 2002 - 21:31 #12
bør man ikke afslutte sit (dos)program med:
mov ax, 4c00h
int 21h
?
Avatar billede krukken Mester
30. april 2002 - 21:34 #13
Forstår jeg det rigtig hvis jeg så mener; At når interrupptet bliver kaldet bliver der kigget på registret AH, og fordi den er 9, ved den er der skal skrives, læses osv. og da da dx er lige offset værdien af teksten, bliver den udskrevet?!

Giver du mig lige et svar erikjacobsen ?!
Avatar billede erikjacobsen Ekspert
30. april 2002 - 21:34 #14
Hvis man laver et .exe program, så skal man. Men hvad mon  .EXIT  giver anledning til?
Avatar billede erikjacobsen Ekspert
30. april 2002 - 21:35 #15
Nu er jeg nysgerrig. Hvad skal du bruge det til? (så skal jeg nok lægge et svar)
Avatar billede krukken Mester
30. april 2002 - 21:39 #16
Ja, undskyld jeg lyder dum! Men jeg er ved at læse til eksamen, og skal lige ahve helt styr over nogle eksempler som vores lærer har lavet! Andet er det sådan set ikke!
Avatar billede erikjacobsen Ekspert
30. april 2002 - 21:44 #17
Ok, da. Det sker ikke så tit man graver sig ned i dette af egen
fri vilje, Men du kan tro det var sjovt at skrive drivere i
assembler i gamle dage - hmm, er det virkelig så længe siden....?
Avatar billede krukken Mester
01. maj 2002 - 00:07 #18
Mange tak for hjælpen!!!
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