Проверка бит кода введенного с клавиатуры символа - Assembler

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

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

Всем привет, помогите пожалуйста разобраться с асм, вот само задание: Составить программу, предусматривающую: *Запрос фамилии пользователя и ввод ее с клавиатуры *Вывод фамилии на дисплей *Ввод символа с клавиатуры Если 3 бит кода введенного с клавиатуры символа равен 1 или 2 бит равен 0, протестировать 7 бит M и вывести соответствующее сообщение; иначе инвертировать 0, 3 и 4 биты кода и вывести на дисплей символ, соответствующий измененному коду. Нужно только подправить данный код (скорректировать в соответствии с условием):
Листинг программы
  1. model small
  2. include lib\io.asm
  3. .stack 100h
  4. .data
  5. d db 25
  6. m db 6
  7. y db 96
  8. a db 20
  9. lastname db 23 dup(?)
  10. lastnamePromt db 10,13, 'Input your lastname: ', '$'
  11. lastnameOut db 10,13, 'Your lastname is: ', '$'
  12. symbolPromt db 10,13, 'Input symbol: ', '$'
  13. symbolOut db 10,13, 'Changed symbol: ', '$'
  14. bitOut db 10,13, 'Bit #7 of the M variable is: ', '$'
  15. .code
  16. start:
  17. mov ax, @data
  18. mov ds, ax
  19. mov dx, offset lastnamePromt
  20. mov ah, 9h
  21. int 21h
  22. ;Ввод фамилии
  23. mov lastname,21
  24. mov lastname+1,20
  25. mov dx,offset lastname
  26. mov ah,10 ;ввод 10 в ah
  27. int 21h
  28. mov dx, offset lastnameOut
  29. mov ah, 9h
  30. int 21h
  31. lea dx, lastname+2
  32. mov ah, 9h
  33. int 21h
  34. ;Ввод символа с клавиатуры
  35. mov dx, offset symbolPromt
  36. mov ah, 9h
  37. int 21h
  38. mov ah, 1h;ввод символа
  39. int 21h
  40. ;Проверяем 3 бит
  41. test al, 00000100b
  42. js invert ;Если равно 1, то переход на метку
  43. mov ah, 1h
  44. int 21h
  45. test al, 00000010b
  46. jns invert ;Если равно 0, то переход на метку
  47. test m, 01000000b ; 7 бит M
  48. mov dx, offset symbolOut
  49. mov ah, 9h
  50. int 21h
  51. jmp finish
  52. ;Метка инвертации
  53. invert:
  54. mov dx, offset bitOut
  55. mov al, 9h
  56. int 21h
  57. mov dl, cl
  58. mov ah, 02h
  59. int 21h
  60. xor al, 00011001b ; Инвертация 0,3 и 4 бита в единицы
  61. mov cl, al
  62. mov dx, offset symbolOut
  63. mov ah, 9h
  64. int 21h
  65. mov dl, cl
  66. mov ah, 2h
  67. int 21h
  68. jmp finish
  69. output:
  70. mov dx,offset bitOut
  71. mov al,9h
  72. int 21h
  73. mov dl,cl
  74. mov ah,02h
  75. int 21h
  76. finish:
  77. mov ah,4ch
  78. int 21h
  79. end start
Увы и ах, но из всей учебной программы очень и очень трудно даётся лишь ассемблер((

Решение задачи: «Проверка бит кода введенного с клавиатуры символа»

textual
Листинг программы
  1. test al, 00001000b
  2. jne invert
  3. test al, 00000100b
  4. je invert

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

  1. Переменная al содержит байт, который был введен с клавиатуры.
  2. Выполняется проверка бита 7 (самый старший) переменной al. Если он установлен, то происходит переход к метке invert.
  3. Выполняется проверка бита 4 (5-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке invert.
  4. Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками invert и end.
  5. Код между метками invert и end не представлен в данном коде.
  6. Если переменная al содержит 0, то происходит переход к метке end.
  7. Код между метками end и next не представлен в данном коде.
  8. Выполняется проверка бита 6 (6-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке next.
  9. Выполняется проверка бита 2 (3-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке next.
  10. Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками next и end.
  11. Код между метками next и end не представлен в данном коде.
  12. Если переменная al содержит 0, то происходит переход к метке end.
  13. Код между метками end и start не представлен в данном коде.
  14. Переменная al содержит байт, который был введен с клавиатуры.
  15. Выполняется проверка бита 1 (2-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке start.
  16. Выполняется проверка бита 3 (4-й бит от старшего) переменной al. Если он установлен, то происходит переход к метке start.
  17. Если ни одна из предыдущих проверок не вызвала переход, то происходит выполнение кода между метками start и end.
  18. Код между метками start и end не представлен в данном коде.
  19. Переменная al содержит байт, который был введен с клавиатуры.
  20. Код не представлен в данном коде.

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


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

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

9   голосов , оценка 4.444 из 5

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

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

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