;kód szegmens kod segment para public 'code' assume cs:kod,ds:adat,ss:verem,es:nothing start: mov ax, adat ;mert nincsen 'mov ds, adat' mov ds, ax ; főprogram mov si, offset szoveg ;si mutasson a kiirandó call strkiir ;írjuk ki a szöveget mov si, offset ujsor call strkiir mov si, offset szoveg call strvfordit ;fordítsuk meg call strkiir ;írjuk ki újra a szöveget ; főprogram vége mov ah,4ch ;kilepes mov al,00h ;visszateresi kod int 21h ;dos megszakitás ;eljárás ami kiír egyetlen betűt. a betű kódját al-ben ;várja betukiir proc ;al ben a kiirandó betű mov ah, 14 ;BIOS rutin paramétere int 10h ;10h megszakítás hívása ret ;visszatérés betukiir endp ;eljárás ami kiír egy 0-val záródó karakterláncot ;a string elejét si mutatja strkiir proc push si kov: mov al, [si] ;következő betű cmp al, 0 ;0 jelzi a str végét je strvege ;ha elértünk a végére ugrunk call betukiir ;egy betű kiirása inc si ;mutató a következő betűre jmp kov ;ugrás strvege: pop si ret ;eljárás vége strkiir endp strvfordit proc push si di ;regiszterek mentése mov cx, 0 ;számláló számolja a str. hosszát mov di, si ;si mentése di be mert később szükség lesz rá berak: mov al, [si] ;betöltjük a betűt cmp al, 0 ;0 jelzi a str végét je berakvege push ax ;betű be a verembe inc cx ;számláló növelése inc si ;si mutasson a köv betűre jmp berak ;ugrás vissza a ciklus elejére berakvege: cmp cx, 0 ;számláló akkor 0, ha a szt. üres volt je strvforditvege kivesz: pop ax mov [di], al inc di loop kivesz strvforditvege: pop di si ret strvfordit endp kod ends ;adat szegmens adat segment para public 'data' szoveg db "Haho!", 0 ujsor db 10, 13, 0 adat ends ;verem szegmens verem segment para stack dw 64 dup (0) ;helyfoglalás verem ends end start