Никак немогу сообразить зачем перед idiv нужно ставить cwd..
Почему без cwd unhandled exception вылетает?
Процессор както заместо деббагера "отслеживает" непроинициализированность регистра edx?
PS: В книжке Зубкова про это не нашёл..
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: asm x86 in msvc80: __asm idiv
От:
Аноним
Дата:
30.09.06 19:09
Оценка:
Здравствуйте, Vain, Вы писали:
V>Никак немогу сообразить зачем перед idiv нужно ставить cwd.. V>Почему без cwd unhandled exception вылетает? V>Процессор както заместо деббагера "отслеживает" непроинициализированность регистра edx?
V>PS: В книжке Зубкова про это не нашёл..
Посмотрите Intel IA-32 Command Reference для IDIV. Да, может вылетать по исключению #DE "If a positive result is greater than 7FFFH
or a negative result is less than 8000H" (из мануала).
Здравствуйте, Аноним, Вы писали:
V>>Никак немогу сообразить зачем перед idiv нужно ставить cwd.. V>>Почему без cwd unhandled exception вылетает? V>>Процессор както заместо деббагера "отслеживает" непроинициализированность регистра edx?
V>>PS: В книжке Зубкова про это не нашёл..
А>Посмотрите Intel IA-32 Command Reference для IDIV. Да, может вылетать по исключению #DE "If a positive result is greater than 7FFFH А>or a negative result is less than 8000H" (из мануала).
Да, но у меня вылетает даже если: DIViip(5,3,rem)
Т.е. даже если всё заведомо нормально.. (
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: asm x86 in msvc80: __asm idiv
От:
Аноним
Дата:
30.09.06 19:45
Оценка:
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, Аноним, Вы писали:
V>>>
V>>>Никак немогу сообразить зачем перед idiv нужно ставить cwd.. V>>>Почему без cwd unhandled exception вылетает? V>>>Процессор както заместо деббагера "отслеживает" непроинициализированность регистра edx?
V>>>PS: В книжке Зубкова про это не нашёл.. А>>Посмотрите Intel IA-32 Command Reference для IDIV. Да, может вылетать по исключению #DE "If a positive result is greater than 7FFFH А>>or a negative result is less than 8000H" (из мануала). V>Да, но у меня вылетает даже если: DIViip(5,3,rem) V>Т.е. даже если всё заведомо нормально.. (
Деление происходит пары DX:AX на аргумент. В том случае, если вы записываете 5 в AX, содержимое DX неизвестно. Т.е. при этом может возникнуть исключение. CWD же стоит, чтобы расширить число со знаком в AX до числа со знаком в DX:AX.
Здравствуйте, Аноним, Вы писали:
А>Деление происходит пары DX:AX на аргумент. В том случае, если вы записываете 5 в AX, содержимое DX неизвестно. Т.е. при этом может возникнуть исключение. CWD же стоит, чтобы расширить число со знаком в AX до числа со знаком в DX:AX.
Хм.
В зубкове про idiv сказано следующее:
Выполняет целочисленной деление со знаком AL, AX или EAX (в зависмости от размера иточника) на источник (регистр или переменная) и помещает результат в AL, AX или EAX, а остаток — в AH, DX или EDX соответственно. ...
Наврано?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, Аноним, Вы писали:
А>>Деление происходит пары DX:AX на аргумент. В том случае, если вы записываете 5 в AX, содержимое DX неизвестно. Т.е. при этом может возникнуть исключение. CWD же стоит, чтобы расширить число со знаком в AX до числа со знаком в DX:AX. V>Хм. V>В зубкове про idiv сказано следующее: V> V>Выполняет целочисленной деление со знаком AL, AX или EAX (в зависмости от размера иточника) на источник (регистр или переменная) и помещает результат в AL, AX или EAX, а остаток — в AH, DX или EDX соответственно. ... V> V>Наврано?
Недосказано. В общем CWD там нужна обязательно. Для положительных чисел попробуйте (конечно, это не универсально) заменить CWD на XOR DX,DX — должно работать без исключений. Для отрицательных — MOV DX,0FFFFh. Но собственно это и делает CWD. В Зубкове это пропущено... Скачайте родной мануал и используйте его.