Работа с битами и условиями (как мне кажется задача несложная) - Assembler

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

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

доброго времени суток. есть задача которую, как это нагло не звучит, нужно решить до утра. Как ни прискорбно я сам в Ассемблере почти не смыслю. Ввести последовательно два символа. Если четвертый и пятый биты соответственно первого и второго введённых символов равны нулю, то сформировать байт (записать его в память), в котором первую пару битов составляют два первых бита первого символа, а следующую пару битов - первые два бита второго символа. Третью пару битов, формируемого символа, составляет вторая пара битов первого символа, а четвёртая пара битов формируется из второй пары битов второго символа. В противном случае, сформировать байт (записать его в память), который представляет собой дизъюнкцию двух введённых символов. входные данные к примеру 2 числа

Решение задачи: «Работа с битами и условиями (как мне кажется задача несложная)»

textual
Листинг программы
    test    ax, 3030h
    jnz metka
    shl al, 1
    shl al, 1
    mov bx, ax
    shl bx, 1
    shl bx, 1
    and ax, 30Ch
    and bx, 30C0h
    or  ax, bx
metka:  or  al, ah
    mov pamyat, al
 
    ...
 
pamyat  db  ?

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

  1. «test ax, 3030h» — здесь происходит сравнение содержимого регистра ax с 3030h, результат этого сравнения мы не знаем, так как не можем увидеть значение регистра флагов.
  2. «jnz metka» — если ax не равно 3030h, то происходит переход к метке metka.
  3. «shl al, 1» — сдвиг влево на 1 бит значения в регистре al, при этом значение самого регистра al изменяется, а сдвинутое значение записывается в флаг разряда.
  4. «shl al, 1» — снова сдвиг влево на 1 бит значения в регистре al.
  5. «mov bx, ax» — значение регистра ax копируется в регистр bx.
  6. «shl bx, 1» — сдвиг влево на 1 бит значения в регистре bx.
  7. «shl bx, 1» — снова сдвиг влево на 1 бит значения в регистре bx.
  8. «and ax, 30Ch» — логическое ИЛИ (bitwise AND) содержимого регистра ax и 30Ch.
  9. «and bx, 30C0h» — логическое ИЛИ (bitwise AND) содержимого регистра bx и 30C0h.
  10. «or ax, bx» — логическое ИЛИ (bitwise OR) содержимого регистра ax и bx.
  11. «or al, ah» — логическое ИЛИ (bitwise OR) младшего и старшего байтов регистра ax.
  12. «mov pamyat, al» — значение регистра al копируется в переменную pamyat.
  13. ...
  14. pamyat db ? — здесь pamyat — это переменная, в которую ранее было сохранено значение регистра al, а db — это описание переменной (в данном случае — двоичное).
  15. ...

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


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

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

5   голосов , оценка 4.4 из 5
Похожие ответы