Перевод малюсенькой функции подсчёта 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;}
|
| |