Преобразовать текст, превратив строчные буквы в заглавные, а заглавные в строчные - Assembler

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

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

Дана последовательность заглавных и строчных латинских букв (строка текста). Преобразовать текст, превратив строчные буквы в заглавные, а заглавные в строчные. Вывести обе строки на экран. Помогите пожалуйста. Если получиться то распишите подробно действия, я просто только новичок

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

textual
Листинг программы
; fasm code...
; строчные в заглавные, а заглавные в строчные.
 
org 100h
jmp start
 
mes0   db   13,10,'fghdjGFDEVCB jghfkidlsgGGFDS GHCBVKDHSH tyghfbdj','$'
len    =    ($ - mes0)-3   ; длина строки без 13,10,'$'
 
start: mov   ah,9          ; выводим текущую строку
       mov   dx,mes0       ;
       int   21h           ;
 
       mov   si,mes0+2     ; адрес источника
       mov   di,si         ; он-же приёмник
       mov   cx,len        ; длина строки
kLoop: lodsb               ; берём байт из SI
       cmp   al,' '        ; пробелы не трогаем
       je    fuck          ;
       xor   al,20h        ; у остальных ксорим бит(5)
fuck:  stosb               ; сохраняем изменения
       loop  kLoop         ; мотаем цикл СХ-раз..
 
       mov   ah,9          ; выводим изменённыю строку
       mov   dx,mes0       ;
       int   21h           ;
 
exit:  xor   ax,ax         ; ждём клавишу..
       int   16h           ;
       int   20h           ; выход!

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

Выделила для вас основные этапы работы кода в виде нумерованного списка:

  1. Объявление переменной mes0, которая содержит исходную строку.
  2. Расчёт длины строки (len) без учёта символов 13, 10 и '$'.
  3. Начало выполнения программы (jmp start).
  4. Вывод исходной строки (mov ah,9; mov dx,mes0; int 21h).
  5. Начало цикла kLoop.
  6. Считывание байта из регистра SI.
  7. Проверка: является ли текущий байт пробелом?
  8. Если текущий байт — пробел, то переход к операции stosb.
  9. Если текущий байт не является пробелом, то изменение его регистра (xor al,20h).
  10. Сохранение изменённого символа в регистре SI (stosb).
  11. Выполнение цикла kLoop до тех пор, пока не будет выполнено условие выхода из цикла (cx равна len).
  12. Вывод изменённой строки (mov ah,9; mov dx,mes0; int 21h).
  13. Вход в бесконечный цикл (while), ожидая нажатия клавиши.
  14. Выход из программы (int 16h; int 20h).

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


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

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

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