Kurzor pozicionálás és string kiírás Microsoft macro Assemblerben

writeto_string logo

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 :)


.model small
.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

Kategóriák: 
Megosztás/Mentés