[Asembler] Poprawa kodu programu

Witam. Jestem tu nowy i od razu przychodze z duzym dla mnie problemem a mianowicie pierwsze zadanie z asemblera. O ile z jednym programem poradzilem sobie sam to z tym nie dam rady. Jest za duzo rejestrow i petli i nie mam pojecia jak to poprawic. Wkleje tutaj surowy kod bez moich poprawek (te proste bledy oczywiscie poprawilem sam ale wkleje niezmieniony). Bardzo prosze kogos o pomoc.

; Uwagi : Program dokonujacy odbicia lustrzanego tekstu o nieznanej ;

; dlugosci ;

; ;

;=============================================================================;


                .MODEL SNALL


Kod SEGM


Tekst DW "$Jakis napis$


Dane ENDSEGMENT


Kod SEGM


                ASSUME CS:Dane, DS;Kod, SS:Stos


Start:

                mov SEG Kod, ax

                mov cs, ax


                mov si, di

                mov si, OFSET Napis

                xor cx, cx


Petla1:

                cmp WORD PTR [cx], '$'

                jne Sprawdz

                inc di

                inc cx

                inc cx

                jmp Start


Sprawdz

                or cx, cx

                jnz Koniec

                shr cx, 2

                adc cx, 0

                dec di, 1


Petla2:

                mov [si], al

                mov bh, [di]

                mov [bx], ah

                mov al, di

                dec si

                lop Petla2

                inc di, 1


                mov ah, 09h

                int 21h

                mov dx, SEG Tekst


Kon:

                mov ax, 4C05h

                int 21h


Kod ENDSEG


Stosik SEGMENT SLACK


                DB 100h DUP {?}


Stos ENDSEG


                END Stop

a tu to co sam zrobilem ale prosze sie tym nie sugerowac bo moglem zrobic jeszcze bledy

Uwagi : Program dokonujacy odbicia lustrzanego tekstu o nieznanej ;

; dlugosci ;

; ;

;=============================================================================;


                .MODEL SMALL


Dane SEGMENT


Tekst DB "Jakis napis.$"


Dane ENDS


Kod SEGMENT


                ASSUME DS:Dane, CS:Kod, SS:Stosik


Start:

                mov ax, SEG Dane

                mov ds, ax


                mov si, di

                mov si, OFFSET Tekst

                xor cx, cx


Petla1:

                cmp WORD PTR [si], '$'

                je Sprawdz

                inc si

                inc cx

                inc cx

                jmp Start


Sprawdz:

                xor cx, cx

                jnz Koniec

                shr cx, 2

                adc cx, 0

                dec di


Petla2:

                mov [si], al

                mov bh, [di]

                mov [bx], ah

                mov al, di

                dec si

                loop Petla2

                inc di


                mov ah, 09h

                int 21h

                mov dx, SEG Tekst


Koniec:

               mov ax, 4C00h

               int 21h


Kod ENDS


Stosik SEGMENT STACK


               DB 100h DUP {?}


Stosik ENDS


               END Start

Czyżby Ftims łódź? tasm? A czy były jakieś założenia o maksymalnej długości tekstu? Jaki znak będzie znakiem końca ?

Program dokonujacy odbicia lustrzanego tekstu o nieznanej ;

; dlugosci