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


  1. .model small
  2. .stack
  3. .data                                   ;adatszegmens hasznalata
  4.         ;konstansok felvetele
  5.         cr              = 13            ;carrige return (kocsi vissza)
  6.         lf              = 10            ;line feed (új sor)
  7.         bckspc  = 8             ;backspace karakter
  8.         ;valtozok felvetele (dollar a lezaro karakter)
  9.     msgstr db 'Hello haver $'
  10.     msgstr2 db 'Mizu? $'
  11.  
  12.     msgstr3 db 'Konkret pozicioba $'
  13.  
  14.     dcrlf db cr,lf,'$'  ;soremeles
  15. .code
  16.  
  17.  
  18. exit macro                      ;Program megszakitasa. Ez mindig kell a program vegen
  19.         mov ah, 04ch    ;hexa 4C az AH regiszterben utasit a kilepesre
  20.         int 21h         ;Megszakitas. dos funkciok hivasa
  21. endm
  22.  
  23. clrscr macro            ;DOS kepernyo torlese
  24.         push ax         ;ax mentese
  25.         mov ax, 3               ;3-as bekerul ah-ba. Utasitas kepernyo torlesere
  26.         int 10h         ;hexa 10-es megszakitas. Kepernyo driver hivasara
  27.         pop ax
  28. endm
  29.  
  30. write macro string      ;szoveg kiirasa kepernyore
  31.     push ax                     ;regiszterek mentese
  32.     push dx
  33.  
  34.     mov ax, @data       ;adatszegmens kezdozime ax-be
  35.     mov ds, ax          ;ezt betoltjuk az adatszegmens regiszterbe
  36.  
  37.     mov dx, offset string       ;a string offset cimenek betoltese dx-be
  38.  
  39.     mov ah, 9           ;ah-ban 9 jelenti, hogy stringet kell kiirni
  40.     int 21h                     ;dos megszakitas
  41.  
  42.     pop dx                      ;regiszterek visszatoltese
  43.     pop ax
  44. endm
  45.  
  46. writeln macro string    ;szoveg kiiras es soremeles
  47.     write string
  48.     write dcrlf
  49. endm
  50.  
  51.  
  52. gotoxy macro x, y       ;kurzor pozicionalasa x, y pozicioba (x=oszlop, y=sor)
  53.     push dx                     ;hasznalt regiszterek mentese
  54.     push ax
  55.     push bx
  56.  
  57.     mov dh, x           ;dh-ba kell kerulnie az oszlopszamnak
  58.     mov dl, y           ;es dl-be kell kerulni a sorszamnak
  59.     mov ah, 2           ;A kettes kod a kurzor pozicionalasa                   
  60.  
  61.     xor bh, bh          ;Hasznalt kepernyo lap szama 0
  62.     int 10h                     ;képernyő driver hivasa
  63.  
  64.     pop bx                      ;regiszterek visszatoltese
  65.     pop ax
  66.     pop dx
  67. endm
  68.  
  69. writeto macro string, x, y ;szoveg kiirasa x, y pozicioba
  70.     gotoxy x, y         ;eloszor pozicionalas
  71.     write string                ;majd kiiras
  72. endm
  73.  
  74. write_char macro chr    ;egy karakter kiirasa
  75.         push ax         ;regiszterek mentese
  76.         push dx
  77.  
  78.         mov dl, chr             ;dl-be keruljon a karakter
  79.         mov ah, 2               ;2-es bekerul ah-ba. Utasitas karakter kiirasara
  80.         int 21h         ;megszakitas hivas. DOS funkciok eleresere
  81.  
  82.         pop dx          ;regiszterek visszatoltese
  83.         pop ax
  84. endm
  85.  
  86. main proc                       ;foprogram
  87.         clrscr                  ;kepernyo torlese
  88.     writeln msgstr              ;ket szoveg kiirasa kulon sorban
  89.     writeln msgstr2
  90.    
  91.     writeto msgstr3, 4, 3 ;szoveg kiirasa 3 sor 4 oszlopatol
  92.     exit                        ;kilepes a programbol;
  93. main endp
  94.  
  95.  
  96. end main                ;A teljes program vege. Meg kell adni, hogy melyik
  97.                         ;eljaras lesz a foprogram
Kategóriák: 
Megosztás/Mentés

Új hozzászólás