;to print a string
print macro msg                                             
        lea dx,msg
        mov ah,09h
        int 21h
endm
;goes to next line
newline macro                                                   
        mov ah,02h
        mov dl,0ah
        int 21h
endm
.model small
.stack 100h
.data
        s1 db 'Enter  the sentance:-  $'
        s2 db 'Sentance after reversing the word:-  $'
        s3 db 50 dup('$')
.code
        mov ax,@data
        mov ds,ax
        print s1
        mov di,00h
        ;read s3
    loop1:mov ah,01                                             
        int 21h
        cmp al,0dh
        jz j1
        mov s3[di],al
        inc di
        jmp loop1
        ;length of s3 is stored in cx
    j1:mov cx,di                                                    
        mov di,00                                                       
        mov bx,sp                                                       
        newline
        print s2
        
        ;while cx!=0
        ;{
        ;           if s3[di]==' ' 
        ;           {   while stack not empty
        ;                   pop and display
        ;                display space
        ;           }
        ;           else push s3[di]
        ;           increment di
        ;           decrement cx
        ;}
    loop2:cmp cx,00                                              
        jz loop4                                                            
        mov al,s3[di]                                                   
        cmp al,32d                                                  
        jnz j4                                                      
    loop3:cmp sp,bx                                             
        jz j3                                                               
        pop dx                                                           
        mov ah,02h                                                  
        int 21h                                                         
        jmp loop3                                                       
    j3:mov ah,02h
        mov dl,32d
        int 21h
        jmp j5
    j4:mov ax,00
        mov al,s3[di]
        push ax
    j5:inc di
        dec cx
        jmp loop2
        ;while stack not empty
        ;       pop and display
    loop4:cmp sp,bx                                             
        jz stp                                                          
        pop dx
        mov ah,02h
        int 21h
        jmp loop4
        
    stp:mov ah,4ch
       int 21h
end
No comments:
Post a Comment