Toon posts:

[asm] printmsg probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allen,

Nou ik ben al een tijdje bezig met een eigen os-je.
Ben momenteel wat fouten aan het wegwerken.
Het probleem is alleen:
de printmsg procedure werkt niet zoals het hoort en ik lees er waarschijnlijk domweg overheen :(
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
message:
    lodsb
    or    al, al
    jz    done
    mov  ah, 0x0E
    mov  bx, 0x0004
    int  0x10
    jmp  message
done:
    ret

    cpumsg  db  'Looking for a 80386+ CPU',13,10,0
    found386    db  '80386+ CPU found',13,10,0

Mijn bak geeft dit dus weer als volgt:
code:
1
2
Looking for a 80386+ CPU
                386+ CPU found

Heel vaag, hij begint niet aan het begin van de volgende regel, en hij laat karakters weg.
iemand een idee ?!

Verwijderd

Waarom pak je niet gewoon int 21h,9 voor het printen van wat stringetjes ipv zelf allerlei loopjes te gaan maken?

Verwijderd

Topicstarter
nou, om int 21h,9 te gebruiken heb je volgens mij dos nodig.
dit werkt dus niet op mijn systeem.
ben met een eigen os-je bezig, dus moet alles zelf schrijven :(

Verwijderd

Whoops idd, het lijkt er overigens op dat ie je CR negeerd ofzo maar waarom is me een raadsel.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16-09 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

je moet \r\n (carriagereturn linefeed) gebruiken om weer aan het begin van de volgende regel te beginnen :)

de carriage return (\r) beweegt de cursor naar het begin van de regel, en de linefeed (\n) beweegt de cursor 1 regel naar onderen

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
code:
1
cpumsg  db  'Looking for a 80386+ CPU',13,10,0

Deze code bestaat uit:
Looking for a 80386+ CPU en dan een karakter 13, karakter 10 en karakter 0
Karakter 0 is einde van de regel
Karakter 10 is volgende regel
karakter 13 is begin van de regel.

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zondag 25 november 2001 19:28 schreef Devinity het volgende:
Hoi allen,
Hoi
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
message:
    lodsb
    or    al, al
    jz    done
    mov  ah, 0x0E
    mov  bx, 0x0004
    int  0x10
    jmp  message
done:
    ret

    cpumsg  db  'Looking for a 80386+ CPU',13,10,0
    found386    db  '80386+ CPU found',13,10,0

Zet die mov ah en mov bx even voor je lusje, dat scheelt weer heel wat overbodige cpu cycles. En vergeet ook cld niet. :)

(ik zou sowieso er een nette proc van maken, een assembler geeft je niet voor niets die mogelijkheden..)
Mijn bak geeft dit dus weer als volgt:
Dit? Er staat helemaal niet hoe je dit stukje code aanroept.. vermeld dat ook even, dat maakt het debuggen wat makkelijker. :)

Verwijderd

Topicstarter
hehe, sorry.
hier komt de aanroep:
code:
1
2
       mov   si,cpumsg    ;berichtje zoek: naar 386
       call  message    ;doe nu maar!

verder staat er niet veel voor alleen:
code:
1
2
3
4
start:
       mov   ax,1000h
       mov   ds,ax
       mov   es,ax

het is mijn "kernel" progje.
of wil je de hele source zien ?!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zondag 25 november 2001 20:51 schreef Devinity het volgende:
hehe, sorry.
hier komt de aanroep:
code:
1
2
       mov   si,cpumsg    ;berichtje zoek: naar 386
       call  message    ;doe nu maar!
Oh, gruwel. Nu weet ik weer waarom ik TASMs ideal mode zo prettig vind. Ambigue dingen als mov si,cpumsg mogen daarin gewoon niet. Maar dat terzijde. :)

Je roept message voor de tweede regel precies zo aan? En je hebt er ergens voor gezorgd dat de direction flag gecleared is?

Verwijderd

Topicstarter
Direction flag is gecleared.
stond na de msg.
onno, als ik mov ah en mov bx voor mijn lus zet dan detecteerd hij mijn cpu niet meer.

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zondag 25 november 2001 21:07 schreef Devinity het volgende:
Onno, als ik mov ah en mov bx voor mijn lus zet dan detecteerd hij mijn cpu niet meer.
Dan doe je wat fout. Het gedrag van een print routine moet geen invloed hebben op de rest van je programma natuurlijk. :)

Ik bedoel zoiets:
code:
1
2
3
4
5
6
7
8
9
10
11
message:
    mov  ah, 0x0E
    mov  bx, 0x0004
lusje:
    lodsb
    or    al, al
    jz    done
    int  0x10
    jmp  lusje
done:
    ret

of wat ik zelf zou doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
proc message uses ax bx si, msg:ptr
  mov   si, [msg]
  cld
  mov   ah, 0Eh
  mov   bx, 0004h    ; kleur ook als parameter meegeven is nog leuker natuurlijk :)
lusje:
  lodsb
  or    al, al
  jz    done
  int   10h
  jmp   lusje
done:
  ret
endp message

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16-09 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zondag 25 november 2001 20:29 schreef Devinity het volgende:
code:
1
cpumsg  db  'Looking for a 80386+ CPU',13,10,0

Deze code bestaat uit:
Looking for a 80386+ CPU en dan een karakter 13, karakter 10 en karakter 0
Karakter 0 is einde van de regel
Karakter 10 is volgende regel
karakter 13 is begin van de regel.
oh ja sorry, niet goed gekeken, stom van me |:(

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16-09 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zondag 25 november 2001 20:54 schreef Onno het volgende:

[..]

Oh, gruwel. Nu weet ik weer waarom ik TASMs ideal mode zo prettig vind. Ambigue dingen als mov si,cpumsg mogen daarin gewoon niet. Maar dat terzijde. :)
waarom is dat ambigue?

tenminste, dat ligt maar net aan de assembler... als je bijv. nasm gebruikt is dit dus absoluut niet ambigue
Je roept message voor de tweede regel precies zo aan? En je hebt er ergens voor gezorgd dat de direction flag gecleared is?
als die niet gecleared was dan zou ie dat niet eens printen :)

(en in je eigen asm functie doe je per ongeluk jmp message ipv jmp lusje :))

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zondag 25 november 2001 21:21 schreef OiSyN het volgende:
waarom is dat ambigue?
MASM is evil.

Doe mij maar 'offset blaat' of '[blaat]' voor de pointer resp. inhoud.
als die niet gecleared was dan zou ie dat niet eens printen :)
Dat was ook zomaar een vraag tussendoor. Het kan ook best goed gaan zonder dat je die flag expliciet goed instelt, maar dat iets 10 keer goed gaat is geen garantie dat het de elfde keer ook nog goed gaat. :)
(en in je eigen asm functie doe je per ongeluk jmp message ipv jmp lusje :))
:o

Verwijderd

Devinity, die asm code voor je `message' en de `strings' die je print zouden gewoon moeten kloppen. Het ligt dus niet aan de message en ook niet aan de manier waarop je ze aanroept. Dus misschien dat je verder in het programma nog iets verandert maar dat lijkt me ook nogal vaag. (Ik heb trouwens de code ook nog ff getest om te kijken of ik ook nergens overheen zou lezen en het werkt idd gewoon goed op mijn bak). Dus doe je verder nog gekke dingen? (naast de CPU detecteren dan :) )

edit:

Staan je stack en selectors wel goed?. Want die zijn NOT your friend in deze gevallen ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 16-09 23:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zondag 25 november 2001 21:23 schreef Onno het volgende:

[..]

MASM is evil.
yup
Doe mij maar 'offset blaat' of '[blaat]' voor de pointer resp. inhoud.
yup again, ik zei ook Nasm, niet masm :)
Dat was ook zomaar een vraag tussendoor. Het kan ook best goed gaan zonder dat je die flag expliciet goed instelt, maar dat iets 10 keer goed gaat is geen garantie dat het de elfde keer ook nog goed gaat. :)
daar heb je idd gelijk in :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
oke, appart.

Als de message procedure in mijn bootsect file word gekopieerd dan doet hij het wel.
dan is er toch wat mis met het aan roepen van mijn kerneltje denk ik :(

eventje dat gedeelte nakijken.

Verwijderd

Topicstarter
thnx iedereen,

heb het nu wel goed draaien.
moet alleen een nieuwe procedure schrijven die mijn kernel gaat laden.. :(
Pagina: 1