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