; multi-segment executable file template. data segment ; add your data here! pkey db "press any key...$" msg1 db "Enter string: $" msg2 db "Input: $" msg3 db "Output: $" cr db 0Ah, 0Dh, '$' buff db 200 length db ? buffer db 200 dup ('$') ends stack segment dw 128 dup(0) ends code segment start: ; set segment registers: mov ax, data mov ds, ax mov es, ax call input_string lea bx, buffer mov cx, bx mov al, [bx] ;get first char to compare l1: inc bx ;increment second char pointer cmp [bx], 0Dh ;check for end-of-line je l3 ;if end - change first char mov ah, [bx] ;get second char cmp ah,al ;compare, if second is greater than first jae l1 ;if no, skip exchange mov [bx], al ;exchanging xchg bx, cx mov [bx], ah xchg ah, al xchg bx, cx jmp l1 ;repeat l3: inc cx ;increment first char pointer mov bx, cx ;set second char pointer equal to the first cmp [bx] ,0Dh ;check for end-of-line je exit ;if end - go to end mov al, [bx] ;get first char to compare jmp l1 ;repeat input_string: lea dx, msg1 mov ah, 9 int 21h lea dx, buff mov ah, 0Ah int 21h lea dx, cr mov ah, 9 int 21h lea dx, msg2 mov ah, 9 int 21h lea dx, buffer mov ah, 9 int 21h lea dx, cr mov ah, 9 int 21h ret ; add your code here exit: lea dx, msg3 mov ah, 9 int 21h lea dx, buffer mov ah, 9 int 21h lea dx, cr mov ah, 9 int 21h lea dx, pkey mov ah, 9 int 21h ; output string at ds:dx ; wait for any key.... mov ah, 1 int 21h mov ax, 4c00h ; exit to operating system. int 21h ends end start ; set entry point and stop the assembler.