Рассмотрим следующий код C, который записывает и считывает данные ввода-вывода с отображением в память и из памяти.
volatile int* switches = (volatile int*) 0x1b430010;
volatile int* leds = (volatile int*) 0xabbb8050;
int temp = ((*switches) >> 6) & 0x3;
*leds = (*leds & 0xff9f) | XXX;
Из приведенного выше кода C можно получить, что некоторые биты считываются с 16-разрядного порта коммутатора и используются для включения или выключения некоторых светодиодов, не влияя на другие светодиоды на 16-разрядном порту светодиодов. Одно отсутствующее выражение помечено как XXX. Запишите, каким должно быть выражение XXX, чтобы светодиоды правильно включались или выключались.
Ответ XXX = temp << 5
.
Когда я пытаюсь перевести на ассемблер и рассчитать в битах, я получил temp 0 после ((*switches) >> 6) & 0x3;
, так почему temp << 5
здесь допустимо, потому что смещение 0 не делает ничего другого? (возможно, я просчитался, при необходимости могу предоставить все мои вычисления в битах)