Преобразовать мтроку в строку с пробелами между буквами - Assembler

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

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

Всем привет! Задана строка из смеси русских строчных и заглавных букв. Преобразовать её в строку с пробелами между буквами. Составить программу для создания в дальнейшем .EXE и .COM файлов и выводящую на экран исходную и преобразованную строки. Кодовая страница cp-866. На паскале написал, а ассемблер не очень знаю:
    Var s:string;
    i:byte;
Begin
    write('Введите строку: ');readln(s);
    For i:=Length(s) downto 1 do
     Insert(' ',s,i+1);
    writeln('Полученная строка: ',s);
    readln;
End.

Решение задачи: «Преобразовать мтроку в строку с пробелами между буквами»

textual
Листинг программы
; masm dos com #
.286
.model tiny
.code
org 100h
start:  mov ax,3
    int 10h
    mov ah,9
    mov dx,offset mes1
    int 21h
    mov ah,0Ah
    mov dx,offset buff
    int 21h
    mov ch,0
    mov cl,buff+1
    mov si,offset buff+2
    mov di,offset dest
    mov ah,' '
a1: lodsb
    stosw
    loop a1
    mov ah,9
    mov dx,offset mes2
    int 21h
    mov ah,0
    int 16h
    ret
mes1 db 'Введи строку и нажми на Enter',0Dh,0Ah,'$'
mes2 db 0Dh,0Ah,'Полученная строка: '
dest db 255 dup('$')
buff db 255,?,255 dup(?)
end start

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

Вывод:

  1. Программа начинается с движения в регистр AX числа 3 и последующего вызова функции 10h, которая выводит это число (вероятно, это заголовок строки).
  2. Затем программа движет в регистр AH число 9 и выводит строку, используя функцию 21h (возможно, это команда вывода строки).
  3. Далее программа устанавливает регистр AH равным 0Ah (для перевода регистра CL в верхний регистр) и записывает в регистр DX адрес буфера.
  4. Используя цикл loop, программа заполняет буфер символами из строки, используя функцию lodsb для загрузки следующего символа и stosw для записи символа в буфер.
  5. После завершения цикла программа выводит строку, используя функцию 21h.
  6. Затем программа выводит два символа возврата каретки (0Dh, 0Ah), чтобы перейти на новую строку.
  7. В конце программа возвращает управление с помощью функции ret. Обозначения:
  8. mes1 - строка Введи строку и нажми на Enter\r\n
  9. mes2 - строка \r\nПолученная строка:
  10. dest - буфер для хранения преобразованной строки
  11. buff - буфер для временного хранения символов строки Значения переменных:
  12. Регистр AX содержит число 3.
  13. Регистр DX содержит адрес буфера.
  14. Регистр CL содержит символ, следующий за последним символом в буфере.
  15. Регистр SI содержит адрес следующей позиции в буфере.
  16. Регистр DI содержит адрес следующей позиции в буфере dest.
  17. Регистр AH содержит число 9.
  18. Регистр AL содержит номер регистра CL.
  19. Переменная dest содержит пустую строку (``).
  20. Переменная buff содержит пустую строку (``).
  21. Переменная mes1 содержит строку Введи строку и нажми на Enter\r\n.
  22. Переменная mes2 содержит строку \r\nПолученная строка:.
  23. Число 255 в переменной dest представляет максимальную длину строки, которую можно сохранить в буфере.
  24. Символ $ в переменной dest используется как заполнитель для пустых ячеек буфера.
  25. Число 0Dh представляет символ возврата каретки.
  26. Число 0Ah представляет символ перевода строки.
  27. Функция 10h используется для вывода чисел.
  28. Функция 21h используется для вывода строк.
  29. Функция 0Ah используется для преобразования регистра CL в верхний регистр.
  30. Функция lodsb используется для загрузки следующего символа из строки в регистр CL.
  31. Функция stosw используется для записи символа из регистра CL в буфер.

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


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

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

10   голосов , оценка 4.2 из 5
Похожие ответы