)Упростить программу перевода введенных символов в нижний регистр - 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

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


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

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

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