Assemblerproblem

wolfshuendchen

Grünschnabel
hallo zusammen

also ich habe folgendes problem und hoffe dass ihr mir dabei helfen könnt
ich suche vorschläge, hab aber auch nix gegen eine richtige lösung um diese zu studieren

da ist eine aufgabe, die ich in assembler lösen soll:

ein text (vorgegeben:hello world) soll ausgegeben werden, am monitor

also erst soll man eine monitorschnittstelle für die asynchrone Datenübertragung
(9600 Bd, 8 Datenbits, kein Paritätsbit) initialisieren, dann soll der text ausgegeben werden
(speicherstelle nicht vergessen)

okay, in meinem programm steht also:

start: mov s1rel,#217 ;Baudratengenerator initialisieren
mov s1con, #090h ;Schnittstelle initialisieren
mov dptr,#text15 ;dptr auf den Textanfang setzen
movx a, @dptr ;erstes Textzeichen aus dem Speicher holen

loop1: mov s1con,#00h ;Sende-Steuerbit löschen
mov s1buf,a ;Textzeichen am Sendebuffer ausgeben
send0:jnb, acc1, send0 ;warten bis Sendeteil frei ist
inc dptr ;Zeiger auf nächstes Zeichen setzen
movx a,@dptr ;nächstes Zeichen holen
jnz loop1 ;solange <>0 zu loop 1 zurück
ljmp start ;endlos warten

text15: db 0dh,0ah ;Carriage-Return + Line-Feed (neue Zeile)
db 'Hallo Welt' ;Meldung mit anschliesssendem
db 0dh,0ah,0 ;Carriage-Return + Line-Feed+ End-Code


das programm scheint die erste Zeile, oder mind. das erste Zeichen einzulesen,
geht dann aber nicht weiter.
also im terminal gibt es eine neue Zeile, mehr geschiet nicht.
ich hoffe ihr könnt mir helfen

wolf ^^
 
Guten Abend,

also dein Code ist nicht gerade sehr einsichtlich.
Wenn du etwas auf den Bildschirm schreiben willst, so schreibe einfach in den linearen Textmode Buffer an der Adresse 0B8000h.
Dort werden die ASCII Zeichen zuammen mit Attribut hingeschrieben, und direkt am Bildschirm angezeigt.

Folgender Code gibt "Hello World!" aus (mithilfe des BIOSes, ohne dem geht es auch, dann ist es aber um ein paar Zeilen länger, wenn du willst kann ich dir den Code dann geben):

mov si,MSG_Hello_World
call Print_Text

; halte den Prozessor an und tue nichts
cli
hlt


; a function to write a text onto the screen (si = text)
Print_Text:

;mov ax,cs
;mov ds,ax ; ds = cs

mov bx,0007h ; Page Number = 0, Attribute = 07h
mov ah,0Eh ; function 0Eh: Teletype Output

cs lodsb ; load the first character

Next_Char:
int 10h
cs lodsb ; al = next character
or al,al ; last letter?
jnz Next_Char ; if not print next letter

ret



MSG_Hello_World db "Hello World!", 0

lg,

Toaster

PS: Schau auf http://www.osdever.net.tc vorbei, da gibt es viele Links und Dokumente zum Thema Betriebssystem Programmierung
 
Herzlichen Dank, ich werde das Programm so schnell wie möglich testen
und natürlich bei der Tipseite einmal vorbeischauen (später dann wohl mehrere male ;) )

kann leider noch nicht allzuviel mit dem Programm anfangen, muss das noch bisschen
studieren ^^

gruss
wolf
 
Zurück