nieuwe lijn msg db

Status
Niet open voor verdere reacties.

maxuploader

Gebruiker
Lid geworden
18 sep 2008
Berichten
316
Hallo allemaal...

Ik ben naar aanleiding van deze: http://www.howtodothings.com/computers/a1015-making-your-ownoperating-system.html

maar eens begonnen met assembler.
Volgens de tutorial moet je Emu8086 downloaden om vervolgens deze code er in te plakken en te compile en die kun je booten.

Code:
 #make_boot#

org 7c00h      ; set location counter.


      ; add your code here
              ; directive to create BOOT file:

; load message address into SI register:
LEA SI, msg

; teletype function id:
MOV AH, 0Eh

print: MOV AL, [SI]
CMP AL, 0
JZ done
INT 10h ; print using teletype.
INC SI
JMP print

; wait for 'any key':
done: MOV AH, 0
INT 16h

; store magic value at 0040h:0072h:
; 0000h - cold boot.
; 1234h - warm boot.
MOV AX, 0040h
MOV DS, AX
MOV w.[0072h], 0000h ; cold boot.

JMP 0FFFFh:0000h ; reboot!

new_line EQU 13, 10

msg DB 'Hello World'
DB new_line, 'Press any key to reboot', 0



INT 19h        ; reboot

Nou is het gelukt om te compilen en te booten.
Je krijgt dan die tekst te zien, en als je op een toets drukt herstart de computer.
Nou dacht ik als ik de lijn: msg DB 'Hello World' een kopieer en daar onder plak dat ik dan een nieuwe lijn creeer waar ik meer tekst op kan zetten.

Maar dan krijg ik een foutmelding:
(62) duplicate declaration of: MSG

Wat doe ik fout en hoe kan ik een nieuwe lijn creeren.
Kan iemand me mischien nog wat meer info geven om op deze code weer wat meer te doen zoals een input met output??

Hou er A.U.B even rekening mee dat ik totaal nieuw ben in assembler.
En astublieft kom niet aan dat ik eerst andere dingen moet leren ik vraag gewoon hoe ik dat moet doen.

Maxuploader
 
Jammer alleen dat je link het niet doet.

Code:
Page Not Found

We've moved!

Please visit www.HowToDoThings.com and update your bookmarks. We'd also like to know how you reached this page so we can correct the problem. Click here to contact our technical staff to report this issue. Please include a link or describe the page that you were on before you reached this error message and let us know what actions led you to this page. Thanks for your help.
 
Nou is het gelukt om te compilen en te booten.
Je krijgt dan die tekst te zien, en als je op een toets drukt herstart de computer.
Nou dacht ik als ik de lijn: msg DB 'Hello World' een kopieer en daar onder plak dat ik dan een nieuwe lijn creeer waar ik meer tekst op kan zetten.

Maar dan krijg ik een foutmelding:
(62) duplicate declaration of: MSG

Wat doe ik fout en hoe kan ik een nieuwe lijn creeren.

Je moet hem uiteraard niet dezelfde naam geven.

Code:
msg DB 'Hello This is My First Boot Program!'
DB new_line, 'Press any key to reboot', 0

msg2 DB 'blablablabla'
DB new_line, 0

(uiteraard zal je dit bericht na het tonen van msg in het register SI moeten laden en vervolgens afdrukken naar het scherm. Dit kun je op dezelfde manier doen als hoe msg wordt afgedrukt. (AH moet je dezelfde waarde laten behouden, anders zal het niet werken. De code die wordt uitgevoerd bij done zet hem op 0, let daar dus even mee op))

Jammer alleen dat je link het niet doet.

Code:
Page Not Found

We've moved!

Please visit www.HowToDoThings.com and update your bookmarks. We'd also like to know how you reached this page so we can correct the problem. Click here to contact our technical staff to report this issue. Please include a link or describe the page that you were on before you reached this error message and let us know what actions led you to this page. Thanks for your help.

Wat valt je op als je naar de link kijkt die de TS postte?

http://www.howtodothings.com/computers/a1015-making-your-ownoperating-system.html

Zou hij wellicht een koppelstreepje vergeten zijn? :p

http://www.howtodothings.com/computers/a1015-making-your-own-operating-system.html
 
Laatst bewerkt:
Oke Bedankt....

Maar als ik nu boot wordt de tekst getypt (teletype)

Code:
print: MOV AL, [SI]
CMP AL, 0
JZ done
INT 10h ; print using teletype.
INC SI
JMP print

Maar nu wil ik dat de tekst niet getoont wordt door teletype maar gewoon
in een keer getoont wordt. Welke INT cijfer ik moet gebruiken nu is het INT 10h
maar wat moet ik invullen om het meteen te laten zien of moet ik wat ander veranderen?
 
Code:
#make_boot#

org 7c00h      ; set location counter.


      ; add your code here
              ; directive to create BOOT file:

MOV DX, OFFSET msg1
MOV AH, 9
INT 21h
                  
MOV DX, OFFSET msg2
INT 21h

; store magic value at 0040h:0072h:
; 0000h - cold boot.
; 1234h - warm boot.
MOV AX, 0040h
MOV DS, AX
MOV w.[0072h], 0000h ; cold boot.

JMP 0FFFFh:0000h ; reboot!

new_line EQU 13, 10

msg1 DB 'Hello World'
DB new_line, '$'

msg2 DB 'blablablablabla' 
DB new_line, 'Press any key to reboot$'
        

INT 19h        ; reboot
 
Ik heb nu inmiddels dit geschreven: een kleine kernel:
http://pastebin.com/f38983bb4

(Even op pastebin gedaan beetje te lang)
Maar hoe pas ik die code daar toe?? Oftwel welk stuk moet ik weghalen en waar moet ik dat andere stuk toevoegen.

Nog even wat andere dingen die ik graag wil weten:
- Ik heb een mouse driver code hoe voeg ik die toe? http://pastebin.com/f2c37929a
- Hoe maak ik van die menu's net als in DOS
- Hoe maak ik gebruik van geluid of waar vind ik een tutorial voor sound drivers
- Hoe gebruik Assembly in combinatie met C/C++

Sorry dat ik zo veel vragen stel maar er zijn erg weining nederlandse Assembler tutorials op het internet (Niet dat ik slecht ben in engls hoor )
 
Ik heb nu inmiddels dit geschreven: een kleine kernel:
http://pastebin.com/f38983bb4

(Even op pastebin gedaan beetje te lang)
Maar hoe pas ik die code daar toe?? Oftwel welk stuk moet ik weghalen en waar moet ik dat andere stuk toevoegen.

De code die je hebt werkt toch gewoon, dus ik begrijp je vraag niet helemaal. (of bedoel je het wegschrijven van de tekst?)

- Ik heb een mouse driver code hoe voeg ik die toe? http://pastebin.com/f2c37929a

Je zal deze moeten integreren (lees: aanpassen, aangezien jij waarschijnlijk andere acties wilt ondernemen) in je code. (als je naar de code van de driver kijkt dan zie je dat deze in een lus wordt uitgevoerd, en pas naar het 'stop' gedeelte springt wanneer je op de escape knop drukt)

- Hoe maak ik van die menu's net als in DOS

Je zal deze handmatig moeten schrijven (de kernel code die je hebt maakt al een soortgelijk 'menu', al zal je er nog wat dingen aan moeten toevoegen)

- Hoe maak ik gebruik van geluid of waar vind ik een tutorial voor sound drivers

Mijn gok is dat je dezel wel zult kunnen vinden via Google :p

- Hoe gebruik Assembly in combinatie met C/C++

Het is denk ik het makkelijkste wanneer jij je e-mailadres hier neerzet zodat ik je een goed ebook kan sturen. (wel in het Engels :p)

Sorry dat ik zo veel vragen stel maar er zijn erg weining nederlandse Assembler tutorials op het internet (Niet dat ik slecht ben in engls hoor )

Dat geldt niet alleen voor Assembly hoor :p
 
Mijn mail is: iam_sweno@live.nl

Nee ik bedoel ik vroeg om een code die geen gebruik maakte van teletype. Mijn mini kernel gevroe gebruikt wel teletype. Jij gaf toen een code en die heb ik los even getest en dat werkte alleen nu wilde er voor zorgen dat de tekst die in mijn kernel wordt weergeven ook geen teletype meer is maar ik wist wel stukje van de code ik moest aanpassen om de teletyp weg te halen maar dat is nu opgelost.

Dat over die menu's blijft me nog een raadsel, want wat ik nu heb is gewoon in lijstje commands. Maar dat wat ik bedoel is dat je met je pijltje toetsen een tekst selecteerd en dan op enter drukt en dat dan een opdracht wordt uigevoerd. Maar dat kan waarschijnelijk moelijk in ASM. Vandaar dat ik ook vroeg naar C++.

Ik weet het voor wat makkerlijker progammeer talen zoals VB 2008, VBS, Batch, VB 6 enzovoort is genoeg te vinden. Maar C/C++/C# en Assembly en ga zo maar door (Delphi, Fortran..)

Als je dat E-Book wilt sturen, Graag. Dat het in het Engels is maakt niet uit daar heb ik niet zo'n probleem mee :p
 

Ik zal hem zo naar je opsturen.

Nee ik bedoel ik vroeg om een code die geen gebruik maakte van teletype. Mijn mini kernel gevroe gebruikt wel teletype. Jij gaf toen een code en die heb ik los even getest en dat werkte alleen nu wilde er voor zorgen dat de tekst die in mijn kernel wordt weergeven ook geen teletype meer is maar ik wist wel stukje van de code ik moest aanpassen om de teletyp weg te halen maar dat is nu opgelost.

De teletype functie maakt gebruik van null-terminated strings, vandaar de ', 0' achter de strings. Als je naar de code kijkt die ik postte met betrekking tot het direct printen, dan zie je dan het einde van de string wordt aangegeven met het dollarteken.

Code:
 chelp    db 'help', 0  -> chelp db 'help$'


Dat over die menu's blijft me nog een raadsel, want wat ik nu heb is gewoon in lijstje commands. Maar dat wat ik bedoel is dat je met je pijltje toetsen een tekst selecteerd en dan op enter drukt en dat dan een opdracht wordt uigevoerd. Maar dat kan waarschijnelijk moelijk in ASM. Vandaar dat ik ook vroeg naar C++.

Je zult alles handmatig moeten doen. (ingedrukte toetsen moeten afvangen et cetera.)
Ik heb zelf ook geen ervaring met het schrijven van zo'n dos-menu, dus zou het zelf ook moeten opzoeken. Dus ik kan je helaas geen concrete voorbeelden geven.

Ik weet het voor wat makkerlijker progammeer talen zoals VB 2008, VBS, Batch, VB 6 enzovoort is genoeg te vinden. Maar C/C++/C# en Assembly en ga zo maar door (Delphi, Fortran..)

De meeste goede boeken zijn gewoon in het Engels. (in sommige gevallen is er wel een vertaling naar het Nederlands, maar niet vaak)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan