Следующая функция представляет формат 1 в ARM Thumb. Мне непонятна часть использования AND (&) после сдвига в каждом объявлении полей форматов и почему мы использовали эти числа после AND? представление формата 1 в архитектуре ARM
int simulate(unsigned short instr)
{
unsigned char fmt, op, offset5, rd, rs, offset3, rn;
fmt = (instr) >> 13;
switch(fmt){
case 0: // format 1/2
op = (instr >> 11) & 3;
rd = instr & 7;
rs = (instr >> 3) & 7;
offset5 = (instr >> 6) & 0x1F;
if(op!=3) { // format 1
/*
switch(op){
case 0: printf("lsl\tr%d, r%d, #%d\n", rd, rs, offset5); break;
case 1: printf("lsr\tr%d, r%d, #%d\n", rd, rs, offset5); break;
case 2: printf("asr\tr%d, r%d, #%d\n", rd, rs, offset5); break;
}*/