A már pascalból jól ismert gotoxy és writeto eljárásokat tartalmazza a program. Egy stringet lehet kiírni vele a DOS képernyőn bárhova pozicionálva. A program masm 6.11 -el lett fordítva, és notepad++ -ban szerkesztve. Valószínű nem ez lesz az utolsó assembly program, amit közzé teszek. De egyelőre meg kell elégednetek ennyivel :)
.stack
.data ;adatszegmens hasznalata
;konstansok felvetele
cr = 13 ;carrige return (kocsi vissza)
lf = 10 ;line feed (új sor)
bckspc = 8 ;backspace karakter
;valtozok felvetele (dollar a lezaro karakter)
msgstr db 'Hello haver $'
msgstr2 db 'Mizu? $'
msgstr3 db 'Konkret pozicioba $'
dcrlf db cr,lf,'$' ;soremeles
.code
exit macro ;Program megszakitasa. Ez mindig kell a program vegen
mov ah, 04ch ;hexa 4C az AH regiszterben utasit a kilepesre
int 21h ;Megszakitas. dos funkciok hivasa
endm
clrscr macro ;DOS kepernyo torlese
push ax ;ax mentese
mov ax, 3 ;3-as bekerul ah-ba. Utasitas kepernyo torlesere
int 10h ;hexa 10-es megszakitas. Kepernyo driver hivasara
pop ax
endm
write macro string ;szoveg kiirasa kepernyore
push ax ;regiszterek mentese
push dx
mov ax, @data ;adatszegmens kezdozime ax-be
mov ds, ax ;ezt betoltjuk az adatszegmens regiszterbe
mov dx, offset string ;a string offset cimenek betoltese dx-be
mov ah, 9 ;ah-ban 9 jelenti, hogy stringet kell kiirni
int 21h ;dos megszakitas
pop dx ;regiszterek visszatoltese
pop ax
endm
writeln macro string ;szoveg kiiras es soremeles
write string
write dcrlf
endm
gotoxy macro x, y ;kurzor pozicionalasa x, y pozicioba (x=oszlop, y=sor)
push dx ;hasznalt regiszterek mentese
push ax
push bx
mov dh, x ;dh-ba kell kerulnie az oszlopszamnak
mov dl, y ;es dl-be kell kerulni a sorszamnak
mov ah, 2 ;A kettes kod a kurzor pozicionalasa
xor bh, bh ;Hasznalt kepernyo lap szama 0
int 10h ;képernyő driver hivasa
pop bx ;regiszterek visszatoltese
pop ax
pop dx
endm
writeto macro string, x, y ;szoveg kiirasa x, y pozicioba
gotoxy x, y ;eloszor pozicionalas
write string ;majd kiiras
endm
write_char macro chr ;egy karakter kiirasa
push ax ;regiszterek mentese
push dx
mov dl, chr ;dl-be keruljon a karakter
mov ah, 2 ;2-es bekerul ah-ba. Utasitas karakter kiirasara
int 21h ;megszakitas hivas. DOS funkciok eleresere
pop dx ;regiszterek visszatoltese
pop ax
endm
main proc ;foprogram
clrscr ;kepernyo torlese
writeln msgstr ;ket szoveg kiirasa kulon sorban
writeln msgstr2
writeto msgstr3, 4, 3 ;szoveg kiirasa 3 sor 4 oszlopatol
exit ;kilepes a programbol;
main endp
end main ;A teljes program vege. Meg kell adni, hogy melyik
;eljaras lesz a foprogram