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

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

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

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

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

textual
Листинг программы
.model small
.386
 
.data
filename db 'abc.txt',0
hnd dw ?
buf db 255 dup(0)
str1 db 'open error!$'
str2 db 'read error!$'
str3 db 'close error!$'
      
.stack 100h
      
.code
begin:
mov ax,@data
mov ds,ax
 
mov ah,3Dh  ;функция открытия файла
mov al,00h  ;режим чтения
mov dx,offset filename ;адрес начала имени файла
int 21h     ;прерывание MS-DOS
jc openerr  ;если файл не открылся
 
mov hnd,ax  ;если открылся запоминаем дескриптор
 
mov ah,3Fh  ;функция чтения из файла
mov bx,hnd  ;дескриптор открытого файла
mov cx,0FFh ;число байт для считывания
lea dx,buf  ;адрес буфера для считывания
int 21h     ;прерывание MS-DOS
jc readerr  ;если файл не прочитан
 
mov cx,ax   ;если прочитано, то запоминаем количество прочитанных байт
 
mov ah,3Eh  ;функция закрытия файла
mov bx,hnd  ;дескриптор файла
int 21h     ;прерывание MS-DOS
jc closeerr ;если файл не закрылся
 
jmp done
 
openerr:
mov ah,09h
lea dx,str1
int 21h
 
jmp exit
 
readerr:
mov ah,09h
lea dx,str2
int 21h
 
jmp exit
 
closeerr:
mov ah,09h
lea dx,str3
int 21h
 
jmp exit
 
done:
lea si,buf
mt1:  
lodsb
 
cmp al,41h  
jb mt2
cmp al,5Ah 
ja mt2
 
add al,20h
mov [si-1],al
 
mt2:  
int 29h
loop mt1
  
exit:  
mov ah,4Ch
mov al,00h
int 21h
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
Похожие ответы