Когда есть пустая строка между результатом для моего вывода int 21h / ah = 40h после переворота строки? - PullRequest
0 голосов
/ 09 мая 2020

Я хочу перевернуть какой-то текст. Этот код работает. Но я не понимаю, почему между результатом пустая строка? Я добавил скриншот. Вы можете объяснить мне, почему?

Потому что я не использую CR (0Dh) или что-то в этом роде. Возможно, это из-за функций DOS, таких как 3fh или 40h. В этой ситуации, как я могу изменить свой код?

И еще один вопрос. Я использую and ax,ax для проверки символов. Что можно использовать вместо and ax,ax, чтобы понять, есть ли символы в строке

;reverse
   .MODEL SMALL
   .STACK 100h
   .DATA
Max_String_Length  EQU  1000
String1     DB   Max_String_Length  DUP (?) ;string i want to reverse
ReverseString       DB   Max_String_Length  DUP (?) ;reverse string
   .CODE
   start:
   mov    ax,@Data       
   mov    ds,ax                  
   mov    es, ax            
   mov    ah,3fh        ;DOS function        
   mov    bx,0                  
   mov    cx,Max_String_Length 
   lea    dx, String1
   int    21h               
   and    ax,ax      ;are there any symbols?          
   jz     Done       ;if no the done       
   mov    cx,ax                
   push   cx                    
   lea    si, String1
   lea    di, ReverseString      
   add    di,cx     
   dec    di                    

again:
    cld     
    lodsb   
    mov  [di],al             
    dec  di           
    loop   again

   pop    cx                   
   mov    ah,40h      ;DOS function         
   mov    bx,1      
   lea    dx, ReverseString 
   int  21h
Done:
   mov    ax,4c00h       

   int    21h               
   end start[enter image description here][1]

enter image description here

...