Информация об изменениях

Сообщение Подсчёт 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;}


  Оригинал
Из документации:

// Visual C++

BYTE CRCMaker(BYTE b_input,BYTE b_CRC){
_asm{
      mov al,b_input
      mov ah,b_CRC
      mov cx,8
mod1: rol al,1
      rcl ah,1
      jnc mod2
      xor ah,69h
mod2: dec cx
      jnz mod1
      mov b_CRC,ah
    }
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;}


  Оригинал
Из документации:

// Visual C++

BYTE CRCMaker(BYTE b_input,BYTE b_CRC){
_asm{
      mov al,b_input
      mov ah,b_CRC
      mov cx,8
mod1: rol al,1
      rcl ah,1
      jnc mod2
      xor ah,69h
mod2: dec cx
      jnz mod1
      mov b_CRC,ah
    }
return b_CRC;}