> inline char ListEnd( register unsigned int Ofs ) > { > register char Result= 0; > > __asm > { > Mov Eax,Ofs > Shl Edx,1 > Adc Result,0 > } > return Result; > }
потому как если бы было так
mov eax, ofs
shl eax, 1
adc result, 0
То он просто возвращает старший (31-й) бит переданного аргумента (ofs), хотя я бы это сделал так
return ofs>>31;
А если ты переписал все правильно, то тут уж надо смотреть во что оно компилится в коде, потому как у разных компилеров разные соглашения о порядке выделения регистров при передаче параметров через них, во вторых функция инлайновая - тут оптимизатор вообще обрежет любую передачу параметров, а будет работать с теми значениями, которые уже находятся в регистрах (где окажутся на момент вызова - с тем и будет работать) и так далее.
|