Assembler - zamiana kolejności wyświetlanych znaków

0

Witam,
Mam napisać program, który zamieni parami litery w tekście o nieznanej długości. Program działa poprawnie jako .EXE, ale wymagane jest rozszerzenie .COM. Niestety program tlink sygnalizuje błąd. Próbowałem już wszystkiego i nie wiem co zrobić.

 .MODEL  TINY

ORG   100h              
                   
                               
ASSUME CS:code, DS:dane 
                         
                         
                         
                                         
dane SEGMENT            
    tekst db "tSraaWsr",10,13,'$'    
dane ENDS              

code SEGMENT            
Start:                    
                                          

               
      mov ax, SEG DANE
      mov ds,ax                 
      mov bx, 0                  
       
      mov ax, OFFSET Tekst     

Petla:
     inc bx               
     cmp Tekst[bx],'$'        
                            
     je Wyswietlenie            
     mov dl, Tekst[bx]             
     mov ah, 02H             
     int 21H
                   
    dec bx               
    mov dl, Tekst[bx]       
    mov ah, 02H                
    int 21H
   
    cmp Tekst[bx],'$'        
    je Wyswietlenie            
    add bx,2                
    cmp  Tekst[bx],'$'       
    je Wyswietlenie            
    jmp petla                

Wyswietlenie:

       mov ax, 4C00h     
                                  
                                  
		int 21h   
code ENDS
END  Start
0

Jaki błąd...

0

Przepraszam zapomniałem w ogóle o umieszczeniu błędu.
Podczas korzystania z tlink wyskakuje mi komunikat "Fatal : Cannot generate COM file : segment-relocatable items present"

0

Pierwszy link z dokumentacji mówi: błąd taki występuje kiedy próbujesz zmontować COM ze źródła które zawiera segmenty. Pliki COM z zasady mają znajdować się w jednym segmencie. Wywal wszystkie segmenty i operacje z nimi związane. Wrzuć wszystko do jednego i będzie banglać.

0

Po usunięciu segmentów:

  .MODEL  TINY
 
ORG   100h              
 
   
.data            
    tekst db "tSraaWsr",10,13,'$'    

.code            
Start:                    
 
 
 
      mov ax, OFFSET Tekst
      mov ds,ax                 
      mov bx, 0                  
 
      mov ax, OFFSET Tekst     
 
Petla:
     inc bx               
     cmp Tekst[bx],'$'        
      
     int 21h            
     mov dl, Tekst[bx]             
     mov ah, 02H             
     int 21H
 
    dec bx               
    mov dl, Tekst[bx]       
    mov ah, 02H                
    int 21H
 
    cmp Tekst[bx],'$'            
    int 21h            
    add bx,2                
    cmp  Tekst[bx],'$'       
    mov ax, 4C00h     
    int 21h            
    jmp petla                
 
   
END  Start

Pojawia się zupełnie inny błąd: "Fatal: Cannot generate COM file : invalid initial entry point addres"

0

A może wreszcie zaczniesz pisać te kody ze zrozumieniem a nie bezmyślnie wstawiać losowe komendy licząc że może zadziałają? Rozumiesz co robi komenda org 100h? Oczywiście że nie bo nie umieszczałbyś jej poza segmentem którego ma dotyczyć. Wstaw ją łaskawie pod .code i może jednak zaopatrz się w jakąś książkę / poradnik / cokolwiek...

0
  1. przenieś dane na koniec
  2. umieść ORG 100h tuż nad etykietą Start:

1 użytkowników online, w tym zalogowanych: 0, gości: 1