Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 230
1

Ошибка в вычислениях

04.06.2015, 22:35. Показов 664. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу в emu8086. Ассемблер не изучаю! Но надо сделать задание на нём
Не могу ничего понять. Прога рассчитывает не правильно. В данном случае присвоены значения A = 7 а C = 2. Значит, расчёт будет идти по второй формуле @Y2. В комментариях я указал где что происходит (надеюсь, правильно указал).
Прога выводит странное число: 64470. Думаю, что это из-за строчек вывода, после @Output:. Но там я не разбираюсь что куда.
Пожалуйста, не игнорьте!!!
В скринах что прога должна рассчитать и что она выводит.
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
; Standard header:
    #make_COM#
        ORG  100H  
 
A dw 7
C dw 2
D dw 5
X dw 4
B dw 3
 
Res_1 dw 0
Res_2 dw 0
Res_3 dw 0
 
mov ax,A;добавление в регистр ax значения А = 7
mov bx,C;добавление в регистр bx значения С = 2
cmp ax,bx; сравнение А и С. Вычитание А-С    
jl @Y2; сравнение A и C. Если А > C, то переходить на @Y2
 
;Здесь расчёт когда A < C / т.е. когда присвоены следующие значения
;A dw 2
;C dw 7
;D dw 5
;X dw 4
;B dw 3
 
;выражение А^2*X
mov ax,A;присвоение регистру ах значения А = 2
mul ax; умножение ax*ax / 2*2=4
mov bx,X;присвоение bx значение X = 4
mul ax; умножение ax на bx / A^2*X / 4*4=16
mov Res_1,ax; Сохранение результата 16 в Res_1
    
;выражение X^2*B
mov ax,X;присвоение регистру ах значения X = 4
mul ax; умножение ax * ax / 4*4=16
mov bx,B;присвоение bx значение B = 3
mul ax; умножение ax на bx / X^2*B / 16*3=48
mov Res_2,ax; Сохранение результата 48 в Res_2 
    
;выражение X^3*C
mov ax,X;присвоение регистру ах значения X = 4
mul ax;умножение ax*ax / 4*4=16
mul ax;умножение (ax*ax)*ax/ X^3 / 16*4=64
mov bx,C; присвоение bx значение C = 7
mul ax; умножение ax на bx / X^3*C / 64*7=448
mov Res_3,ax;Cохранение результата 448 в Res_3  
        
;Сложение А^2*X+X^2*B+X^3*C+D
mov ax,D; присвоение регистру ах значения D = 5
mov bx,Res_3; присвоение регистру bх значения Res_3 = 448
add ax,bx; Cложение ах и bx / X^3*C+D / 448+5=453
mov bx,Res_2;присвоение регистру bх значения Res_2 = 48
add ax,bx;Cложение ах и bx / X^2*B+X^3*C+D / 453+48=501
mov bx,Res_1;присвоение регистру bх значения Res_1 = 16
add ax,bx;Cложение ах и bx / А^2*X+X^2*B+X^3*C+D / 501+16=517
 
;Ответ: 517
 
jmp @Output; переход на @Output, где происходит вывод на экран 
 
@Y2:    
;Здесь расчёт когда A > C / т.е. когда присвоены следующие значения
;A dw 7
;C dw 2
;D dw 5
;X dw 4
;B dw 3
    ;выражение А^3*X
        mov ax,A;присвоение регистру ах значения А = 7
        mul ax;умножение ax*ax / 7*7=49
        mul ax; умножение (ax*ax)*ax/ A^3 / 49*7=343
        mov bx,X;присвоение bx значение X = 4
        mul ax; умножение ax на bx / А^3*X / 343*4=1372
        mov Res_1,ax; Сохранение результата 1372 в Res_1
    
    ;выражение B^2*X^2 
        mov ax,B;присвоение bx значение B = 3
        mul ax; умножение ax*ax / 3*3=9
        mov bx,X;присвоение регистру bх значения X = 4
        mul bx; умножение bx*bx / 4*4=16
        mul ax; умножение ax на bx / B^2*X^2  / 9*16=144
        mov Res_2,ax;Cохранение результата 144 в Res_2      
    
    ;выражение X^3*C
        mov ax,X;присвоение регистру ах значения X = 4
        mul ax;умножение ax*ax / 4*4=16
        mul ax;умножение (ax*ax)*ax/ X^3 / 16*4=64
        mov bx,C; присвоение bx значение C = 2
        mul ax; умножение ax на bx / X^3*C / 64*2=128
        mov Res_3,ax;Cохранение результата 448 в Res_3  
        
        ;Сложение А^3*X+X^2*B^2+X^3*C+D
        mov ax,D; присвоение регистру ах значения D = 5
        mov bx,Res_3;присвоение регистру bх значения Res_3 = 128
        add ax,bx; Cложение ах и bx / X^3*C+D / 128+5=133
        mov bx,Res_2;присвоение регистру bх значения Res_2 = 144
        add ax,bx;Cложение ах и bx / X^2*B^2+X^3*C+D / 133+144=277
        mov bx,Res_1;присвоение регистру bх значения Res_1 = 1372
        add ax,bx;Cложение ах и bx / А^3*X+X^2*B^2+X^3*C+D / 277+1372=1649
        
       ;Ответ: 1649 ; По идее, именно это число должна выводить прога
        
        ;Что за код ниже этой строчки я понятия не имею
    @Output:    
    push    -1   
    mov cx,10    
l1: mov dx,0     
    div cx   
    push    dx  
    cmp ax,0     
    jne l1   
    mov ah,2h
l2: pop dx   
    cmp dx,-1    
    je  @ex
    add dl,'0'    
    int 21h
    jmp l2    
@ex:    mov ax,4c00h 
    int 21h
Миниатюры
Ошибка в вычислениях   Ошибка в вычислениях  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 22:35
Ответы с готовыми решениями:

Ошибка в вычислениях, вызов ассемблерной функции из С кода
Есть несложное выражение. X = K - B/2 + D + E*4; K - константа, D - трехбайтное число, В и Е -...

Вычислить выражение по формуле (вставка в Free Pascal). Ошибка в вычислениях.
program v8; label m , m1 , m2 , m3 , ex; var A, B, C :integer; begin {$asmmode intel} write('a...

Вычислить выражение по формуле (вставка в Free Pascal). Ошибка в вычислениях
что не так? program v7; var A , B , C :integer; begin {$asmmode intel} writeln('A =...

Ошибка в вычислениях
Есть задание, решить СЛАУ методом простой итерации. Программа написана, но выдает такую вот ошибку...

2
Клюг
7674 / 3189 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
05.06.2015, 00:52 2
Переписал под FASM, эмо8086 ненавижу. Ответы выдаёт верные.
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
; FASM
    ORG 100H
    mov dx, [X]
    imul    dx, [X]
    mov si, dx      ; si = x^2
    imul    dx, [X]     ; dx = x^3
    mov di, dx      ; di = x^3
    imul    dx, [C]     ; dx = x^3*C
    add dx, [D]     ; dx = x^3*C+D
;
    mov ax, [A]         ;добавление в регистр ax значения А = 7
    mov bx, ax
    imul    bx, bx      ; bx = A^2
    mov cx, [B]
    cmp ax, [C]
    jl  AlessC
;Здесь расчёт когда A > C / т.е. когда присвоены следующие значени
;A dw 7
;C dw 2
;D dw 5
;X dw 4
;B dw 3
;A^3*X+B^2*X^2
    imul    bx, ax      ; bx = A^3
    imul    cx, cx      ; cx = B^2
AlessC:
;Здесь расчёт когда A < C / т.е. когда присвоены следующие значени
;A dw 2
;C dw 7
;D dw 5
;X dw 4
;B dw 3
;A^2*X+B*X^2
    imul    bx, [X]     ; bx = A^2*X или A^3*X
    imul    cx, si      ; cx = B*X^2 или B^2*X^2
    add bx, cx
    add bx, dx
;Что за код ниже этой строчки я понятия не имею
@Output:
    mov ax, bx
        mov     bx, 10
        xor cx,cx
@@out_dec:
        xor     dx, dx
        idiv    bx
        or  dx, 30h            ;остаток от деления
        push    dx
        inc     cx                ;считаем кол-во цифр
        or  ax, ax             ;пока не 0 - делим
        jnz     @@out_dec
@@3:    pop ax
        int 29h
        loop    @@3
    ret
A   dw 7
C   dw 2
D   dw 5
X   dw 4
B   dw 3
0
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 230
05.06.2015, 10:32  [ТС] 3
Charles Kludge, Спасибо. Но, увы, мне надо на emu8086.
0
05.06.2015, 10:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2015, 10:32
Помогаю со студенческими работами здесь

Ошибка в вычислениях
Вот почему, начиная с 31вой строчки в листбоксе идёт такая фигня: сначала отрицательное число, а...

Ошибка в вычислениях
Изучаю php, как задачку решил написать простенькую программку, которая переводит десятичное число в...

ошибка в вычислениях
Здравствуйте, помогите, пожалуйста! Что здесь может быть? Почему выдает ошибку?

Ошибка в вычислениях
Я пишу расчёт ввожу числа, а при нажатии на кнопку вычислить получаю ошибку будто бы входные данные...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru