Изменить регистр букв на противоположный используя инструкцию scas - Assembler/FASM
Формулировка задачи:
В общем пользователь вводит строку. Требуется изменить регистр букв на противоположный. Без процедуры scas получилось примерно так. Но надо обязательно с ней. Знатоки, выручайте!
org 100h jmp start ;------------------------ str3 db 'Result : $' buff db 80 dup('$') ent db 10,13,'$' ;------------------------ start: mov di,buff ;приемник для buff @input: mov ah,1 ;Запрос на ввод символа int 21h cmp al,13 ;Enter - закончить ввод je print test al,20h ;проверяем бит в веденной строке jnz small ;если строчная буква or al,20h ;Если заглавная, то меняем на строчную stosb ;сохраняем в буфер jmp @input ;следующий символ small: and al,$0DF ;Меняем на заглавную stosb ;сохраняем в буфер jmp @input ;следующий символ print: mov ah,9 mov dx,str3 int 21h mov dx,buff ;выводим содержимое буфера int 21h exit: mov ah,$08 int 21h ret
Решение задачи: «Изменить регистр букв на противоположный используя инструкцию scas»
textual
Листинг программы
............ BigChar db 'AZ' SmallChar db 'az' ........ mov si, buff @input: mov ah,1 ;Запрос на ввод символа int 21h cmp al,13 ;Enter - закончить ввод je print mov di, BigChar scasb jb small scasb ja small здесь преобразование в маленькую букву mov [bx], al inc bx ;сохраняем в буфер jmp @input ;следующий символ small: scasb jb store scasb ja store здесь преобразование в большую букву store: mov [bx], al inc bx ;сохраняем в буфер jmp @input ;следующий символ
Объяснение кода листинга программы
В этом коде на языке Assembler преобразуют введённые символы в противоположный регистр — строчные буквы становятся заглавными, а заглавные — строчными. Список действий:
- Указывают на буфер для хранения введённых символов — переменная buff.
- Передают в качестве регистра ввода — ah=1, для вывода — dl=13 (Enter).
- Происходит ввод одного символа.
- Если введённый символ — Enter, то переходят к функции вывода.
- Передают в качестве регистра сравнения — al, в качестве памяти — BigChar, для строчных букв — SmallChar.
- Начинают процесс сравнения строк.
- Если первая и последняя буквы сравниваемых строк совпадают, то происходит преобразование в противоположный регистр.
- Происходит сохранение в буфер.
- Переходят к следующей итерации ввода.
- Если введённый символ не является Enter, то переходят к функции преобразования в противоположный регистр.
- Происходит сохранение в буфер.
- Переходят к следующей итерации ввода.