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

Вычислить значение выражения

22.01.2017, 18:05. Показов 832. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
(a*x^2+b*x+c)div(d*x+e) , Неправильно считает,где ошибся не пойму. Подскажите плиз.

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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
.model small
 
.data
ten dw 10
a dw ?
b dw ?
c dw ?
d dw ?
x dw ?
e dw ?
result dw ?
i dw 0
 
file_name db 'in.txt',0
file_name_out db 'out.txt',0
s_error   db 'Error!',13,10,'$'
endline   db 13,10,'$'
buffer    dw 81             
handle    dw 1
buffer_out dw ?              
 
.code
  mov ax,@data
  mov ds,ax
start:
    mov ah,3Dh              
    xor al,al               
    mov dx, offset file_name        
    xor cx,cx               
    int 21h                 
    
    mov [handle],ax         
    
    ;read from file
    mov bx,ax               
    mov ah,3Fh              
    mov dx,buffer           
    mov cx,80               
    int 21h                 
    mov bx,buffer
    mov cx,ax
    xor ax,ax
    mov al,byte ptr [bx]
    sub al, 30h
    dec cx
    inc bx
strToNum:
    xor dx,dx
    mov dl,byte ptr [bx]
    cmp dl, 20h
    je Num
    mul ten
    mov dl,byte ptr [bx]
    inc bx
    sub dl, 30h
    add al, dl
    Loop strToNum 
Num:
    inc i
    inc bx
    cmp i, 1
    je scanfA
    cmp i, 2
    je scanfB
    cmp i, 3
    je scanfC
    cmp i, 4
    je scanfD
    cmp i, 5
    je scanfE
    cmp i, 6
    je scanfX
    ret
    
scanfA:
    mov a, ax
    xor ax,ax
    dec cx
    jmp strToNum
    ret
scanfB:
    mov b, ax
    xor ax,ax
    dec cx
    jmp strToNum
    ret
scanfC:
    mov c, ax
    xor ax,ax
    dec cx
    jmp strToNum
    ret
scanfD:
    mov d, ax
    xor ax,ax
    dec cx
    jmp strToNum
    ret
scanfX:
    mov x, ax
    xor ax,ax
    dec cx
    jmp strToNum
    ret
scanfE:  
    mov e, ax
    xor ax,ax
    call calculation
    mov result, cx 
close_file:
    mov ah,3Eh              
    mov bx,[handle]         
    int 21h       
open_output:
    mov ah,3Dh
    mov al, 02
    mov dx, offset file_name_out        
    xor cx,cx               
    int 21h                  
    mov [handle],ax
    mov di, offset buffer_out
    push di
    xor ax,ax
    xor dx,dx
    mov ax, result
    xor cx, cx
decs:                
    inc cx
    inc si          
    xor dx, dx
    mov bx, 10
    div bx
    add dx, '0'
    push dx
    cmp ax, 0
    jne decs
print:          
    xor dx, dx
    pop dx
    mov [di],dx
    inc di
    loop print
    xor dx, dx
    mov byte ptr [di], '$'
    pop di
    xchg dx, di
    mov ah, 9
    int 21h
    
    mov bx,[handle]         
    mov ah,40h                             
    mov cx, si               
    int 21h                 
    jnc close_file_out          
    call error_msg          
 
close_file_out:
    mov ah,3Eh              
    mov bx,[handle]         
    int 21h                 
    jnc exit                
    call error_msg  
exit:
    mov ah,8                
    int 21h                 
    mov ax,4C00h            
    int 21h                 
 
;-------------------------------------------------------------------------------
;error message
error_msg:
    mov ah,9
    mov dx, offset s_error
    int 21h                
    ret
 
;-------------------------------------------------------------------------------
;calculation
calculation:
 mov ax,x
    mul ax
    mov bx,a
    mul bx ;DX:AX=a*x^2
    mov cx,ax ;CX=a*x^2
    mov ax,b 
    mov bx ,x 
    mul bx 
    ;;;;;;;;;;
    add cx,ax ;cx=a*x^2+b*x
    mov bx,c 
    add cx,bx ;CX=first block
    ;;;;;;;;;
    mov ax,d 
    mov bx,x 
    mul bx ;AX= d*x
    mov bx,e 
    add bx,ax  ;BX=second block 
    ;;;;;
    xor ax,ax
    mov ax,cx 
    div bx 
    xor cx,cx
    mov dx,ax
    ret
    end
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2017, 18:05
Ответы с готовыми решениями:

Вычислить значение выражения
Разработать с помощью Debug программу, выполняющую вывод на экран текстового сообщения и...

Вычислить значение выражения: ((2*c)-(d/3)) / (b-(a/4))
Имеется пример ((2*c)-(d/3)) / (b-(a/4)) При клике на Btn1 значение выводится в Edit1 В качестве...

Вычислить значение выражения
Помогите решить уравнение x=((C+A)+780)/(-B)+45H x - двойное слово А - слово B,C - байт ...

Вычислить значение выражения
Вычислить уравнение (a ^ 3) / ((b | 9) * (!c + 1)) – (d & 2)

9
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.01.2017, 18:44 2
Программа велика для анализа. И нет комментариев.
Уточните, неправильно считает или неправильно выводит?

Если считает - смотрите, вы не учитываете то, что после a*x^2 у вас результат в DX:AX и при вычислении b*x вы затираете DX. Потом, при сложении a*x^2 и b*x вы не учитываете старшее слово. При сложении (a*x^2 + b*x) и c вы не учитываете старшее слово.

При вычислении знаменателя - всё то же самое.

Но предположим, что все вычисления умещаются в 16 разрядные регистры ax и bx (к моменту деления в строке 201).
Но команда деления div bx делит не ax, а DX:AX. Т.е. вам нужно или учитывать старшие слова или перед делением обнулить DX.
0
0 / 0 / 1
Регистрация: 24.05.2015
Сообщений: 30
22.01.2017, 18:57  [ТС] 3
Аналогичный код ,но со вводом данных с консоли работает корректно.А этот выводит в файл неправильный результат
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.01.2017, 18:59 4
Перед делением вы очищаете DX?
0
0 / 0 / 1
Регистрация: 24.05.2015
Сообщений: 30
22.01.2017, 19:07  [ТС] 5
Очистил но результат не изменился
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.01.2017, 19:48 6
Если вы не уверены, что вычисления верны, сделайте перед вызовом вычислений замену переменных на эталонные и посмотрите результат.

Добавьте пробный вывод результатов на экран.

Следующий этап - отладчик типа TurboDebugger, Insight.

Я бы сделал это сам, но код слишком велик, не комментирован, не структурирован, и у меня нет входного файла.
0
0 / 0 / 1
Регистрация: 24.05.2015
Сообщений: 30
23.01.2017, 15:26  [ТС] 7
Все разобрался ,спасибо))
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
23.01.2017, 18:43 8
Цитата Сообщение от karpukka Посмотреть сообщение
Все разобрался ,спасибо))
Правила форума CyberForum.ru
4. Порядок создания тем
4.10 => Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ
0
0 / 0 / 1
Регистрация: 24.05.2015
Сообщений: 30
23.01.2017, 19:13  [ТС] 9
При умножении и делении надо было обнулять DX
0
Asm/C++/Delphi/Py/PHP/VBA
6528 / 1973 / 228
Регистрация: 14.12.2014
Сообщений: 4,125
Записей в блоге: 12
23.01.2017, 22:25 10
Цитата Сообщение от karpukka Посмотреть сообщение
При умножении
При умножении точно не надо.
0
23.01.2017, 22:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2017, 22:25
Помогаю со студенческими работами здесь

Вычислить значение выражения
Вычислить условный целочисленный выражение в форматах Integer и Word, используя команды сравнения....

Вычислить значение выражения
Здравствуйте. Уравнение y = (12 + 3/8+6)*3+12. Ошибки: yyyy.asm(4) : invalid character in...

Вычислить значение выражения
Товарищи, помогите пожалуйста! ;Условие ; 2*(b^3+b+c^2) ; X = ---------------. ;...

Вычислить значение выражения
y = x3 +1 _______________________________________ чтото типо такого ----------------------...


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

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