Подсчёт CRC для Тензо
От: arc041209 СССР  
Дата: 29.09.14 12:42
Оценка:
Перевод малюсенькой функции подсчёта 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;}
Отредактировано 18.10.2014 13:50 arc041209 . Предыдущая версия . Еще …
Отредактировано 30.09.2014 4:04 arc041209 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.