; Assembly főprogram, amely adott szöveget ír a képernyőre ; ================================================= KOD SEGMENT PARA PUBLIC 'CODE' ; Szegmens kezdet ; KOD: a szegmens neve ; align-type (igazítás típusa): BYTE, WORD, PARA, PAGE ; combine-type: PUBLIC, COMMON, AT , STACK ; class: 'CODE', 'DATA', ('CONSTANT',) 'STACK', 'MEMORY' ; ajánlott értelemszerűen ASSUME CS:KOD, DS:ADAT, SS:VEREM, ES:NOTHING ; feltételezett szegmens regiszter értékek. ; A beállításról ez az utasítás nem gondoskodik! ; ------------------------------------------------- KIIR PROC FAR ; A fő eljárás mindig FAR ; FAR: távoli, NEAR: közeli eljárás ; Az operációs rendszer úgy hívja meg a főprogramokat, hogy ; a CS és IP a program végén lévő END utasításban megadott ; címke szegmens és OFFSET címét tartalmazza, SS és SP a ; a STACK kombinációs típusú szegmens végét mutatja, ; a visszatérés szegmens címe DS-ben van, OFFSET-je pedig 0 PUSH DS ; DS-ben van a visszatérési cím ; SEGMENT része XOR AX, AX ; AX?0, az OFFSET rész = 0 PUSH AX ; Veremben a (FAR) visszatérési cím MOV AX, ADAT ; AX<= az ADAT SEGMENT címe MOV DS, AX ; Most már teljesül, amit az ASSUME utasításban írtunk ; Eddig tartott a főprogram előkészületi része MOV SI, OFFSET SZOVEG ; SI <= SZÖVEG OFFSET címe CLD ; a SZÖVEGet növekvő címek ; szerint kell olvasni CALL KIIRO ; Eljárás hívás RET ; Visszatérés az op. rendszerhez ; a veremből visszaolvasott ; szegmens és OFFSET címre KIIR ENDP ; A KIIR eljárás vége ; ------------------------------------------------- KIIRO PROC ; NEAR eljárás, ; megadása nem kötelező CIKLUS: LODSB ; AL<=a következő karakter CMP AL, 0 ; AL =? 0 JE VEGE ; ugrás a VEGE címkéhez, ; ha AL=0 MOV AH, 14 ; BIOS rutin paraméterezése INT 10H ; a 10-es interrupt hívása: ; az AL ben lévő karaktert kiírja JMP CIKLUS ; ugrás a CIKLUS címkéhez, ; a kiírás folytatása VEGE: RET ; Visszatérés a hívó programhoz KIIRO ENDP ; A KIIRO eljárás vége KOD ENDS ; A KOD szegmens vége ; ================================================= ADAT SEGMENT PARA PUBLIC 'DATA' SZOVEG DB 'Ezt a szoveget kiirja a kepernyore', 13, 10, 0 ; 13: a kocsi vissza, ; 10: a soremelés kódja, ; 0: a szöveg vége jel ADAT ENDS ; Az ADAT szegmens vége ; ================================================= VEREM SEGMENT PARA STACK DW 100 DUP (?) ; Helyfoglalás 100 db ; inicializálatlan szó számára VEREM ENDS ; A VEREM szegmens vége ; ================================================= END KIIR ; Modul vége, ; a program kezdőcíme: KIIR