Заменить все латинские символы «а» на символы «А» во введенной строке - 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 во введенной строке. Вот список действий, которые происходят в коде:

  1. Код начинается с сегмента .model small.8086, который определяет сегментный режим процессора и сегмент данных.
  2. Следующий сегмент .data определяет сегмент данных.
  3. Переменная msg db 50,0,50 dup (?) инициализирует строку со 100 символами, включая символ ?.
  4. Следующий сегмент .stack 128 определяет сегмент стека.
  5. Код в сегменте .code начинается с метки start.
  6. Действие mov ax,@data перемещает сегмент данных в регистр ax.
  7. Действие mov ds,ax устанавливает сегмент данных равным сегменту, который находится в регистре ax.
  8. Действие mov es,ax устанавливает сегмент стека равным сегменту, который находится в регистре ax.
  9. Действие mov ah,0Ah устанавливает код функции в регистре ah равным 0Ah, что является кодом функции вывода символа.
  10. Действие lea dx,msg перемещает адрес строки msg в регистр dx.
  11. Действие int 21h выводит первый символ из строки msg на экран.
  12. Действие mov al,'a' устанавливает значение регистра al равным символу a.
  13. Действие lea di,msg+2 устанавливает начальный адрес строки msg+2 в регистр di.
  14. Действие xor ch,ch устанавливает значения регистра ch и cl в 0.
  15. Действие mov cl,byte ptr [msg+1] устанавливает значение регистра cl равным значению байта, который находится по адресу msg+1.
  16. Действие inc cx увеличивает значение регистра cx на 1.
  17. Действие repne scasb выполняет повторяемое чтение-запись, сравнивая байты, начиная с адреса di, со значением регистра al.
  18. Действие or cx,cx выполняет логическое ИЛИ между значениями регистра cx и cx, что приводит к установке флага CF в 1, если cx не равно 0.
  19. Действие jz exit выполняет переход на метку exit, если флаг CF равен 1.
  20. Действие and byte ptr msg[di-1],11011111b устанавливает значение байта, который находится по адресу msg[di-1], в 0, за исключением последнего бита, который остается равным 1.
  21. Действие jmp action выполняет переход на метку action.
  22. Действие exit: выполняет последовательность действий, описанных в сегменте .code после метки exit.
  23. Выполняется последовательность действий, описанных в сегменте .code после метки start.

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


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

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

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