Перевод из прописных в строчные буквы - 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
. Обратите внимание, что в этом коде нет обработки ошибок, связанных с нехваткой памяти или других ресурсов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д