Преобразовать мтроку в строку с пробелами между буквами - 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
Объяснение кода листинга программы
Вывод:
- Программа начинается с движения в регистр AX числа 3 и последующего вызова функции 10h, которая выводит это число (вероятно, это заголовок строки).
- Затем программа движет в регистр AH число 9 и выводит строку, используя функцию 21h (возможно, это команда вывода строки).
- Далее программа устанавливает регистр AH равным 0Ah (для перевода регистра CL в верхний регистр) и записывает в регистр DX адрес буфера.
- Используя цикл loop, программа заполняет буфер символами из строки, используя функцию lodsb для загрузки следующего символа и stosw для записи символа в буфер.
- После завершения цикла программа выводит строку, используя функцию 21h.
- Затем программа выводит два символа возврата каретки (0Dh, 0Ah), чтобы перейти на новую строку.
- В конце программа возвращает управление с помощью функции ret. Обозначения:
- mes1 - строка
Введи строку и нажми на Enter\r\n
- mes2 - строка
\r\nПолученная строка:
- dest - буфер для хранения преобразованной строки
- buff - буфер для временного хранения символов строки Значения переменных:
- Регистр AX содержит число 3.
- Регистр DX содержит адрес буфера.
- Регистр CL содержит символ, следующий за последним символом в буфере.
- Регистр SI содержит адрес следующей позиции в буфере.
- Регистр DI содержит адрес следующей позиции в буфере dest.
- Регистр AH содержит число 9.
- Регистр AL содержит номер регистра CL.
- Переменная dest содержит пустую строку (``).
- Переменная buff содержит пустую строку (``).
- Переменная mes1 содержит строку
Введи строку и нажми на Enter\r\n
. - Переменная mes2 содержит строку
\r\nПолученная строка:
. - Число 255 в переменной dest представляет максимальную длину строки, которую можно сохранить в буфере.
- Символ
$
в переменной dest используется как заполнитель для пустых ячеек буфера. - Число 0Dh представляет символ возврата каретки.
- Число 0Ah представляет символ перевода строки.
- Функция 10h используется для вывода чисел.
- Функция 21h используется для вывода строк.
- Функция 0Ah используется для преобразования регистра CL в верхний регистр.
- Функция lodsb используется для загрузки следующего символа из строки в регистр CL.
- Функция stosw используется для записи символа из регистра CL в буфер.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д