IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Ошибка в программе вычисления интеграла, метод трапеций
Hey
сообщение 7.09.2012 20:32
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской

Репутация: -  0  +


Приветствую,

пишу программу вычисления интеграла функции 1/ln x методом трапеций, для начала взял n=20 (затем буду увеличивать). Файл .exe создан, но выдает ошибку и вылетает. При просмотре в дебаггере вижу, что еще на этапе вычисления шага в регистре ST0 оказывается отрицательная величина, еще через пару шагов вылетает. В чем тут дело?

Заранее спасибо.


.486p
.model small
.stack 100h
.data
a dw 2
b dw 5
x dq 2
n dw 20
h dq ?
y dq ?

.code
main proc
mov ax, @data
mov ds, ax
finit
fild b
fisub a
fidiv n
fst h ;вычисляем шаг h


fld1
fild b
fyl2x
fldln2
fmul
fld1
fdiv
fADD y
fild b
fdivr st(1), st ;вычисляем (ln a + ln b)/2

cycl:
fadd y
fst y

fild x
fadd h
fst x ;производим приращение х и каждый раз сохраняем
ficom b
je mult_ ;пока не равно b(=5),продолжаем

fld x
fyl2x
fldln2
fmul
fld1
fdiv ;
loop cycl ;

mult_:
fld y ;
fld h ;
fmul ;когда х достиг значения 5, перемножаем на h

exit:
mov ax, 4c00h ;
int 21h ;
main endp
end main

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Hey   Ошибка в программе вычисления интеграла   7.09.2012 20:32
IUnknown   А ты в дебаггере посмотрел, что именно грузится в ...   8.09.2012 12:00
Hey   Спасибо, с тем фрагментом действительно пошло. Гд...   9.09.2012 12:30
TarasBer   А почему всё-таки fild пятёрки загрузил 8397?   9.09.2012 14:31
Hey   Снова загвоздка: не принимает директиву loop, попр...   9.09.2012 17:30
IUnknown   Это особенности цикла LOOP. Чтобы он работал, надо...   9.09.2012 18:14
Hey   P.S. ТОчно, забыл на счетчик СХ поставить. Правда,...   9.09.2012 18:31
IUnknown   С описанием x dd 2.0 все итерации проходят (прове...   9.09.2012 19:04
Hey   С описанием x dd 2.0 все итерации проходят (пров...   9.09.2012 21:08
Hey   Опять вынужден обратиться: программу продолжил, но...   10.09.2012 16:48
IUnknown   Во-первых, с чего ты решил, что вот это: сработает...   10.09.2012 20:12
IUnknown   Вот первоначальный вариант (можно еще дорабатывать...   11.09.2012 16:14
Hey   Однако серьезно! Буду пробовать. Признателен) ...   11.09.2012 21:54
Hey   Цикл ему кажется слишком длинным: на инструкции lo...   12.09.2012 18:11
IUnknown   Ты б за структурой следил, и вторую процедуру запи...   12.09.2012 23:10
Hey   Да, фрагмент с exit'ом я не туда вставил. Дейс...   13.09.2012 14:32
IUnknown   Это для перевода строки: NewLine, символ CR = 13, ...   13.09.2012 15:09
Hey   Решительно не хватает знаний, чтобы успешно заверш...   14.09.2012 20:22
IUnknown   Hey, я опять не понял, зачем тебе 2 цикла, в каждо...   15.09.2012 11:30
Hey   IUnknown, ты прав: уперся я в свое решение как лун...   15.09.2012 17:36
IUnknown   Еще вопрос: в какой программе ты набираешь листинг...   15.09.2012 18:24
Hey   Отлично, спасибо))   15.09.2012 19:12
Hey   IUnknown, опять вынужден обратиться. Та же многост...   5.10.2012 22:47
Hey   Порядок, нашел ошибки. Из процедуры SIN надо было ...   8.10.2012 15:55


 Ответить  Открыть новую тему 
8 чел. читают эту тему (гостей: 8, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 1.11.2024 2:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"