Заменить все латинские символы «а» на символы «А» во введенной строке - Assembler
Формулировка задачи:
здравствуйте. помогите разработать программу, ввода строковых данных с клавиатуры.
Нужно произвести замену всех латинских символов «а» на символ «А».
Решение задачи: «Заменить все латинские символы «а» на символы «А» во введенной строке»
textual
Листинг программы
.model small .8086 .data msg db 50,0,50 dup (?) .stack 128 .code start: mov ax,@data mov ds,ax mov es,ax mov ah,0Ah lea dx,msg int 21h mov al,'a' lea di,msg+2 xor ch,ch mov cl,byte ptr [msg+1] inc cx action: repne scasb or cx,cx jz exit and byte ptr msg[di-1],11011111b jmp action exit: mov ah,4Ch mov al,00h int 21h end start
Объяснение кода листинга программы
Выполняемый код заменяет все латинские символы a
на символы A
во введенной строке. Вот список действий, которые происходят в коде:
- Код начинается с сегмента .model small.8086, который определяет сегментный режим процессора и сегмент данных.
- Следующий сегмент .data определяет сегмент данных.
- Переменная msg db 50,0,50 dup (?) инициализирует строку со 100 символами, включая символ
?
. - Следующий сегмент .stack 128 определяет сегмент стека.
- Код в сегменте .code начинается с метки start.
- Действие mov ax,@data перемещает сегмент данных в регистр ax.
- Действие mov ds,ax устанавливает сегмент данных равным сегменту, который находится в регистре ax.
- Действие mov es,ax устанавливает сегмент стека равным сегменту, который находится в регистре ax.
- Действие mov ah,0Ah устанавливает код функции в регистре ah равным 0Ah, что является кодом функции вывода символа.
- Действие lea dx,msg перемещает адрес строки msg в регистр dx.
- Действие int 21h выводит первый символ из строки msg на экран.
- Действие mov al,'a' устанавливает значение регистра al равным символу
a
. - Действие lea di,msg+2 устанавливает начальный адрес строки msg+2 в регистр di.
- Действие xor ch,ch устанавливает значения регистра ch и cl в 0.
- Действие mov cl,byte ptr [msg+1] устанавливает значение регистра cl равным значению байта, который находится по адресу msg+1.
- Действие inc cx увеличивает значение регистра cx на 1.
- Действие repne scasb выполняет повторяемое чтение-запись, сравнивая байты, начиная с адреса di, со значением регистра al.
- Действие or cx,cx выполняет логическое ИЛИ между значениями регистра cx и cx, что приводит к установке флага CF в 1, если cx не равно 0.
- Действие jz exit выполняет переход на метку exit, если флаг CF равен 1.
- Действие and byte ptr msg[di-1],11011111b устанавливает значение байта, который находится по адресу msg[di-1], в 0, за исключением последнего бита, который остается равным 1.
- Действие jmp action выполняет переход на метку action.
- Действие exit: выполняет последовательность действий, описанных в сегменте .code после метки exit.
- Выполняется последовательность действий, описанных в сегменте .code после метки start.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д