Строка: Осуществить замену строчных букв на заглавные и заглавных на строчные - Assembler

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

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

вот мае задание, помогите пожалуйста ...... Ввести текст в байтовый массив. Осуществить замену маленьких букв на БОЛЬШИЕ, БОЛЬШИЕ на маленькие и вывести весь текст. Текст вывести как в файл так и на экран. Имя файла берется из командной строки, если он задан, если нет, то запросить ввести имя файла.

Решение задачи: «Строка: Осуществить замену строчных букв на заглавные и заглавных на строчные»

textual
Листинг программы
org  100h
jmp  start
 
mess0   db  10,'File name....: $'
mess1   db  10,'Type string..: $'
mess2   db  10,10,'Create file..: Okey!'
        db  10,'File contants: $'
buff    db  128 dup('$')   ; буфер для строки,
fName   db  013 dup(0)     ;    ..и для имени файла
handl   dw  0              ; дескриптор файла
fSize   dw  0              ;    ..и его размер
 
start:
;============= Проверяем ком.строку на имя файла ===================//
   cmp   byte[80h],0       ;
   jz    begin             ; jump если нет параметра
   mov   ah,9              ; иначе: сохраняем имя файла
   mov   dx,mess0          ;
   int   21h               ;
   mov   si,82h            ; начало ком.строки в PSP (без пробела)
   mov   di,fName          ; сохранять строку по адресу DI
@@:                        ;
   lodsb                   ; читаем строку..
   cmp   al,0dh            ; jump если конец ком.строки
   je    begin             ;
   int   29h               ; выводим имя на экран,
   stosb                   ;    ..и записываем в буфер
   jmp   @b                ;
 
;============= Запрос на ввод текста ===============================//
begin:                     ;
   mov   ah,9              ;
   mov   dx,mess1          ;
   int   21h               ;
   mov   di,buff           ; сохранять по-адресу DI
   call  saveString        ;
   mov   [fSize],cx        ; запомним длину введённой строки!
 
;============= Обработка текста (меняем регистр букв) ==============//
   mov   si,buff           ;
   mov   di,si             ; адрес источника (он-же приёмник)
replace:                   ;
   lodsb                   ; читаем символ в AL
   cmp   al,40h            ; цифры/знаки не трогаем
   jb    fuck              ;
   xor   al,20h            ; инверсия регистра букв!
fuck:                      ;
   stosb                   ; пере/записываем буфер
   loop  replace           ; мотаем цикл СХ-раз...
 
;============= Определяемся с именем файла =========================//
   cmp   [fName],0         ; переход, если имя файла
   jnz   createFile        ;        ..указано в ком.строке
   mov   ah,9              ; иначе: вводим/сохраняем файл-нэйм
   mov   dx,mess0          ;
   int   21h               ;
   mov   di,fName          ;
   call  saveString        ;
 
;============= Файловые операции.. =================================//
createFile:                ;
   mov   ah,3ch            ;
   mov   dx,fName          ;
   mov   cx,20h            ; нормальный атрибут
   int   21h               ;
   jc    error             ; ошибка?
writeFile:                 ;
   mov   bx,ax             ; ВХ = дескриптор созданного файла
   mov   ah,40h            ;
   mov   dx,buff           ;
   mov   cx,[fSize]        ; сколько байт записать
   int   21h               ;
   jc    error             ;
closeFile:                 ;
   mov   ah,3eh            ;
   int   21h               ;
 
;============= Выводим на экран изменённую строку ==================//
   mov   ah,9              ;
   mov   dx,mess2          ;
   int   21h               ;
   mov   dx,buff           ;
   int   21h               ;
   jmp   exit              ; на выход!
 
;============= Обработчик ошибки.. =================================//
error:                     ;
   call  @f                ;
   db    7,10,'<--File operations Error!$'
@@:                        ;
   pop   dx                ;
   mov   ah,9              ;
   int   21h               ;
 
;============= Выход из приложения =================================//
exit:
   xor   ax,ax             ;
   int   16h               ;
   int   20h               ;
 
;ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
saveString:                ;
   xor   cx,cx             ; здесь будет длина строки
   mov   ah,1              ; dos 01h
@@:                        ;
   int   21h               ;
   cmp   al,13             ; Enter заканчивает ввод
   je    next              ;
   stosb                   ; сохраняем символ в буфере
   inc   cx                ; длина строки +1
   jmp   @b                ; сл.символ..
next:                      ;
ret

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы