Удаление удвоенных букв в словах - Assembler

Узнай цену своей работы

Формулировка задачи:

удалить удвоенные буквы в словах

Решение задачи: «Удаление удвоенных букв в словах»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         CrLf    db      0Dh, 0Ah, '$'
  9.         String  db      'Direct connection of a fuel valve to terminal 20 is only permitted', '$'
  10.         Len     dw      $-String
  11. .code
  12.  
  13. main    proc
  14.         mov     ax,     @data
  15.         mov     ds,     ax
  16.         mov     ah,     09h
  17.         ;вывод исходной строки
  18.         lea     dx,     String
  19.         int     21h
  20.         mov     ah,     09h
  21.         lea     dx,     CrLf
  22.         int     21h
  23.  
  24.         ;настройка сегментного регистра es для строковых команд
  25.         mov     ax,     ds
  26.         mov     es,     ax
  27.  
  28.         cld                     ;направление строковых команд - вперёд
  29.         lea     si,     String  ;адрес строки
  30.         inc     si              ;просмотр строки со 2-го символа
  31.         mov     di,     si
  32.         mov     cx,     Len     ;длина строки
  33.         jcxz    @@Result
  34.         dec     cx
  35.         jcxz    @@Result
  36.         mov     Len,    1
  37. @@For:
  38.         lodsb
  39.         cmp     al,     [si-2]
  40.         je      @@Next
  41.         stosb
  42.         inc     Len
  43. @@Next:
  44.         loop    @@For
  45.  
  46. @@Result:
  47.         mov     ah,     09h
  48.         lea     dx,     String
  49.         int     21h
  50.         mov     ah,     09h
  51.         lea     dx,     CrLf
  52.         int     21h
  53.  
  54.         mov     ax,     4C00h
  55.         int     21h
  56. main    endp
  57.  
  58. end     main

Объяснение кода листинга программы

  1. Создание переменных:
    • CrLf db 0Dh, 0Ah, '$' (переменная для сохранения последовательности символов перевода строки)
    • String db 'Direct connection of a fuel valve to terminal 20 is only permitted', '$' (переменная для хранения строки)
    • Len dw $-String (переменная для хранения длины строки)
  2. Настройка сегментов:
    • mov ax, @data (загрузка адреса сегмента данных в регистр ax)
    • mov ds, ax (передача адреса сегмента данных из ax в ds)
  3. Вывод исходной строки:
    • mov ah, 09h (установка функции вывода строки для прерывания 21h)
    • lea dx, String (загрузка адреса строки в регистр dx)
    • int 21h (вызов прерывания для вывода строки)
  4. Редактирование строки:
    • cld (установка направления строковых команд вперед)
    • lea si, String (загрузка адреса строки в регистр si)
    • inc si (переход ко 2-му символу строки)
    • mov di, si (копирование si в di)
    • mov cx, Len (загрузка длины строки в регистр cx)
    • jcxz @@Result (пропуск обработки, если длина строки равна нулю)
    • dec cx (уменьшение cx на 1)
    • jcxz @@Result (пропуск обработки, если длина строки равна 1)
    • mov Len, 1 (установка длины строки в 1)
  5. Цикл просмотра строки:
    • lodsb (загрузка байта данных из ds:si в al и увеличение si на 1)
    • cmp al, [si-2] (сравнение текущего символа с предыдущим)
    • je @@Next (переход к метке @@Next, если символы одинаковые)
    • stosb (сохранение al в es:di и увеличение di на 1)
    • inc Len (увеличение длины на 1)
  6. Повторение цикла, если длина строки не равна 0:
    • loop @@For (уменьшение cx на 1 и переход к метке @@For, если cx не равен 0)
  7. Вывод результирующей строки:
    • mov ah, 09h (установка функции вывода строки для прерывания 21h)
    • lea dx, String (загрузка адреса строки в регистр dx)
    • int 21h (вызов прерывания для вывода строки)
  8. Завершение программы:
    • mov ax, 4C00h (загрузка значения для завершения программы)
    • int 21h (вызов прерывания для завершения программы)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы