Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
programmer18
0 / 0 / 0
Регистрация: 24.11.2018
Сообщений: 33
1

Проверка деления на ноль в сопроцессоре

16.01.2019, 22:03. Просмотров 358. Ответов 4
Метки нет (Все метки)

Добрый день, коллеги!
Как проверить деление на ноль в сопроцессоре и вывести сообщение об ошибке?

Assembler
1
2
3
4
5
6
X               dw      0
ten1 dd 10.0
 
fild    [X] 
fld ten1
fdivrp st(1), st(0)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2019, 22:03
Ответы с готовыми решениями:

Ошибка деления на ноль
Паскаль подключает модуль ассемблера где асм должен посчитать пример (2*с+d-52)/(a/4+1), для...

Организовать прерывание деления на ноль
Нужно организовать прерывание деления на ноль на ассемблере. никак не получается.

Арифметические операции и ошибка деления на ноль
програма вычисляет выражение Х = (((a-b)*(c-d))/k)+10 текст програми в паскале Program eee;...

Ошибка деления на ноль при запуске программы
program ase; uses crt; var a,b,c,d,x,y: integer; procedure vivod; begin writeln...

Проверка на ноль и переполнения
Здравствуйте, помогите, пожалуйста, реализовать проверку деления на ноль и проверку переполнения,...

4
Kukuxumushu
1592 / 588 / 107
Регистрация: 13.06.2015
Сообщений: 2,009
Завершенные тесты: 2
17.01.2019, 05:23 2
programmer18, топорный метод:
Assembler
1
2
3
4
5
6
7
8
fdivrp
fnstsw ax
test al,4   ; смотрим флаг ZE
jnz ERROR
.......     ; ошибки нет - считаем дальше
ERROR:      ; деление на 0
fnclex      ; сброс флага ZE
.......     ; обработка ошибки
Разумеется, надо сохранять ax и следить за очисткой регистров FPU в обработчике ошибок.
Но куда разумнее проверять делитель на ноль перед делением инструкцией FTST (правда, она работает только с ST(0), для остальных придётся слегка извернуться).
1
Mikl___
Автор FAQ
13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,537
17.01.2019, 05:57 3
programmer18,
а при делении на ноль сопроцессор и так выдаст сообщение об ошибке, то же самое произойдет при попытке получить квадратный корень из отрицательного числа. Всё это заложено в аппаратную реализацию микропроцессора
0
Kukuxumushu
1592 / 588 / 107
Регистрация: 13.06.2015
Сообщений: 2,009
Завершенные тесты: 2
17.01.2019, 07:17 4
Цитата Сообщение от Mikl___ Посмотреть сообщение
сопроцессор и так выдаст сообщение об ошибке
Сопроцессор никакое "сообщение" не выдаст))) Он просто выставит флаг ZE, увидев который, уже процессор отправится на прерывание 0. Осталось только увидеть, обработать и сбросить этот флаг раньше процессора.
Вот работающий пример:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
; FASM
org 100h
fld1
fldz
fdivp       ; 1/0
push ax
fnstsw ax
test al,4
pop ax
jnz ERROR
mov dx,Msg1 ; SUCCESS
jmp FIN
ERROR:
fnclex
mov dx,Msg2 ; ERROR
FIN:
finit       ; Чистим FPU
mov ah,9
int 21h
xor ah,ah
int 16h
ret
 
Msg1 db 'SUCCESS',13,10,'$'
Msg2 db 'ERROR',13,10,'$'
1
programmer18
0 / 0 / 0
Регистрация: 24.11.2018
Сообщений: 33
17.01.2019, 21:42  [ТС] 5
спасибо, доработал, все получилось!))
0
17.01.2019, 21:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2019, 21:42

Проверка Деления на два (Четность Чисел)
Задача: "Найти в массиве чисел суммы элементов, индексы которых четны и нечетны и вывести эти суммы...

lg вс сопроцессоре
как высчитать lg(2+sin^2x) в сопроцессоре. Скобки я уже высчитал, нужна команда для lg. Заранее...

Арифметика на сопроцессоре
Помогите написать программу с арифметическими командами(+,-,*,/). Если можно с коментарием.Например...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru