)Упростить программу перевода введенных символов в нижний регистр - Assembler
Формулировка задачи:
Есть рабочая программа на Tasm. Нужно упростить. Помогите кодом)
Листинг программы
- .model small
- .data ; В этом сегменте следует размещать переменные памяти
- message1 db 13,10,"Enter string: $"
- message2 db 13,10,"Result string: $"
- crlf db 0Dh,0Ah,'$'
- bufferMax db 121; максимальная длина вводимой строки
- bufferSize db ?; длина введенной строки (под переменную просто резервируется место в памяти)
- buffer db 121 dup(?); сама строка
- .stack 128 ; определяет стек размером в 128h
- .code ; Директива .CODE отмечает начало сегмента кода
- start:
- mov ax, @data ; Настраиваем сегментные регистры
- mov ds, ax
- mov es, ax
- ; - - - -выводим сообщение
- mov dx,offset message1 ; DX указывает на смещение message1 в сегменте .DATA
- mov ah,9 ; номер функции DOS печати строки
- int 21h ; прерывание
- ; - - - -вводим строку
- mov dx,offset bufferMax ; DX указывает на смещение bufferMax в сегменте .DATA
- mov ah,0Ah ; функция ввода строки с клавиатуры
- int 21h ; прерывание
- ; - - - -выводим сообщение
- mov dx,offset message2 ; DX указывает на смещение message2 в сегменте .DATA
- mov ah,9 ; номер функции DOS печати строки
- int 21h ; прерывание
- ; - - - -считываем длину строки
- cld ; Команда CLD производит сброс флага направления в регистре флагов
- mov si,offset bufferSize ; адрес буфера
- lodsb ; Загрузить символ
- mov cl,al ; для вывода
- xor ch,ch ; ch=0
- ; - - - -для строковых команд
- push si ; положить в стек
- pop di ; извлечь из стека
- ; - - - -цикл замены
- control:
- lodsb ; Загрузить символ
- ; - - - -проверяем прописные буквы
- cmp al,'A'; команда сравнения
- jb noChange ; меньше - переход
- ; в противном случае выполняется следующая команда.
- cmp al,'Z'; ; команда сравнения
- jg noChange ; Переход, если больше
- or al,00100000b ; операция логического сложения
- jmp short noChange ; команда безусловного перехода 8-битовое смещение
- ; - - - -записываем новый символ
- noChange:
- stosb ; загружает регистр al в память
- loop control ; переход на метку
- ; - - - -выводим результат
- mov al,'$' ;
- stosb ; загружает регистр al в память
- mov dx,offset buffer ; адрес буфера
- mov ah,09h ; Функция DOS 09h вывода на экран
- int 21h ; прерывание
- ; - - - -выход
- mov ah,4ch ; вызвать DOS для завершения программы
- int 21h ; прерывание
- ; - - -
- end start
Решение задачи: «)Упростить программу перевода введенных символов в нижний регистр»
textual
Листинг программы
- .model small
- .data
- message1 db 13,10,'Enter string: $'
- message2 db 13,10,'Result string: $'
- buffermax db 121
- buffersize db 0
- buffer db 121 dup(?)
- .stack 128
- .code
- start:
- mov ax,@data
- mov ds,ax
- mov es,ax
- mov ah,09h
- mov dx,offset message1
- int 21h
- mov ah,0Ah
- mov dx,offset buffermax
- int 21h
- mov ah,09h
- mov dx,offset message2
- int 21h
- cld
- mov si,offset buffer
- xor ch,ch
- mov cl,buffersize
- push si
- pop di
- control:
- lodsb
- cmp al,'A'
- jb nochange
- cmp al,'Z'
- ja nochange
- or al,100000b
- nochange:
- stosb
- loop control
- mov al,'$'
- stosb
- mov ah,09h
- mov dx,offset buffer
- int 21h
- mov ah,4Ch
- mov al,00h
- int 21h
- end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д