2014-06-10 2 views
1

В настоящее время я использую чип из школы, который имеет ограниченное количество инструкций. То, что я хочу достичь, это сначала переключить один бит с помощью маски, а затем установить несколько бит в ноль. Доступны только 3 инструкции: И, ИЛИ, XOR. (Без SHIFT НЕ инструкция)Как переключить 1 бит и установить 1 бит в 0 в сборке только с XOR, OR, AND?

, например

0001 1001 // toggle bit 5 
0000 1001 
0001 1001 // set bit 1 to 0 
0001 1000 

Я пытаюсь генерировать ШИМ с H-моста.

Edit:

Исправлено:

; toggle bits 
LOAD R0 [GB+OUTPUT_BUF] 
XOR  R0 CONV_FORW_MASK 
XOR  R0 FLIP_FORW_MASK 
XOR  R0 PUSH_FORW_MASK 
XOR  R0 PUSH_BACK_MASK 

; set mask bit to zero 
LOAD R1 PUSH_FORW_MASK 
XOR  R1 -1 
AND  R0 [R1] 
+2

goto wikipedia и посмотрите таблицу истины для xor, а также, или, таблица истинности все объяснит. –

+0

без NOT, я не могу найти способ сделать это –

+0

у вас есть все необходимое для переключения, установки и очистки –

ответ

1

В C будет:

unsigned char byte = 0x19; 

unsigned char bit_set = (0x01 & byte)^byte; 

unsigned char bit_toggle = ((byte^0x10) & 0x10); 

byte = (byte & 0xEF) | bit_toggle ; 

Теперь перевести на сборку.

+0

для установки бит, используйте 'byte | 0x01' вместо этого проще и быстрее. Чтобы очистить его, используйте 'byte & 0xfe'. для переключения, используйте 'byte^0x01' –

+0

для переключения, окончательный' & 'полностью избыточен –

1

на самом деле, одна инструкция, NAND (что и с результатом перевернутой) будет достаточно, как вы можете построить XOR (намек, подсказка) от 4 из тех. Я бы предложил начать упражнение, пытаясь построить XOR только из NAND. Тогда остальные могут просто встать на свои места.

+0

с инструкцией NAND или NOR вы можете выполнять любые логические функции http: //en.wikipedia. org/wiki/NAND_logic http://en.wikipedia.org/wiki/NOR_logic –

Смежные вопросы