Сообщение Подсчёт CRC для Тензо от 29.09.2014 12:42
Изменено 18.10.2014 13:50 arc041209
Перевод малюсенькой функции подсчёта CRC для кадра данных терминалов Тензо ТВ-006, Тензо ТВ-009, Тензо ТВ-011 из ассемблера MASM 6.x (входит в Visual C++ 6.0) в ассемблер GCC Inline Assembley (встроен в компиляторы GNU C, MinGW C++ ).
// MinGW C++
BYTE CRCMaker(BYTE b_input,BYTE b_CRC){
asm volatile("movb %0,%%al"::"g"(b_input));
asm volatile("movb %0,%%ah"::"g"(b_CRC));
asm volatile("mov $8,%cx");
asm volatile("mod1: rol $1,%al");
asm volatile("rcl $1,%ah");
asm volatile("jnc mod2");
asm volatile("xor $0x69,%ah");
asm volatile("mod2: dec %cx");
asm volatile("jnz mod1");
asm volatile("movb %%ah,%0":"=g"(b_CRC));
return b_CRC;}
Оригинал | |
Из документации:
| |
Подсчёт CRC для Тензо
Перевод малюсенькой функции подсчёта CRC для кадра данных терминалов Тензо ТВ-006, Тензо ТВ-009, Тензо ТВ-011 из ассемблера MASM 6.x (входит в Visual C++ 6.0) в ассемблер GCC Inline Assembly (встроен в компиляторы GNU C, MinGW C++ ).
// MinGW C++
BYTE CRCMaker(BYTE b_input,BYTE b_CRC){
asm volatile("movb %0,%%al"::"g"(b_input));
asm volatile("movb %0,%%ah"::"g"(b_CRC));
asm volatile("mov $8,%cx");
asm volatile("mod1: rol $1,%al");
asm volatile("rcl $1,%ah");
asm volatile("jnc mod2");
asm volatile("xor $0x69,%ah");
asm volatile("mod2: dec %cx");
asm volatile("jnz mod1");
asm volatile("movb %%ah,%0":"=g"(b_CRC));
return b_CRC;}
Оригинал | |
Из документации:
| |