Используя команду XLAT восстановить ошибку раскладки клавиатуры - Assembler

Узнай цену своей работы

Формулировка задачи:

Используя команду XLAT восстановить ошибку раскладки клавиатуры ("аналог" программы Punto Switcher), результат вывести на экран. Например, введена строка hjph vbhf, вывести на экран саму строку hjpf vbhf и "восстановленную" строку роза мира.

Решение задачи: «Используя команду XLAT восстановить ошибку раскладки клавиатуры»

textual
Листинг программы
  1. .model tiny
  2. .data
  3.  
  4. Change          macro   from, to
  5.         if      (n eq from) and (set eq 0)
  6.                 db      to
  7.           set = 1
  8.         endif
  9. endm
  10.  
  11. ChangeRange     macro   first, last, to
  12.         if      (n ge first) and (n le last)
  13.           if    n eq first
  14.                 db      to
  15.           endif
  16.           set = 1
  17.         endif
  18. endm
  19.  
  20. XlatTable:
  21. n = 0
  22. rept            256
  23.                 set = 0
  24.                 ChangeRange 'A', 'Z', 'ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ'
  25.                 ChangeRange 'a', 'z', 'фисвуапршолдьтщзйкыегмцчня'
  26.                 ChangeRange 'А', 'п', 'F<DULT:PBQRKVYJGHCNEA{WXIO}SM">Zf,dult;pbqrkvyjg'
  27.                 ChangeRange 'р', 'я', "hcnea[wxio]sm'.z"
  28.                 Change  'Ё', '~'
  29.                 Change  'ё', '`'
  30.                 Change  '~', 'Ё'
  31.                 Change  '`', 'ё'
  32.                 Change  '{', 'Х'
  33.                 Change  '[', 'х'
  34.                 Change  '}', 'Ъ'
  35.                 Change  ']', 'ъ'
  36.                 Change  ':', 'Ж'
  37.                 Change  ';', 'ж'
  38.                 Change  '"', 'Э'
  39.                 Change  "'", 'э'
  40.                 Change  '<', 'Б'
  41.                 Change  ',', 'б'
  42.                 Change  '>', 'Ю'
  43.                 Change  '.', 'ю'
  44.                 Change  '|', '/'
  45.                 Change  '/', '.'
  46.                 Change  '?', ','
  47.                 Change  '@', '"'
  48.                 Change  '#', '№'
  49.                 Change  '$', ';'
  50.                 Change  '^', ':'
  51.                 Change  '&', '?'
  52.                 Change  '"', '@'
  53.                 Change  '№', '#'
  54.                 Change  '?', '&'
  55.         ife     set
  56.                 db      n
  57.         endif
  58.                 n = n+1
  59. endm
  60.  
  61. Input           db      79,?
  62. Source          db      79 dup (?)
  63. Dest:
  64.  
  65. .code
  66. .startup
  67.  
  68.                 cld
  69.                 mov     ah,0Ah
  70.                 lea     dx,Input
  71.                 int     21h             ; ввода
  72.                 mov     ah,2
  73.                 mov     dl,10
  74.                 int     21h             ; новая строка
  75.  
  76.                 ; перевод
  77.                 lea     si,Source
  78.                 lea     di,Dest
  79.                 push    di
  80.                 lea     bx,XlatTable
  81.         @@Next: lodsb
  82.                 cmp     al,13
  83.                 jz      @@Finish
  84.                 xlat
  85.                 stosb
  86.                 jmp     @@Next
  87.         @@Finish:
  88.                 mov     al,'$'
  89.                 stosb                   ; запись доллара (конца строки)
  90.  
  91.                 mov     ah,9
  92.                 pop     dx
  93.                 int     21h             ; вывод нового сообщения
  94.  
  95.                 int     20h
  96.  
  97. end

Объяснение кода листинга программы

  1. В коде используется ассемблерный язык.
  2. Код содержит макрос Change, который изменяет символ на другой в заданном диапазоне.
  3. Код содержит макрос ChangeRange, который изменяет символы в заданном диапазоне.
  4. Код содержит таблицу XlatTable, которая определяет соответствие между исходными и целевыми символами.
  5. Код выполняет ввод с клавиатуры с помощью команды int 21h.
  6. Код выполняет перевод строки с помощью команды int 21h.
  7. Код использует цикл для обработки каждого символа входной строки.
  8. Код использует команду xlat для замены символов в соответствии с таблицей XlatTable.
  9. Код использует команду stosb для записи каждого символа в целевую строку.
  10. Код добавляет символ доллара в конец целевой строки с помощью команды stosb.
  11. Код выполняет вывод сообщения с помощью команды int 21h.
  12. Код выполняет завершение работы программы с помощью команды int 20h.
  13. Переменная n используется для индексации символов в таблице XlatTable и входной строке.
  14. Переменная set используется для отслеживания состояния, в котором необходимо изменить символ.
  15. Переменные ah и dl используются для передачи и получения символов при вводе и выводе.
  16. Переменные Source и Dest используются для хранения исходной и целевой строк соответственно.
  17. Переменная bx используется для хранения адреса таблицы XlatTable.
  18. Переменная si и di используются для указания источника и назначения при переводе строки.
  19. Команда lodsb используется для загрузки следующего символа из исходной строки в регистр al.
  20. Команда cmp используется для сравнения символа с символом 13, который представляет символ возврата каретки.
  21. Команда jz используется для перехода к метке @@Finish, если символ равен символу 13.
  22. Команда mov используется для перемещения символа в регистр al, который будет записан в целевую строку с помощью команды stosb.
  23. Команда int 21h используется для выполнения системных функций, таких как ввод и вывод.
  24. Команда pop используется для восстановления регистра dx после использования команды int 21h для вывода нового сообщения.
  25. Команда int 20h используется для завершения работы программы.

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


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

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

14   голосов , оценка 3.786 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы