регистър CTRL
2 отговора
206 прегледа
регистър CTRL
налетя ме един много неприятен проблем.
имам доста програми които ползват видеокепчъра през DirectShow и същевременно активно ползват операции с float. в процесора има един регистър CTRL, който задава поведението при някои по-необичайни операции, наприемр препълвания, деления на нула и други. та оказва се че тъпия драйвер на кепчъра променя тоя CTRL регъстър така че да се генерира грешка когато имеме препълване отдолу, а това ми бърка в гъза чак до зъбите. в практиката препълването отдолу е напълно легална операция, например ако смятане на някакъв ред със граница 0. казвам това, за да предотвратя тъпи забележки от рода на "ами щом имаш препълване отдолу, проблема е при теб". та проблема е супер прост - как да си заредя стойност в регистъра. стойноста която трябва да сложа е 2f7 (толкова тръгва по начало), а тъпия кепчър я променя на 1370. директно със mov не го приема, нито през друг регистър. просто компилатора не познава символа CTRL.
имам доста програми които ползват видеокепчъра през DirectShow и същевременно активно ползват операции с float. в процесора има един регистър CTRL, който задава поведението при някои по-необичайни операции, наприемр препълвания, деления на нула и други. та оказва се че тъпия драйвер на кепчъра променя тоя CTRL регъстър така че да се генерира грешка когато имеме препълване отдолу, а това ми бърка в гъза чак до зъбите. в практиката препълването отдолу е напълно легална операция, например ако смятане на някакъв ред със граница 0. казвам това, за да предотвратя тъпи забележки от рода на "ами щом имаш препълване отдолу, проблема е при теб". та проблема е супер прост - как да си заредя стойност в регистъра. стойноста която трябва да сложа е 2f7 (толкова тръгва по начало), а тъпия кепчър я променя на 1370. директно със mov не го приема, нито през друг регистър. просто компилатора не познава символа CTRL.
Re: регистър CTRL
Виж дали това ти върши работа:
_controlfp
Get and set the floating-point control word.
Routine Required Header
_controlfp <float.h>
unsigned int _controlfp( unsigned int new, unsigned int mask );
Parameters
.....
_controlfp
Get and set the floating-point control word.
Routine Required Header
_controlfp <float.h>
unsigned int _controlfp( unsigned int new, unsigned int mask );
Parameters
.....
Редактирано от klapaucius на