Skip to content

Latest commit

 

History

History
821 lines (595 loc) · 33.4 KB

README.md

File metadata and controls

821 lines (595 loc) · 33.4 KB

Лабораторная работа #6

Материалы

Варианты заданий

В приведённых ниже вариантах заданий способ передачи па-раметров в процедуру выбирать произвольно. Зациклить про-грамму по вводу строки, а признаком окончания работы считать ввод пустой строки.

  1. Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке, и если да, то начиная с какой позиции. Разработать программу, которая вводит с клавиатуры две строки и сообщает содержится ли одна в другой и сколько раз.
  2. Разработать две подпрограммы, одна из которых преобразует любую заданную букву в заглавную (в том числе для русских букв), а другая преобразует букву в строчную. Разработать программу, которая вводит с клавиатуры строку и замещает первые буквы всех слов заглавными, а остальные строчными буквами.
  3. Разработать две подпрограммы, одна из которых соединяет две строки в одну, а другая обрезает строки до заданной длины (или допол-няет пробелами, если длина строки меньше заданной). Разработать программу, которая вводит с клавиатуры число N, затем вводит несколь-ко строк (конец ввода пустая строка) и формирует новую строку, состо-ящую из первых N символов каждой введённой строки.
  4. Разработать две подпрограммы, одна из которых сравнивает две строки по лексикографическому порядку, а другая обменивает значения двух строк. Разработать программу, которая вводит с клавиатуры не-сколько строк (конец ввода пустая строка) и сортирует их в лексикогра-фическом порядке.
  5. Разработать подпрограмму, которая разбивает заданную строку на две части: первое слов (до первого пробела) и остальная часть строки (пробелы в начале строки убираются). Разработать программу, которая вводит с клавиатуры строку и выводит каждое слово с новой строки.
  6. Разработать подпрограмму, которая переставляет символы задан-ной строки в обратном порядке. Разработать программу, которая вводит с клавиатуры строку и переставляет в обратном порядке символы в каж-дом слове.
  7. Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке и, если да, то, начиная с какой позиции. Разработать программу, которая вводит с клавиатуры две строки и сообщает содержится ли одна в другой и сколько раз.
  8. Разработать подпрограмму, которая подсчитывает, сколько раз за-данный символ встречается в строке. Разработать программу, которая вводит с клавиатуры строку и число N и выдаёт список символов, кото-рые встречаются в строке не менее N раз.
  9. Разработать подпрограмму, которая преобразует заданное деся-тичное число в двоичную систему. Разработать программу, которая вво-дит с клавиатуры строку десятичных цифр и выводит на экран её экви-валент в двоичной системе. Если строка не является числом, то сооб-щает об этом.
  10. Разработать подпрограмму, которая преобразует заданное шест-надцатеричное число в десятичную систему. Разработать программу, которая вводит с клавиатуры строку шестнадцатеричных цифр и выво-дит на экран её эквивалент в десятичной системе. Если строка не явля-ется числом, то сообщает об этом.
  11. Разработать подпрограмму, которая определяет, сколько раз за-данная подстрока встречается в строке. Разработать программу, кото-рая вводит с клавиатуры две строки и определяет сколько раз вторая строка встречается в первой.
  12. Разработать подпрограмму, которая разбивает заданную строку на слова (слово считается от пробела до пробела, но в состав слова не входят). Разработать программу, которая вводит с клавиатуры строку и выводит каждое слово с новой строки.
  13. Разработать две подпрограммы, одна из которых преобразует лю-бую заданную букву в заглавную (в том числе для русских букв), а другая преобразует букву в строчную. Разработать программу, которая вводит с клавиатуры строку и заменяет первые буквы после точки на заглавные, а остальные на прописные.
  14. Разработать подпрограмму, которая определяет, содержится ли одна строка в другой и если да то с какой позиции. Разработать про-грамму, которая вводит с клавиатуры две строки и определяет содер-жится ли вторая строка в первой и с какой позиции.
  15. Разработать подпрограмму, которая каждой букве ставит в соот-ветствие число равное её порядковому номеру в алфавите. Разработать программу, которая вводит с клавиатуры строку и выводит через пробел числа, кодирующие введённую строку символов.
  16. Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке, и если да, то начиная с какой позиции. Разработать программу, которая вводит с клавиатуры две строки и сообщает содержится ли одна в другой и сколько раз.
  17. Разработать две подпрограммы, одна из которых преобразует лю-бую заданную букву в заглавную (в том числе для русских букв), а другая преобразует букву в строчную. Разработать программу, которая вводит с клавиатуры строку и замещает первые буквы всех слов заглавными, а остальные строчными буквами.
  18. Разработать две подпрограммы, одна из которых соединяет две строки в одну, а другая обрезает строки до заданной длины (или допол-няет пробелами, если длина строки меньше заданной). Разработать программу, которая вводит с клавиатуры число N, затем вводит несколь-ко строк (конец ввода пустая строка) и формирует новую строку, состо-ящую из первых N символов каждой введённой строки.
  19. Разработать две подпрограммы, одна из которых сравнивает две строки по лексикографическому порядку, а другая обменивает значения двух строк. Разработать программу, которая вводит с клавиатуры не-сколько строк (конец ввода пустая строка) и сортирует их в лексикогра-фическом порядке.
  20. Разработать подпрограмму, которая разбивает заданную строку на две части: первое слов (до первого пробела) и остальная часть строки (пробелы в начале строки убираются). Разработать программу, которая вводит с клавиатуры строку и выводит каждое слово с новой строки.
  21. Разработать подпрограмму, которая переставляет символы задан-ной строки в обратном порядке. Разработать программу, которая вводит с клавиатуры строку и переставляет в обратном порядке символы в каж-дом слове.
  22. Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке и, если да, то, начиная с какой позиции. Разработать программу, которая вводит с клавиатуры две строки и сообщает содержится ли одна в другой и сколько раз.
  23. Разработать подпрограмму, которая подсчитывает, сколько раз за-данный символ встречается в строке. Разработать программу, которая вводит с клавиатуры строку и число N и выдаёт список символов, кото-рые встречаются в строке не менее N раз.
  24. Разработать подпрограмму, которая преобразует заданное деся-тичное число в двоичную систему. Разработать программу, которая вво-дит с клавиатуры строку десятичных цифр и выводит на экран её экви-валент в двоичной системе. Если строка не является числом, то сооб-щает об этом.
  25. Разработать подпрограмму, которая преобразует заданное шест-надцатеричное число в десятичную систему. Разработать программу, которая вводит с клавиатуры строку шестнадцатеричных цифр и выво-дит на экран её эквивалент в десятичной системе. Если строка не явля-ется числом, то сообщает об этом.

Работа

Скелет прогрммы. Реализует циклический ввод строки. В качестве логики повторяет введённую строку

.model small
.data
    input_str  db 80, ?, 80 dup('$')
    
    enter_msg db 0dh,0ah, "Enter string:", 0dh,0ah, "$"
    output_msg db 0dh,0ah, "Output string:", 0dh,0ah, "$"
    
    next_msg db 0dh,0ah, "----Next----", 0dh,0ah, "$"
    stop_msg db 0dh,0ah, "----Stop----", 0dh,0ah, "$"

.code
start:
    mov ax, @data
    mov ds, ax    

main_loop:
    ; выводим сообщение для ввода строки
    mov ah, 09h
    lea dx, enter_msg
    int 21h

    ; считываем строку из консоли
    mov ah, 0Ah
    lea dx, input_str
    int 21h

    ; проверяем, не была ли введена пустая строка
    cmp byte ptr [input_str+1], 0
    je exit_program     ; если пустая - выходим

    ; вызываем подпрограмму
    call echo_proc

    ; Выводим сообщение разделитель итерация работы прграммы
    mov ah, 09h
    lea dx, next_msg
    int 21h
    
    jmp main_loop   ; идём на следующий проход


echo_proc proc
    
    ; Не забудьте о необходимости использовать pusha и popa где это нужно!
    
    ;;;; -- тут ваша логика --
    ; выводим сообщение
    mov ah, 09h
    lea dx, output_msg
    int 21h

    ; В качестве примера - "Эхо"

    ; выводим строку
    mov ah, 09h
    lea dx, input_str+2
    int 21h
    ;;; -- конец логики --
  
    ret
echo_proc endp


exit_program:
    ; выводим сообщение о том, что программа завершается
    mov ah, 09h
    lea dx, stop_msg
    int 21h

    mov ah, 4Ch     ; выходим из программы
    int 21h         ; и передаём управление потоком обратно MS DOS

end start

Вариант 5 и 21.

Часть 1. Разработать подпрограмму, которая разбивает заданную строку на две части: первое слов (до первого пробела) и остальная часть строки (пробелы в начале строки убираются)
Код
.model small
.data
    input_str  db 80, ?, 80 dup('$')    ; тут заполняем всю строку знаком конца строки заранее
    first_word db 80, ?, 80 dup('$')
    other_str  db 80, ?, 80 dup('$')
    
    enter_msg db 0dh,0ah, "Enter string:", 0dh,0ah, "$"
    output_msg db 0dh,0ah, "Output string:", 0dh,0ah, "$"

    fword_msg db 0dh,0ah, "First word:", 0dh,0ah, "$"
    other_msg db 0dh,0ah, "Other string:", 0dh,0ah, "$"
    
    next_msg db 0dh,0ah, "----Next----", 0dh,0ah, "$"
    stop_msg db 0dh,0ah, "----Stop----", 0dh,0ah, "$"
    blnk_msg db 0dh,0ah, "----Only spaces.not work to do----", 0dh,0ah, "$"
    
    space db ' '    ; знак пробела
    s_end db '$'    ; знак конца строки

.code
start:
    mov ax, @data
    mov ds, ax    

main_loop:
    ; выводим сообщение для ввода строки
    mov ah, 09h
    lea dx, enter_msg
    int 21h

    ; считываем строку из консоли
    mov ah, 0Ah
    lea dx, input_str
    int 21h

    ; проверяем, не была ли введена пустая строка
    cmp byte ptr [input_str+1], 0
    je exit_program     ; если пустая - выходим
    
    ; проверям, есть ли в строке что-то, кроме пробелов
    call check_is_blank
    cmp ax, 0h
    jne only_blank 
    
    ; вызываем подпрограмму логики
    call logic

next:
    ; Выводим сообщение-разделитель итераций работы прграммы
    mov ah, 09h
    lea dx, next_msg
    int 21h
    
    jmp main_loop   ; идём на следующий проход

only_blank:
    ; выводим сообщение о том, что в строке только пробелы
    mov ah, 09h
    lea dx, blnk_msg
    int 21h
    
    jmp next ; идём на след проход main_loop

; подпрограмма проверки на то, есть ли в строке что-то кроме пробелов
; ставит в регистр ax 1-только пробелы, 0-есть и другие символы
check_is_blank proc
    
    ; подготавливаем регистр для индексации исходной строки
    xor di, di
    mov di, 2h
    
    ; ax будем использовать как промежуточный буфер
    xor ax, ax
    
    ; устанавливаем кол-во итераций цикла
    xor cx, cx
    mov cl, [input_str+1]
    
    check_lbody:
        ; проверяем пробел ли это
        mov al, [input_str+di]
        cmp al, space
        jne it_not_space    ; если не пробел
    
    check_loop:
        ; инкреминтируем для след итерации
        inc di
        loop check_lbody
        
        ; если мы тут, то по всей строке уже прошлись, а встретились лишь пробелы
        xor ax, ax
        mov ax, 1h
        ret
        
    it_not_space:
        ; если не пробел - ставим ax в 0 и выходим
        xor ax, ax
        mov ax, 0h
        ret        
    
check_is_blank endp

logic proc
    ; регистром di будем индексировать input_str
    xor di, di
    mov di, 2h
    
    ; регистром si будем индексировать first_word
    xor si, si
    
    ; ax в качестве промежуточного буфера
    xor ax, ax
    
    ; 1. Отсеиваем первые пробелы
    lo_body:
        mov al, [input_str+di] 
        cmp al, space
        jne start_calc_fword ; если символ не пробел
        
        ; на след итерацию если символ оказался пробелом
        inc di
        jmp lo_body
    
    ; 2. Обработка первого слова
    start_calc_fword:
        call fword_copy

        ; выводим сообщение о том, что это первое слово
        mov ah, 09h
        lea dx, fword_msg
        int 21h

        ; выводим первое слово
        mov ah, 09h
        lea dx, first_word
        int 21h

    ; 3. Обработка остальной части строки
    start_calc_other:
        ; +1, так как в input_str+di сейчас пробел
        inc di
        call other_copy
        
        ; выводим сообщение о том, что это other_str
        mov ah, 09h
        lea dx, other_msg
        int 21h

        ; выводим other_str
        mov ah, 09h
        lea dx, other_str
        int 21h
    
    ret ; завершение подпрограммы. возврат в вызывающую программу (main_loop)

logic endp

fword_copy proc

    ; регистром si будем индексировать first_word
    xor si, si
    
    ; ax в качестве промежуточного буфера
    xor ax, ax

    ; копирование первого слова
    f_copy_loop:
        ; если символ пробел - копирование первого слова завершено
        mov al, [input_str+di]
        cmp al, space
        je f_end_copy

        ; иначе - это всё ещё первое слово, копируем его
        mov al, [input_str+di]
        mov byte ptr [first_word+si], al

        ; след итерация копирования
        inc di
        inc si
        jmp f_copy_loop 

    ; когда завершили копирование первого слова    
    f_end_copy:
        ret  ; завершение подпрограммы. возврат в вызывающую программу (logic)  

fword_copy endp
      
      
      
other_copy proc
    ; регистром si будем индексировать other_str
    xor si, si
    
    ; ax в качестве промежуточного буфера
    xor ax, ax
    
    ; утсанавливаем кол-во итераций цикла, чтобы программа не ушла дальше конца строки
    xor cx, cx
    mov cl, [input_str+1]
    sub cx, di
    add cx, 2h

    ; копирование
    o_copy_loop:
        ; копируем
        mov al, [input_str+di]
        mov byte ptr [other_str+si], al
        
    lo_beg:    
        ; след итерация копирования
        inc di
        inc si
        
        loop o_copy_loop 

    ; когда завершили копирование   
    o_end_copy:
        ; добавляем в конец знак конца строки, так как в исходной его может и не быть
        mov al, s_end
        mov byte ptr [other_str+si], al
        ret  ; завершение подпрограммы. возврат в вызывающую программу (logic) 
              
other_copy endp

exit_program:
    ; выводим сообщение о том, что программа завершается
    mov ah, 09h
    lea dx, stop_msg
    int 21h

    mov ah, 4Ch     ; выходим из программы
    int 21h         ; и передаём управление потоком обратно MS DOS

end start
Часть 2. Разработать программу, которая вводит с клавиатуры строку и выводит каждое слово с новой строки.
Код
.model small
.data
    input_str  db 80, ?, 80 dup('$')    ; тут заполняем всю строку знаком конца строки заранее
    word_str   db 80, ?, 80 dup('$')
    
    enter_msg  db 0dh,0ah, "Enter string:", 0dh,0ah, "$"
    output_msg db 0dh,0ah,0dh,0ah, "Words:", 0dh,0ah, "$"

    ln_msg db 0dh,0ah, "$"
    
    next_msg db 0dh,0ah, "----Next----", 0dh,0ah, "$"
    stop_msg db 0dh,0ah, "----Stop----", 0dh,0ah, "$"
    notw_msg db 0dh,0ah, "----not work to do----", 0dh,0ah, "$"
    
    space db ' '    ; знак пробела
    s_end db '$'    ; знак конца строки

.code
start:
    mov ax, @data
    mov ds, ax    

main_loop:
    ; выводим сообщение для ввода строки
    mov ah, 09h
    lea dx, enter_msg
    int 21h

    ; считываем строку из консоли
    mov ah, 0Ah
    lea dx, input_str
    int 21h

    ; проверяем, не была ли введена пустая строка
    cmp byte ptr [input_str+1], 0
    je exit_program     ; если пустая - выходим
    
    ; проверям, есть ли в строке что-то, кроме пробелов
    call check_is_blank
    cmp ax, 0h
    jne only_blank 
    
    ; вызываем подпрограмму логики
    call logic

next:
    ; Выводим сообщение-разделитель итераций работы прграммы
    mov ah, 09h
    lea dx, next_msg
    int 21h
    
    jmp main_loop   ; идём на следующий проход

only_blank:
    ; выводим сообщение о том, что в строке только пробелы
    mov ah, 09h
    lea dx, notw_msg
    int 21h
    
    jmp next ; идём на след проход main_loop

; подпрограмма проверки на то, есть ли в строке что-то кроме пробелов
; ставит в регистр ax 1-только пробелы, 0-есть и другие символы
check_is_blank proc

    ; подготавливаем регистр для индексации исходной строки
    xor di, di
    mov di, 2h
    
    ; ax будем использовать как промежуточный буфер
    xor ax, ax
    
    ; устанавливаем кол-во итераций цикла
    xor cx, cx
    mov cl, [input_str+1]
    
    check_lbody:
        ; проверяем пробел ли это
        mov al, [input_str+di]
        cmp al, space
        jne it_not_space    ; если не пробел
    
    check_loop:
        ; инкреминтируем для след итерации
        inc di
        loop check_lbody
        
        ; если мы тут, то по всей строке уже прошлись, а встретились лишь пробелы
        xor ax, ax
        mov ax, 1h
        ret
        
    it_not_space:
        ; если не пробел - ставим ax в 0 и выходим
        xor ax, ax
        mov ax, 0h
        ret        
    
check_is_blank endp

logic proc
    ; регистром di будем индексировать input_str
    xor di, di
    mov di, 2h
    
    ; ax в качестве промежуточного буфера
    xor ax, ax
    
    ; 0. Выводим сообщение о том, что дальше идёт результат
    mov ah, 09h
    lea dx, output_msg
    int 21h

    ; 1. Отсеиваем первые пробелы
    lo_body:
        mov al, [input_str+di] 
        cmp al, space
        jne calc ; если символ не пробел
        
        ; на след итерацию если символ оказался пробелом
        inc di
        jmp lo_body

    ; 2. Обработка слов
    calc:
        call word_copy

        ; выводим знак переноса строки
        mov ah, 09h
        lea dx, ln_msg
        int 21h

        ; выводим слово
        mov ah, 09h
        lea dx, word_str
        int 21h
    
        ; будем использовать регистр bx для уточнения, закончили ли мы проходиться по всей строке
        xor bx, bx
        mov bx, di

        sub bx, 2
        
        cmp [input_str+1], bl
        ja lo_body       ; если нет -> идём на след итерацию

    ret ; завершение подпрограммы. возврат в вызывающую программу (main_loop)

logic endp

word_copy proc

    ; регистром si будем индексировать word_str
    xor si, si
    
    ; ax в качестве промежуточного буфера
    xor ax, ax

    ; копирование слова
    copy_loop:
        ; если символ пробел - копирование слова завершено
        mov al, [input_str+di]
        cmp al, space
        je end_copy
        
        ; проверка на то, дошли ли мы до конца исходной строки
        xor bx, bx
        mov bx, di
        sub bx, 2
        cmp [input_str+1], bl
        jbe end_copy

        ; иначе - это всё ещё слово, копируем его
        mov al, [input_str+di]
        mov byte ptr [word_str+si], al

        ; след итерация копирования
        inc di
        inc si
        jmp copy_loop 

    ; когда завершили копирование слова    
    end_copy:
        mov al, s_end
        mov byte ptr [word_str+si], al 
        ret  ; завершение подпрограммы. возврат в вызывающую программу (logic)  

word_copy endp


exit_program:
    ; выводим сообщение о том, что программа завершается
    mov ah, 09h
    lea dx, stop_msg
    int 21h

    mov ah, 4Ch     ; выходим из программы
    int 21h         ; и передаём управление потоком обратно MS DOS

end start

Вариант 2.

Часть 1. Разработать две подпрограммы, одна из которых преобразует любую заданную букву в заглавную (в том числе для русских букв), а другая преобразует букву в строчную.
Код
.model small
.data
  letter db 2, ?, dup('$')
  option db 2, ?, dup('$')
  buffer db 80, ?, dup('$') 
  
  menu_top db 0B0h, 0B0h, 0B1h, 0B1h, 0B1h, 0B2h, 0B2h, 0B2h, " Supa Menu ", 0B2h, 0B2h, 0B2h, 0B1h, 0B1h, 0B1h, 0B0h, 0B0h, "$"
  menu_option_hint db 0Ah, 0Ah, 0Dh, " Type 1 or 2 for select: $",
  menu_option_one db 0Ah, 0Dh, "   [1] - for make low case letter $",
  menu_option_two db 0Ah, 0Dh, "   [2] - for make HIGH case letter $",             
  menu_select_option db 0Ah, 0Ah, 0Dh, 5Bh, 0Ch, 7Ch, 0Bh, 5Dh, ' Select: $'
  menu_input_letter db 0Ah, 0Dh, 5Bh, 0Ch, 7Ch, 0Bh, 5Dh, ' Input letter: $'
  menu_output db 0Ah, 0Dh, 5Bh, 03h, 5Dh, ' Output: $'
  menu_interept db 0Ah, 0Dh, ' Please press any key to continue: $'
        

.code
  mov ax, @data    
  mov ds, ax
  
  jmp menu
           


menu:
     
  xor ax, ax  ; clear
  
  MOV AH, 0
  MOV AL, 3 
  INT 10H    


  xor ax, ax  ; clear
  
  ; output
  lea dx, menu_top
  mov ah, 09h    ; view data into screan
  int 21h        ; inerapt
  
  lea dx, menu_option_hint
  mov ah, 09h   
  int 21h        
  
  lea dx, menu_option_one
  mov ah, 09h    
  int 21h
  
  lea dx, menu_option_two
  mov ah, 09h    
  int 21h           
  
  lea dx, menu_select_option
  mov ah, 09h    
  int 21h        
  
  ; ask stdin
  lea dx, option
  mov ah, 0Ah
  int 21h
  mov [option + 3], 24h
  
  lea dx, menu_input_letter
  mov ah, 09h    
  int 21h        
  
  ; ask stdin
  lea dx, letter
  mov ah, 0Ah
  int 21h
  mov [letter + 3], 24h

  cmp [option + 2], 31h
  je sub1
  
  cmp [option + 2], 32h
  je sub2
  
  cmp [option + 2], 24h
  je jmp exit
  
  cont:     
      lea dx, menu_interept
      mov ah, 09h
      int 21h
      
      ; ask stdin
  
      lea dx, buffer
      mov ah, 0Ah
      int 21h 
      
      jmp menu

sub2:
  
  sub [letter + 2], 32
  
  
  ; finally
  lea dx, menu_output
  mov ah, 09h
  int 21h
  
  lea dx, letter + 2
  mov ah, 09h
  int 21h
  
  jmp cont


sub1:
  add [letter + 2], 32
  
  
  ; finally
  lea dx, menu_output
  mov ah, 09h
  int 21h
  
  lea dx, letter + 2
  mov ah, 09h
  int 21h
  
  jmp cont 


exit:
  mov ah, 4Ch    
  int 21h         
end
Часть 2. Разработать программу, которая вводит с клавиатуры строку и замещает первые буквы всех слов заглавными, а остальные строчными буквами.
Код
.model small
.data
  str1 db 80, ?, 80 dup ("$")        
  msg1 db 5Bh, 0Ch, 7Ch, 0Bh, 5Dh, ' Input string: $'
  msg2 db 0Dh, 0Ah, 5Bh, 03h, 5Dh, ' Output: $'
  is_start_word db 1h       

.code
  mov ax, @data    
  mov ds, ax

  ; ask input (stdout)
  lea dx, msg1
  mov ah, 09h    ; view data into screan
  int 21h        ; inerapt

  ; ask stdin
  lea dx, str1
  mov ah, 0Ah
  int 21h


  xor ax, ax  ; clear
  
  lea di, str1 + 2 ; pointer    
  xor cx, cx  ; counter

  ; load string length into CX
  mov cl, [str1 + 1] ; str + 1 -> len of str in 2 byte  
  mov ch, 0

beg:
  ; if [di] == space then lo
  cmp [di], 20h 
  je lo
  
  ; if is_start_word == 0 then lo
  cmp is_start_word, 0 
  je cool_block
  
  
  cmp [di], 91
  jb cool_block
  
  cmp [di], 123
  jge cool_block
  
  cmp [di], 97
  jbe cool_block
  
     
  sub [di], 32
  
  jmp cool_block 
  
cool_block:
  ; is_start_word = 0
  mov is_start_word, 0
  
  ; if [di + 1] != space then lo
  cmp [di + 1], 20h
  jne lo 
  
  ; is_start_word = 1
  mov is_start_word, 1
  
  

lo:
  ; loop
  inc di
  loop beg

next:
  ; finally
  lea dx, msg2
  mov ah, 09h
  int 21h
  
  ; finally
  lea dx, str1 + 2
  mov ah, 09h
  int 21h
  


exit:
  mov ah, 4Ch    
  int 21h         
end