Zdravim, vedel by niekto prerobit program ktory nacitava retazec z klavesnice a potom ho prevrati a vypise na obrazovku, na program ktory nacitava retazec zo suboru a potom ho prevrateny vypise na obrazovku?
povodny program:
Kód:
.MODEL SMALL
.STACK 50H
.data
zadaj DB 13,10,'Zadaj retazec a stlac ENTER: $'
vysledok DB 13,10,'Retazec odzadu: $'
dlzka DB 0FFh
text DB '' ; tu sa bude ukladat "zadavany retazec"
.CODE
org 100h
START:
mov ax,@data
MOV DS,AX
mov ah,09h
lea dx,zadaj
int 21h ; zobrazi sa vyzva na zadanie retazca
lea dx, dlzka ;nastavi do dx adresu ulozenej max dlzky retazca
;zaroven od tej adresy bude ukladat nacitany retazec
mov ah,0Ah ;sluzba na nacitanie retazca ukonceneho ENTER
int 21h
lea bx, text ; do bx adresu data seg.
xor CX, CX ; CX <--- 0
mov CL, [bx] ; CL ... dlzka nacitaneho textu
MOV DI, CX
lea dx,vysledok
mov ah,09h
int 21h ; zobrazi text "Retazec odzadu..."
cely_retazec:
cmp DI,0
je koniec ; koniec ?
mov AL, [text+DI]
mov DL, AL ;
mov ah,02h ;
int 21h ;vypisanie znaku (cislice)
dec DI ; dalsi znak v zdrojovom retazci
jmp cely_retazec
koniec:
MOV AX,4C00H
INT 21H ; koniec
END START
ja som skusal nieco ale nejde mi to vobec rozbehat:
Kód:
.MODEL SMALL
.STACK 50H
.data
znak db 0
zadaj DB 13,10,'Zadaj retazec a stlac ENTER: $'
vysledok DB 13,10,'Retazec odzadu: $'
dlzka DB 0FFh
text DB '' ;tu sa bude ukladat "zadavany retazec"
file_name_in db 'input.txt','$' ;meno vstupneho suboru
file_handle_in dw 0 ;handler pre vstupny subor
otvor_vstup db 'Vstupny subor bol otvoreny',10,13,'$'
zatvor_vstup db 'Vstupny subor bol zatvoreny',10,13,'$'
CHYBA1 db 'Chyba otvarania vstupneho suboru',10,13,'$'
CHYBA3 db 'Chyba zatvarania vstupneho suboru',10,13,'$'
OK db 'Citanie a zapis...',10,13,'$'
.CODE
org 100h
;------------------------------------------ Macro na vypis retazca ---------------------------------------------
vypis MACRO str
mov ah,09h
mov dx,offset str
int 21h
ENDM
;---------------------------------------------------------------------------------------------------------------
;-------------------------------------- Otvorenie suboru na citanie - PROCEDURA --------------------------------
otvorenie1 PROC
lea dx, file_name_in ;ulozenie mena vstupneho suboru do dx
mov ah, 3dh ;otvorenie daneho suboru
mov al, 00000000b ;nastavenie na citanie
int 21h ;sluzba prerusenia
ret ;navrat
otvorenie1 ENDP
;-------------------------------------- Citanie zo suboru - PROCEDURA ------------------------------------------
citanie PROC C
USES bx,dx,cx
citaj:
mov bx, file_handle_in ;odtialto citame
lea dx, znak ;sem ukladame nacitane znaky
mov cx, 1 ;nacita sa jeden znak
mov ah, 3fh
int 21h ;sluzba DOSu na citanie znakov zo suboru
mov ah, 02h ;
int 21h ;vypisanie znaku (cislice)
cmp ax,0 ;porovnanie, ci sme sa na konci suboru
je nacitane ;skok na nacitane
jmp citaj ;skok na citanie dalsieho znaku
nacitane:
ret
citanie ENDP
;---------------------------------------------------------------------------------------------------------------
START:
mov ax,@data
MOV DS,AX
otvorvstup: call otvorenie1 ;volanie procedury pre otvorenie suboru na citanie
jnc citajj ;ak nenastala chyba nastavi sa priznak a skoci na citajj
citajj: vypis otvor_vstup ;vypisanie hlasenia, ze vstupny subor bol otvoreny
call citanie ;volanie procedury pre citanie zo suboru
uspesne: vypis OK
lea dx,vysledok
mov ah,09h
int 21h ; zobrazi text "Retazec odzadu..."
cely_retazec:
cmp DI,0
je koniec ; koniec ?
mov AL, [text+DI]
mov DL, AL ;
mov ah,02h ;
int 21h ;vypisanie znaku (cislice)
dec DI ; dalsi znak v zdrojovom retazci
jmp cely_retazec
koniec: mov ah, 3eh ;zatvaranie vstupneho suboru
mov bx, file_handle_in
int 21h
jnc koniec2
vypis CHYBA3
koniec2: vypis zatvor_vstup ;zatvaranie vystupneho suboru
mov ah, 3eh
int 21h
mov ax, 4c00h
int 21h
end start