Из больших букв в маленькие - Assembler

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

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

Вот есть программа которая делает из маленьких большие:
model tiny 
.code
.startup
     mov dx, offset Sos ; устанавливаем указатель на строку
     mov ah,0Ah 
     int 21h ; введение строки
 
     mov cx,[bx + 1] ; указываем счетчик 
  lst: ; початок циклу   
     mov di,cx
      cmp Sos[di+1],60h ; проверка или буква маленькая
      jl next ; если буква большая - идем дальше
      sub Sos[di+1],20h ; если маленькая - меняем ее
   next:
      loop lst ; переход на начало цикла
      mov dx, offset Sos + 2 ; конец цикла, установить указатель на строку
      mov ah,9
      int 21h ; вывод сроки
      ret
   Sos     db 20 dup($) ; переменная-строка
      end
Нужно переделать программу на оборот из больших в маленькие, мой вариант:
model tiny 
.code
.startup
  mov dx, offset Sos 
  mov ah,0Ah 
  int 21h 
  mov ah,0
  mov bx,dx
  mov cx,[bx + 1]
  lst: 
    mov di,cx
    сmp Sos[di+1],41h 
    jl next 
    add Sos[di+1],20h
    next:
    loop lst
  mov dx, offset Sos + 2 
  mov ah,09h
  int 21h 
  
      ret
 
  Sos db 20 dup("$") ; 
      
end
Оно вроде большие буквы меняет на маленькие, но маленькие меняет на какие-то каракули.

Решение задачи: «Из больших букв в маленькие»

textual
Листинг программы
.model tiny 
.code
.startup
     mov dx, offset Sos ; устанавливаем указатель на строку
     mov ah,0Ah 
     int 21h ; введение строки
 
     mov cx,[bx + 1] ; указываем счетчик 
  lst: ; початок циклу   
     mov di,cx
      cmp Sos[di+1], 'A'
      jl next
      cmp Sos[di+1], 'Z' ; проверка или буква маленькая
      ja next ; если буква большая - идем дальше
      add Sos[di+1],20h ; если маленькая - меняем ее
   next:
      loop lst ; переход на начало цикла
      mov dx, offset Sos + 2 ; конец цикла, установить указатель на строку
      mov ah,9
      int 21h ; вывод сроки
      ret
   Sos     db 20 dup('$') ; переменная-строка
      end

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

  1. Устанавливаем указатель на строку, используя регистр dx, и выбираем регистр ah равным 0Ah. Делаем ввод строки с помощью команды int 21h.
  2. Устанавливаем счетчик cx, используя [bx + 1].
  3. Начало цикла: a. Устанавливаем указатель на счетчик cx, используя регистр di. b. Проверяем, является ли текущий символ в строке Sos большим. Если это так, переходим к следующему символу. c. Если текущий символ меньше или равен 'A', то это маленькая буква. Добавляем 20 к текущему символу. d. Возвращаемся в начало цикла, используя команду loop.
  4. Конец цикла: a. Устанавливаем указатель на строку Sos, смещаясь на 2 байта вперед, используя регистры dx и bx. b. Выводим строку Sos, используя команду int 21h с регистром ah равным 9.
  5. Завершаем программу, используя команду ret.
  6. Переменная-строка Sos содержит 20 символов '$'.

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


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

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

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