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

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

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

> Ошибка в программе вычисления интеграла, метод трапеций
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

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

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


Снова загвоздка: не принимает директиву loop, попросту ее пропускает. Это свойство моей версии ассемблера или режима 286р?

P.S. Виноват: забыл на счетчик СХ поставить. Правда, он почему-то считает только два цикла, затем обнуляется. Притом во втором цикле в x грузит сразу 4,8 вместо 2,15. ... прилагаю новый листинг.



.286p
.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
mov CX, [n]
dec CX
finit
fild b
fisub a
fidiv n
fst h ;вычисляем шаг h

finit
fld1
fild b
fyl2x
fldln2
fmul ; вычиcляем ln 5
fld1
fdivr ;вычиcляем 1/ln 5
fstp y

fldln2
fld1
fdivr ; вычисляем 1/ln2
fadd y
fstp y
fild a
fld y
fdivr ;вычисляем (1/ln a + 1/ln b)/2
fstp y

cycl:
finit
fld x
fadd h
fst x ;производим приращение х и каждый раз сохраняем
fld1
fld x
fyl2x
fldln2
fmul
fld1 ;
fdivr ;
fadd y
fstp y
loop cycl ;

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



Сообщение отредактировано: Hey -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Hey   Ошибка в программе вычисления интеграла   8.09.2012 0:32
IUnknown   А ты в дебаггере посмотрел, что именно грузится в …   8.09.2012 16:00
Hey   Спасибо, с тем фрагментом действительно пошло. Гд…   9.09.2012 16:30
TarasBer   А почему всё-таки fild пятёрки загрузил 8397?   9.09.2012 18:31
Hey   Снова загвоздка: не принимает директиву loop, попр…   9.09.2012 21:30
IUnknown   Это особенности цикла LOOP. Чтобы он работал, надо…   9.09.2012 22:14
Hey   P.S. ТОчно, забыл на счетчик СХ поставить. Правда,…   9.09.2012 22:31
IUnknown   С описанием x dd 2.0 все итерации проходят (прове…   9.09.2012 23:04
Hey   С описанием x dd 2.0 все итерации проходят (пров…   10.09.2012 1:08
Hey   Опять вынужден обратиться: программу продолжил, но…   10.09.2012 20:48
IUnknown   Во-первых, с чего ты решил, что вот это: сработает…   11.09.2012 0:12
IUnknown   Вот первоначальный вариант (можно еще дорабатывать…   11.09.2012 20:14
Hey   Однако серьезно! Буду пробовать. Признателен) …   12.09.2012 1:54
Hey   Цикл ему кажется слишком длинным: на инструкции lo…   12.09.2012 22:11
IUnknown   Ты б за структурой следил, и вторую процедуру запи…   13.09.2012 3:10
Hey   Да, фрагмент с exit'ом я не туда вставил. Дейс…   13.09.2012 18:32
IUnknown   Это для перевода строки: NewLine, символ CR = 13, …   13.09.2012 19:09
Hey   Решительно не хватает знаний, чтобы успешно заверш…   15.09.2012 0:22
IUnknown   Hey, я опять не понял, зачем тебе 2 цикла, в каждо…   15.09.2012 15:30
Hey   IUnknown, ты прав: уперся я в свое решение как лун…   15.09.2012 21:36
IUnknown   Еще вопрос: в какой программе ты набираешь листинг…   15.09.2012 22:24
Hey   Отлично, спасибо))   15.09.2012 23:12
Hey   IUnknown, опять вынужден обратиться. Та же многост…   6.10.2012 2:47
Hey   Порядок, нашел ошибки. Из процедуры SIN надо было …   8.10.2012 19:55
furosemide 40 mg canadian pharma   cialis daily   19.09.2021 4:57
hydroxychloroquine online purcha   Amoxicillin And Amox Tr   22.09.2021 13:05


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

 





- Текстовая версия 28.03.2024 15:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name