Вопрос № 84846: Допустим имеется некоторая переменная Х (1 байт). Как побитно присвоить ей значение. Н-р:
Биты: 1 2 3 4 5 6 7 8
Значение: 0 0 1 1 0 0 0 0
Заранее спасибо....
Вопрос № 84.846
Допустим имеется некоторая переменная Х (1 байт). Как побитно присвоить ей значение. Н-р:
Биты: 1 2 3 4 5 6 7 8
Значение: 0 0 1 1 0 0 0 0
Заранее спасибо.
Отправлен: 30.04.2007, 17:18
Вопрос задал: psevdo (статус: 1-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: IceWolf
Здравствуйте, psevdo!
Ну для начала-биты располагаются так:старший->младший и нумеруются с нуля т.е.
7 6 5 4 3 2 1 0.
Далее (для ясности считаем, что наш байт находится в AL-для удобства) нам нужно установить значения конкретных бит, для этого будем использовать команды двоичной логики AND dest, src (И) и OR dest, src (или)-их таблицы истинности в приложении.
Для установки бита в "1" нужно над ним провести операцию "OR 1", а для установки в "0"-"AND 0".
Далее получаем число 00110000, независимо от того, что было в AL до этого:
or al, 00110000b ;установка 4 и 5 битов
and al, 00110000b ;сброс 0, 1, 2, 3, 6, 7 битов
Заметим что операции OR 0 и AND 1 не меняют значения бита-приемника(dest).
Удачи!
Приложение:
--------- Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 7-ой класс)
Ответ отправлен: 30.04.2007, 18:54
Отвечает: Зенченко Константин Николаевич
Здравствуйте, psevdo!
MOV cx,8;8-bit
XOR al,al;сбрасываем al
M1:
;следующие команды нужны для манипуляций с флагом CF
;STC устанавливаем флаг CF в единицу
;CLC сбрасываем флаг CF в ноль
;CMC инвертируем флаг CF
;следующие две команды делают одно и тоже
;сдвигают al на один бит влево и добавляем флаг CF в бит 0
ADC al,al;выполняется за 3 такта на 8087
;или
RCL al,1;выполняется за 2 такта на 8087
LOOP M1;повторяем 8 раз
Будут вопросы пишите.
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!
Отвечает: Sov
Здравствуйте, psevdo!
кажется так
mov al,00110000b
mov x,al
Ответ отправил: Sov (статус: 2-ой класс)
Ответ отправлен: 30.04.2007, 20:56
Отвечает: An42
Здравствуйте, psevdo!
Строим таблицу
tabl1 db 0,'0000'
db 1,'0001'
db 2,'0010'
db 3,'0011'
db 4,'0100'
db 5,'0101'
db 6,'0110'
db 7,'0111'
db 8,'1000'
db 9,'1001'
db 0Ah,'1010'
db 0Bh,'1011'
db 0Ch,'1100'
db 0Dh,'1101'
db 0Eh,'1110'
db 0Fh,'1111'
любое шестн.число можно представить виде двоичной тетрады
пример: 27h, 2 имеет представление 0010, а 7 имеет представление 0111
соединяем и получаем 00100111
На этом и построена программа
Удачи
Приложение:
Ответ отправил: An42 (статус: 2-ой класс)
Ответ отправлен: 02.05.2007, 15:51