Используя команду XLAT восстановить ошибку раскладки клавиатуры - Assembler
Формулировка задачи:
Используя команду XLAT восстановить ошибку раскладки клавиатуры ("аналог" программы Punto Switcher), результат вывести на экран. Например, введена строка hjph vbhf, вывести на экран саму строку hjpf vbhf и "восстановленную" строку роза мира.
Решение задачи: «Используя команду XLAT восстановить ошибку раскладки клавиатуры»
textual
Листинг программы
.model tiny .data Change macro from, to if (n eq from) and (set eq 0) db to set = 1 endif endm ChangeRange macro first, last, to if (n ge first) and (n le last) if n eq first db to endif set = 1 endif endm XlatTable: n = 0 rept 256 set = 0 ChangeRange 'A', 'Z', 'ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ' ChangeRange 'a', 'z', 'фисвуапршолдьтщзйкыегмцчня' ChangeRange 'А', 'п', 'F<DULT:PBQRKVYJGHCNEA{WXIO}SM">Zf,dult;pbqrkvyjg' ChangeRange 'р', 'я', "hcnea[wxio]sm'.z" Change 'Ё', '~' Change 'ё', '`' Change '~', 'Ё' Change '`', 'ё' Change '{', 'Х' Change '[', 'х' Change '}', 'Ъ' Change ']', 'ъ' Change ':', 'Ж' Change ';', 'ж' Change '"', 'Э' Change "'", 'э' Change '<', 'Б' Change ',', 'б' Change '>', 'Ю' Change '.', 'ю' Change '|', '/' Change '/', '.' Change '?', ',' Change '@', '"' Change '#', '№' Change '$', ';' Change '^', ':' Change '&', '?' Change '"', '@' Change '№', '#' Change '?', '&' ife set db n endif n = n+1 endm Input db 79,? Source db 79 dup (?) Dest: .code .startup cld mov ah,0Ah lea dx,Input int 21h ; ввода mov ah,2 mov dl,10 int 21h ; новая строка ; перевод lea si,Source lea di,Dest push di lea bx,XlatTable @@Next: lodsb cmp al,13 jz @@Finish xlat stosb jmp @@Next @@Finish: mov al,'$' stosb ; запись доллара (конца строки) mov ah,9 pop dx int 21h ; вывод нового сообщения int 20h end
Объяснение кода листинга программы
- В коде используется ассемблерный язык.
- Код содержит макрос Change, который изменяет символ на другой в заданном диапазоне.
- Код содержит макрос ChangeRange, который изменяет символы в заданном диапазоне.
- Код содержит таблицу XlatTable, которая определяет соответствие между исходными и целевыми символами.
- Код выполняет ввод с клавиатуры с помощью команды int 21h.
- Код выполняет перевод строки с помощью команды int 21h.
- Код использует цикл для обработки каждого символа входной строки.
- Код использует команду xlat для замены символов в соответствии с таблицей XlatTable.
- Код использует команду stosb для записи каждого символа в целевую строку.
- Код добавляет символ доллара в конец целевой строки с помощью команды stosb.
- Код выполняет вывод сообщения с помощью команды int 21h.
- Код выполняет завершение работы программы с помощью команды int 20h.
- Переменная n используется для индексации символов в таблице XlatTable и входной строке.
- Переменная set используется для отслеживания состояния, в котором необходимо изменить символ.
- Переменные ah и dl используются для передачи и получения символов при вводе и выводе.
- Переменные Source и Dest используются для хранения исходной и целевой строк соответственно.
- Переменная bx используется для хранения адреса таблицы XlatTable.
- Переменная si и di используются для указания источника и назначения при переводе строки.
- Команда lodsb используется для загрузки следующего символа из исходной строки в регистр al.
- Команда cmp используется для сравнения символа с символом 13, который представляет символ возврата каретки.
- Команда jz используется для перехода к метке @@Finish, если символ равен символу 13.
- Команда mov используется для перемещения символа в регистр al, который будет записан в целевую строку с помощью команды stosb.
- Команда int 21h используется для выполнения системных функций, таких как ввод и вывод.
- Команда pop используется для восстановления регистра dx после использования команды int 21h для вывода нового сообщения.
- Команда int 20h используется для завершения работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д