Перевод из прописных в строчные буквы - Assembler

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

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

написать программу для перевода латинских букв в строчные. фраза вводится с текстового файла и выводится на экран. по-сути, реализовал программу для перевода букв. но как брать эти буквы из файла? буду рад помощи
Листинг программы
  1. .model small
  2. .DATA
  3. MYTEXT DB 'EVGENIY',13,10,'$'
  4. szMyText = $ - MYTEXT
  5. DATASG ENDS
  6. .STACK
  7. .CODE
  8. BEGIN:
  9. MOV AX,@DATA
  10. MOV DS,AX
  11. LEA si,MYTEXT
  12. MOV CX,szMyText
  13. MT1: lodsb
  14. CMP al,41H
  15. JB MT2
  16. CMP al,5AH
  17. JA MT2
  18. CALL COR
  19. MT2: int 29h
  20. LOOP MT1
  21. mov ax, 4C00h
  22. int 21h
  23. COR: add al, 20h
  24. mov [si-1], al
  25. RET
  26. END BEGIN

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

textual
Листинг программы
  1. .model small
  2. .386
  3.  
  4. .data
  5. filename db 'abc.txt',0
  6. hnd dw ?
  7. buf db 255 dup(0)
  8. str1 db 'open error!$'
  9. str2 db 'read error!$'
  10. str3 db 'close error!$'
  11.      
  12. .stack 100h
  13.      
  14. .code
  15. begin:
  16. mov ax,@data
  17. mov ds,ax
  18.  
  19. mov ah,3Dh  ;функция открытия файла
  20. mov al,00h  ;режим чтения
  21. mov dx,offset filename ;адрес начала имени файла
  22. int 21h     ;прерывание MS-DOS
  23. jc openerr  ;если файл не открылся
  24.  
  25. mov hnd,ax  ;если открылся запоминаем дескриптор
  26.  
  27. mov ah,3Fh  ;функция чтения из файла
  28. mov bx,hnd  ;дескриптор открытого файла
  29. mov cx,0FFh ;число байт для считывания
  30. lea dx,buf  ;адрес буфера для считывания
  31. int 21h     ;прерывание MS-DOS
  32. jc readerr  ;если файл не прочитан
  33.  
  34. mov cx,ax   ;если прочитано, то запоминаем количество прочитанных байт
  35.  
  36. mov ah,3Eh  ;функция закрытия файла
  37. mov bx,hnd  ;дескриптор файла
  38. int 21h     ;прерывание MS-DOS
  39. jc closeerr ;если файл не закрылся
  40.  
  41. jmp done
  42.  
  43. openerr:
  44. mov ah,09h
  45. lea dx,str1
  46. int 21h
  47.  
  48. jmp exit
  49.  
  50. readerr:
  51. mov ah,09h
  52. lea dx,str2
  53. int 21h
  54.  
  55. jmp exit
  56.  
  57. closeerr:
  58. mov ah,09h
  59. lea dx,str3
  60. int 21h
  61.  
  62. jmp exit
  63.  
  64. done:
  65. lea si,buf
  66. mt1:  
  67. lodsb
  68.  
  69. cmp al,41h  
  70. jb mt2
  71. cmp al,5Ah
  72. ja mt2
  73.  
  74. add al,20h
  75. mov [si-1],al
  76.  
  77. mt2:  
  78. int 29h
  79. loop mt1
  80.  
  81. exit:  
  82. mov ah,4Ch
  83. mov al,00h
  84. int 21h
  85. end begin

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

Этот код на языке Assembler выполняет следующие действия:

  1. Открывает файл с помощью функции int 21h/3Dh (переменная hnd используется для хранения дескриптора файла).
  2. Читает файл с помощью функции int 21h/3Fh (переменная cx изначально установлена в максимальное значение, что позволяет прочитать весь файл за одну операцию).
  3. Закрывает файл с помощью функции int 21h/3Eh.
  4. Переводит файл в нижний регистр с помощью цикла mt1-mt2. Цикл выполняется до тех пор, пока не будет достигнут конец строки (переменная buf содержит байты из файла, прочитанные в пункте 2).
  5. Выводит сообщение об ошибке при необходимости с помощью функции int 21h/09h и переменной str1, str2 или str3.
  6. Завершает программу с помощью функции int 21h/4Ch. Обратите внимание, что в этом коде нет обработки ошибок, связанных с нехваткой памяти или других ресурсов.

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


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

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

13   голосов , оценка 4.308 из 5

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

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

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