Поменять местами последние 2 и первые 2 бита - Assembler

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

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

Дано 16 битное слово поменять местами первые 2 и последние 2 бита (ab...cd на cd ... ab)
.model small
.386
.stack 100h
.data
a db  1100000000010100 (2) C014 (16) 
mov ax,@data
mov ds,ax
mov ax,a
xor bx,bx
and ax,C000h
mov bx,ax ;
rol bx,2 ;bx= 000000000000000011
mov ax,a
and ax,3; 000000000000000011
ror ax,2
or ax,bx ; ax= 110000000000000000
mov bx,ax
mov ax,a
and ax,3FFCh
or ax,bx
mov ax,bx
mov ax,4c00h
int 21h 
end
Так ли оно делается?Есть ли ошибки?

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

textual
Листинг программы
.286
.model small
.stack 100h
.data
a dw  1100000000010100b; =C014h
b dw ?
.code
start: mov ax,@data
mov ds,ax
mov ax,a
mov bx,ax
and ax,3FFCh; очистили 2 первых и 2 последних бита
rol bx,2 ;поменяли 2 первых с двумя последними
and bx,0C003h; удалили лишние биты
or ax,bx; вставили биты на место
mov b,ax;сохранили результат
mov ah,4Ch; вышли из программы
int 21h 
start end

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

  1. Объявлены две переменные a и b типа dw (слово), в которых будут храниться значения.
  2. Переменная a инициализируется значением 1100000000010100b, что в шестнадцатеричной системе равно C014h.
  3. Переменная b инициализируется неизвестным значением, которое будет меняться в процессе выполнения кода.
  4. Код начинается с переноса сегмента данных в регистр ds.
  5. Затем происходит загрузка значения переменной a в регистр ax.
  6. Значение регистра ax копируется в регистр bx.
  7. При помощи операции and со значением 3FFCh очищаются два первых и два последних бита значения в регистре bx.
  8. При помощи операции rol на два бита сдвигается значение в регистре bx.
  9. При помощи операции and с значением 0C003h удаляются лишние биты значения в регистре bx.
  10. При помощи операции or регистры ax и bx объединяются, и результат сохраняется в регистре ax.
  11. Результат копируется в переменную b.
  12. Выполняется команда int 21h, которая завершает работу программы.
  13. Команда start: служит для вызова основной функции программы.
  14. Команда end: указывает на то, что после выполнения этого действия программа завершится.

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


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

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

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