ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
761353 Топик полностью
incognito (09.06.2017 13:14, просмотров: 111) ответил 0men на так а в ассемблере посмотреть, что там неладно?
во время вычисления g[1] затирается значение регистра R13 (переменная C3), ну и все дальнейшие вычисления уже будут не верны.  RSEG `CODE`:CODE:REORDER:NOROOT(1) // 115 void test(void) test: // 116 { PUSH.W R10 PUSH.W R11 SUB.W #0x6, SP // 117 unsigned char c1, c2, c3; // 118 unsigned char g[4]; // 119 // 120 c1 = 0xFF; MOV.B #0xff, R14 // 121 c2 = 0xFF; MOV.B #0xff, R15 // 122 c3 = 0xFF; MOV.B #0xff, R13 // 123 // 124 g[0] = ((c1 & 1) << 2) | ((c2 & 1) << 1) | ((c3 & 1) << 0); MOV.B R13, R12 AND.B #0x1, R12 MOV.B R15, R10 AND.B #0x1, R10 RLA.B R10 MOV.B R14, R11 AND.B #0x1, R11 RLA.B R11 RLA.B R11 BIS.B R10, R11 BIS.B R12, R11 MOV.B R11, 0(SP) // 125 g[1] = ((c1 & 2) << 1) | ((c2 & 2) << 0) | ((c3 & 2) >> 1); RRA.B R13 AND.B #0x1, R13 MOV.B R15, R10 AND.B #0x2, R10 MOV.B R14, R11 RLA.B R11 AND.B #0x4, R11 BIS.B R10, R11 BIS.B R13, R11 MOV.B R11, 0x1(SP) // 126 g[2] = ((c1 & 4) << 0) | ((c2 & 4) >> 1) | ((c3 & 4) >> 2); BIT.B #0x4, R13 SUBC.W R10, R10 ADD.B #0x1, R10 MOV.B R15, R11 CLRC RRC.B R11 AND.B #0x2, R11 MOV.B R14, R12 AND.B #0x4, R12 BIS.B R11, R12 BIS.B R10, R12 MOV.B R12, 0x2(SP) // 127 g[3] = ((c1 & 8) >> 1) | ((c2 & 8) >> 2) | ((c3 & 8) >> 3); BIT.B #0x8, R13 SUBC.W R10, R10 ADD.B #0x1, R10 CLRC RRC.B R15 RRA.B R15 AND.B #0x2, R15 CLRC RRC.B R14 AND.B #0x4, R14 BIS.B R15, R14 BIS.B R10, R14 MOV.B R14, 0x3(SP) // 128 // 129 // g[4] = ((c1 & 2) << 1) | ((c2 & 2) << 0) | ((c3 & 2) >> 1); // 130 } ADD.W #0x6, SP POP.W R11 POP.W R10 RET