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