)Упростить программу перевода введенных символов в нижний регистр - Assembler

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

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

Есть рабочая программа на Tasm. Нужно упростить. Помогите кодом)
Листинг программы
  1. .model small
  2. .data ; В этом сегменте следует размещать переменные памяти
  3. message1 db 13,10,"Enter string: $"
  4. message2 db 13,10,"Result string: $"
  5. crlf db 0Dh,0Ah,'$'
  6. bufferMax db 121; максимальная длина вводимой строки
  7. bufferSize db ?; длина введенной строки (под переменную просто резервируется место в памяти)
  8. buffer db 121 dup(?); сама строка
  9. .stack 128 ; определяет стек размером в 128h
  10. .code ; Директива .CODE отмечает начало сегмента кода
  11. start:
  12. mov ax, @data ; Настраиваем сегментные регистры
  13. mov ds, ax
  14. mov es, ax
  15. ; - - - -выводим сообщение
  16. mov dx,offset message1 ; DX указывает на смещение message1 в сегменте .DATA
  17. mov ah,9 ; номер функции DOS печати строки
  18. int 21h ; прерывание
  19. ; - - - -вводим строку
  20. mov dx,offset bufferMax ; DX указывает на смещение bufferMax в сегменте .DATA
  21. mov ah,0Ah ; функция ввода строки с клавиатуры
  22. int 21h ; прерывание
  23. ; - - - -выводим сообщение
  24. mov dx,offset message2 ; DX указывает на смещение message2 в сегменте .DATA
  25. mov ah,9 ; номер функции DOS печати строки
  26. int 21h ; прерывание
  27. ; - - - -считываем длину строки
  28. cld ; Команда CLD производит сброс флага направления в регистре флагов
  29. mov si,offset bufferSize ; адрес буфера
  30. lodsb ; Загрузить символ
  31. mov cl,al ; для вывода
  32. xor ch,ch ; ch=0
  33. ; - - - -для строковых команд
  34. push si ; положить в стек
  35. pop di ; извлечь из стека
  36. ; - - - -цикл замены
  37. control:
  38. lodsb ; Загрузить символ
  39. ; - - - -проверяем прописные буквы
  40. cmp al,'A'; команда сравнения
  41. jb noChange ; меньше - переход
  42. ; в противном случае выполняется следующая команда.
  43. cmp al,'Z'; ; команда сравнения
  44. jg noChange ; Переход, если больше
  45. or al,00100000b ; операция логического сложения
  46. jmp short noChange ; команда безусловного перехода 8-битовое смещение
  47. ; - - - -записываем новый символ
  48. noChange:
  49. stosb ; загружает регистр al в память
  50. loop control ; переход на метку
  51. ; - - - -выводим результат
  52. mov al,'$' ;
  53. stosb ; загружает регистр al в память
  54. mov dx,offset buffer ; адрес буфера
  55. mov ah,09h ; Функция DOS 09h вывода на экран
  56. int 21h ; прерывание
  57. ; - - - -выход
  58. mov ah,4ch ; вызвать DOS для завершения программы
  59. int 21h ; прерывание
  60. ; - - -
  61. end start

Решение задачи: «)Упростить программу перевода введенных символов в нижний регистр»

textual
Листинг программы
  1. .model small
  2.  
  3. .data
  4. message1 db 13,10,'Enter string: $'
  5. message2 db 13,10,'Result string: $'  
  6. buffermax db 121
  7. buffersize db 0
  8. buffer db 121 dup(?)
  9.  
  10. .stack 128
  11.  
  12. .code
  13. start:
  14. mov ax,@data
  15. mov ds,ax
  16. mov es,ax
  17.  
  18. mov ah,09h
  19. mov dx,offset message1
  20. int 21h
  21.    
  22. mov ah,0Ah 
  23. mov dx,offset buffermax
  24. int 21h
  25.  
  26. mov ah,09h
  27. mov dx,offset message2
  28. int 21h
  29.  
  30. cld
  31. mov si,offset buffer
  32. xor ch,ch
  33. mov cl,buffersize
  34.  
  35. push si
  36. pop di
  37.  
  38. control:
  39. lodsb
  40.  
  41. cmp al,'A'
  42. jb nochange
  43. cmp al,'Z'
  44. ja nochange
  45.  
  46. or al,100000b
  47.  
  48. nochange:
  49. stosb
  50. loop control
  51.  
  52. mov al,'$'
  53. stosb
  54.  
  55. mov ah,09h
  56. mov dx,offset buffer
  57. int 21h
  58.  
  59. mov ah,4Ch
  60. mov al,00h
  61. int 21h  
  62. end start

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


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

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

14   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы