Advertisement
qberik

Untitled

Mar 9th, 2023
2,607
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .model small
  2. .stack 100h
  3.  
  4. .data
  5.  
  6.   text db 'ZZZ gtP GT ZZZ','$'
  7.   bufer db 999 dup('$')
  8.  
  9.   array_of_word_big dw 99 dup(0)
  10.   array_of_word_pos dw 99 dup(0)
  11.   array_of_word_end dw 99 dup(0)
  12.  
  13.   text_a db "input string: $"
  14.   text_b db "output string: $"
  15.  
  16.   endl db 10,13,'$'
  17.  
  18. .code
  19. start:
  20.   mov ax, @data
  21.   mov ds, ax
  22.  
  23.   mov si, 0
  24.   mov di, 0
  25.  
  26.   jmp _find_data_length
  27. _find_data_length_step:
  28.   inc di
  29. _find_data_length:
  30.   cmp text[di], '$'
  31.   je _find_data_length_end
  32.   jmp _find_data_length_step
  33. _find_data_length_end:
  34.  
  35.   ;di - text len
  36.  
  37.   mov ax, 0
  38.   mov cx, 0
  39.   mov bx, 0
  40. _find_new_word:
  41.  
  42.     cmp text[si], ' '
  43.     je _new_word_found
  44.     cmp si, di
  45.     je _new_word_found
  46.  
  47.     cmp text[si], 'A'
  48.     jl _not_big
  49.     cmp text[si], 'Z'
  50.     jg _not_big
  51.     inc ax
  52.   _not_big:
  53.    
  54.     inc si
  55.     jmp _find_new_word  
  56. _new_word_found:
  57.  
  58.     mov array_of_word_big[bx], ax
  59.     mov array_of_word_pos[bx], cx
  60.     mov array_of_word_end[bx], si
  61.    
  62.     inc si
  63.     add bx, 2
  64.     mov ax, 0
  65.     mov cx, si
  66.    
  67.     cmp si, di
  68.     jge _end_of_text_scan
  69.  
  70.     jmp _find_new_word
  71. _end_of_text_scan:
  72.  
  73.  
  74.   mov si, bx
  75.  
  76.   mov ax, 0 ; min
  77.   mov cx, 0 ; max
  78.   mov bx, 0
  79.   ;find min
  80.  
  81.   jmp _find_min_max_word
  82. _find_min_max_word_step:
  83.   add bx, 2
  84. _find_min_max_word:
  85.   cmp bx, si
  86.   jge _find_min_max_word_end
  87.  
  88.   push bx
  89.   mov bx, ax
  90.   mov dx, array_of_word_big[bx]
  91.   pop bx
  92.   cmp array_of_word_big[bx], dx
  93.   jge _skip_min
  94.   mov ax, bx
  95. _skip_min:
  96.  
  97.   push bx
  98.   mov bx, cx
  99.   mov dx, array_of_word_big[bx]
  100.   pop bx
  101.   cmp array_of_word_big[bx], dx
  102.   jle _skip_max
  103.   mov cx, bx
  104. _skip_max:
  105.  
  106.   jmp _find_min_max_word_step
  107. _find_min_max_word_end:
  108.  
  109.  
  110.  
  111.   mov bx, ax
  112.   mov dx, array_of_word_pos[bx]
  113.   push dx
  114.   mov dx, array_of_word_end[bx]
  115.   push dx
  116.  
  117.   mov bx, cx
  118.   mov dx, array_of_word_pos[bx]
  119.   mov bx, ax
  120.   mov array_of_word_pos[bx], dx
  121.  
  122.   mov bx, cx
  123.   mov dx, array_of_word_end[bx]
  124.   mov bx, ax
  125.   mov array_of_word_end[bx], dx
  126.  
  127.   mov bx, cx
  128.   pop dx
  129.   mov array_of_word_end[bx], dx
  130.   pop dx
  131.   mov array_of_word_pos[bx], dx
  132.  
  133.  
  134.   mov cx, si
  135.   mov ax, 0
  136.   mov bx, 0
  137.   jmp _word_loop
  138. _word_loop_step:
  139.   add ax, 2
  140. _word_loop:
  141.   cmp ax, cx
  142.   jge _word_loop_end
  143.  
  144.   push bx
  145.   mov bx, ax
  146.   mov si, array_of_word_pos[bx]
  147.   mov di, array_of_word_end[bx]
  148.   pop bx
  149.   jmp _copy_loop
  150.   _copy_loop_step:
  151.     inc bx
  152.     inc si
  153.   _copy_loop:
  154.     cmp si, di
  155.     jge _copy_loop_end
  156.    
  157.     mov dh, text[si]
  158.     mov bufer[bx], dh
  159.     jmp _copy_loop_step
  160.   _copy_loop_end:
  161.  
  162.   mov bufer[bx], ' '
  163.   inc bx
  164.  
  165.   jmp _word_loop_step
  166. _word_loop_end:
  167.   dec bx
  168.   mov bufer[bx], '$'
  169.  
  170.  
  171.   Print MACRO str
  172.   push ax
  173.   push dx
  174.  
  175.   mov ah, 09h
  176.   mov dx, offset str
  177.   int 21h
  178.  
  179.   pop dx
  180.   pop ax
  181.   ENDM Print
  182.  
  183.   Print text_a
  184.   Print endl
  185.   Print text
  186.   Print endl
  187.   Print text_b
  188.   Print endl
  189.   Print bufer
  190.   Print endl
  191.  
  192.  
  193.  
  194.  
  195.   mov ax, 4c00h
  196.   int 21h
  197.  
  198.  
  199. end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement