;kód szegmens kod segment para public 'code' assume cs:kod,ds:adat,ss:verem,es:nothing start: push ds ;visszatérés segmensének mentése xor ax, ax ;offset mindig 0 push ax ;visszatérés offsetjének mentése mov ax, adat ;mert nincsen 'mov ds, adat' mov ds, ax ; főprogram mov ax, offset szoveg ;si mutasson a kiirandó mov si, ax ;szöveg elejére call strkiir ;írjuk ki a szöveget call strfordit ;fordítsuk meg call strkiir ;írjuk ki újra a szöveget ; főprogram vége vege: retf ;visszatérés a hívó programhoz ;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 ;regiszterek mentése push di mov di, si ;di fog mutatni a string végére keresciklus: 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 keresciklus ;ugrás a keresés elejére keresvege: mov ax, di sub ax, si cmp ax, 2 jbe forditvege dec di csereciklus: mov al, [si] mov ah, [di] mov [si], ah mov [di], al inc si dec di cmp si, di jb csereciklus forditvege: pop di ;regiszterek visszatöltése pop si ret strfordit endp kod ends ;adat szegmens adat segment para public 'data' szoveg db "Haho vilag!", 0 adat ends ;verem szegmens verem segment para stack dw 64 dup (0) ;helyfoglalás verem ends end start