7 / 6 / 6
Регистрация: 07.04.2012
Сообщений: 51
1

Вычисление полинома по схеме Горнера (исправление ошибки)

06.10.2013, 22:19. Показов 1356. Ответов 5
Метки нет (Все метки)

Помогите исправить ошибку.
При отрицательном x программа считает неправильно.
При заданных параметрах ассемблер выдает 995917
Аналогичный код на си -52555
Использовать регистры EAX и тд нельзя. Нужно исправить именно это.
Код на ассемблере и си прилагаю.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
        TITLE   lab1
        PAGE    52,72
        INCLUDE macroio.inc 
DATA   SEGMENT
cr  equ 13  ; Каретка
lf  equ 10  ; Перевод строки
 
n   dw  4
a   dw  500,400,111,500
x   dw  -5 
vr  dw  0
o   dd  0
flag dw 0
t dw 0
str1    db  "Массив x^n........x^1....1",lf,"$"
str2    db  "Ответ  - $"
str3    db  "X = $"
viv db  240 dup(?)
DATA   ENDS
 
PROG   SEGMENT 'CODE'
       ASSUME  DS:DATA,ES:DATA,CS:PROG,SS:SPROG
START:
       MOV     AX,DATA 
       MOV     DS,AX
       MOV     ES,AX
 
    @DispStr    str1
    mputi       2,n,a,viv
    @DispStr    viv
    @DispCh cr lf
 
    @DispStr    str3    
    puti        2,x,viv
    @DispStr    viv
    @DispCh cr lf
    
;Начало вычислений
    mov cx, n;
    mov si, 0
    cmp x,0
    jg LN1
    mov flag, 1
    neg x
LN1:
;;o=o*x
    mov ax, word ptr o  
    mul x
    mov word ptr o, ax
    mov vr, dx
    mov ax, word ptr o+2
    mul x
    adc ax, vr
    mov word ptr o+2, ax
;;/o=o*x
;;/////o=-o if need
    cmp flag,0
    je LN3
    mov ax, word ptr o
    neg ax
    add ax,1
    mov word ptr o, ax
    mov ax,word ptr o+2
    neg ax
    adc ax,0
    mov word ptr o+2,ax
LN3:
;;/////
;;o=o+a[i]
    mov ax, word ptr o
    add ax, a[si]
    mov word ptr o, ax
    adc ax, 0
    mov ax, word ptr o+2
;;/o=o+a[i]
    add si, 2   
loop  LN1
;Конец вычислений
    @DispStr    str2    
    puti        4,o,viv
    @DispStr    viv
    @DispCh cr lf
    
@Exit
PROG ENDS
 
SPROG SEGMENT STACK 'STACK'
  DB  512 DUP(?)
SPROG ENDS
  END  START
C
1
2
3
4
5
6
7
8
9
    int a[]={500,400,111,500};
    int o=0;
    int x=-5;
    int n=4;
    for(int i=0;i<n;i++)
    {
        o=(o*x)+a[i];
        cout<<"o="<<o<<endl;
    }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2013, 22:19
Ответы с готовыми решениями:

Вычисление полинома по схеме Горнера
Дана вроде бы стандартная задача, на вычисление суммы, но портит ее то, что надо вычислить ее по...

Вычисление производных полинома в данной точке по схеме Горнера
Помогите составить программу на паскале для вычисления производных полинома в данной точке по схеме...

Вычислить значение полинома по схеме Горнера
ПОМОГИТЕ МОЖАЛУЙСТА,НУЖНО НАПИСАТЬ ПРОГРАММУ: Вычислить: p(x)=a(n)x^n+a(n-1)x^(n-1)+...+a1x+a(o)...

Деление полинома p(x) на бином (x–α) по схеме Горнера
Помогите составить программу на паскале для деления полинома p (x) на бином (x–α) по схеме...

5
programmer
2345 / 489 / 59
Регистрация: 01.06.2011
Сообщений: 3,525
Записей в блоге: 1
07.10.2013, 03:53 2
используйте инструкцию imul
Назначение: операция умножения двух целочисленных двоичных значений со знаком.
0
7 / 6 / 6
Регистрация: 07.04.2012
Сообщений: 51
07.10.2013, 09:16  [ТС] 3
Шикарное просто предложение. А теперь вопрос, как я им воспользуюсь без регистров eax... Читайте внимательнее.
0
Ушел с форума
Автор FAQ
14259 / 7128 / 855
Регистрация: 11.11.2010
Сообщений: 12,776
07.10.2013, 09:25 4
Mogost,
imul может работать как с содержимым регистра ЕАХ, АХ, AL так и не используя этих регистров, читай о команде imul с двумя и тремя операндами
0
7 / 6 / 6
Регистрация: 07.04.2012
Сообщений: 51
07.10.2013, 09:30  [ТС] 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
Mogost,
imul может работать как с содержимым регистра ЕАХ, АХ, AL так и не используя этих регистров, читай о команде imul с двумя и тремя операндами
Проблема в том что результат в двойном слове. Ну вот например если я сделаю так
Assembler
1
2
3
4
5
6
7
8
    mov ax, word ptr o  
    imul x
    mov word ptr o, ax
    mov vr, dx
    mov ax, word ptr o+2
    imul x
    adc ax, vr
    mov word ptr o+2, ax
результат от этого правильным, то не станет.
0
Ушел с форума
Автор FAQ
14259 / 7128 / 855
Регистрация: 11.11.2010
Сообщений: 12,776
07.10.2013, 10:16 6
Mogost,
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
; masm dos com #
.286
.model tiny
.code
org 100h
comment #
int a[]={500,400,111,500};
    int o=0;
    int x=-5;
    int n=4;
    for(int i=0;i<n;i++)
    {
        o=(o*x)+a[i];
        cout<<"o="<<o<<endl;
    }
#
start:  mov ax,3
    int 10h
    mov si,offset a
    mov cx,4
@@: imul dx,o,-5
    lodsw
    add dx,ax
    mov o,dx
    loop @b
    neg o
    mov al,'-'
    int 29h
    mov bx,10
    mov ax,o
@@: xor dx,dx
    div bx
    add dl,'0'
    push dx
    inc cx
    test ax,ax
    jnz @b
@@: pop ax
    int 29h
    loop @b
    mov ah,0
    int 16h 
    ret
a dw 500,400,111,500
o dw 0
end start
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2013, 10:16

Составить подпрограмму вычисления значение полинома n-го порядка по схеме Горнера
Здравствуйте. помогите пожалуйста. Задание: составить подпрограмму вычисления значение полинома...

Составить программу для вычисления значения полинома по схеме Горнера
Объясните пожалуйста программу, каждую строку Завтра нужно преподу объяснить Спасибо! Условие...

Вычисление значения полинома, используя формулу Горнера
Составить блок-схему и программу для вычисления значения полинома, используя формулу Горнера....

Вычисление по схеме Горнера
Для данного действительного числа X произвести вычисление по схеме Горнера ...

Провести вычисление многочлена по схеме Горнера
Провести вычисление многочлена по схеме Горнера f(x)=( ...(((x+A )x+A )x+A )... )x+An Помогите...

Вычисление выражения основываясь на схеме Горнера
Добрый день. Стоит такое задание. Дано число X типа Single. Необходимо разработать фрагмент...


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

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

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