;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 call strfordit ;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 ;eljárás ami megfordít egy stringet. ;a string elejét SI mutatja strfordit proc push si di ;regiszterek mentése mov di, si ;di fog mutatni a string végére keres: mov al, [di] ;de, először meg kell keresnünk a végét cmp al, 0 ;vége? je keresvege ;ha igen ugrik inc di ;di mutasson a következő betűre jmp keres ;ugrás a keresés elejére keresvege: mov ax, di sub ax, si ;ax = di - si cmp ax, 2 ;ha 0 v. 1 a hossz, akkor vege is jb vege dec di csere: mov al, [di] xchg al, [si] ;kicseréli mov [di], al ;[si]-t és [di]-t inc si dec di cmp si, di ;vége? jb csere vege: pop di si ;regiszterek visszatöltése ret strfordit endp kod ends ;adat szegmens adat segment para public 'data' szoveg db "Hablaty", 0 adat ends ;verem szegmens verem segment para stack dw 64 dup (0) ;helyfoglalás verem ends end start