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