Халтура в команде CMOV
От: Аноним  
Дата: 26.06.14 06:00
Оценка:
В программе потребовалось загрузить косвенный адрес, если он задан.
Например,
or EBX, EBX ; задан адрес ?
jnz M ; не задан
mov EBX,[EBX] ; достаем косвенный адрес
M:….

Хотел сократить переход и написал
or EBX, EBX
cmovnz EBX,[EBX]

Но оказалось, что так нельзя, потому что все равно вычисляется адресная часть команды cmov и при нулевом EBX происходит обращение к нулевому адресу, чего, собственно говоря, пытались избежать.
На мой взгляд халтура. Нужно было блокировать исключение, если условие не выполняется. Т.е. cmov не должна давать исключение, если условие не срабатывает. И в документации Intel об этом ни слова.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.