Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Captain234
0 / 0 / 0
Регистрация: 07.11.2019
Сообщений: 1
1

Найти ошибку в коде

07.11.2019, 18:09. Просмотров 196. Ответов 11
Метки нет (Все метки)

Не работает код. При любых значениях а,б или с выдаёт 0

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
temp dd 0
temp_2 dd 0
temp_3 dd 0
temp_4 dd 0
temp_main dd 0
temp_main_2 dd 0
a           dd 15
b           dd 20
d           dd 30
 
 
mov eax, b 
imul eax, 4
mov temp, eax
 
 
mov eax, temp
mov ebx, d
cdq
idiv ebx
mov eax, temp_2
 
mov eax, temp_2
dec eax
mov temp_main, eax
 
mov eax, d
imul eax, 12
mov temp_3, eax
 
mov eax, temp_3
mov ebx, a
add  eax, ebx
mov temp_4, eax
 
mov eax, b
mov ebx, temp_4
sub eax, ebx
mov temp_main_2, eax
 
mov eax, temp_main
mov ebx, temp_main_2
cdq
idiv ebx
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2019, 18:09
Ответы с готовыми решениями:

11

ФедосеевПавел
Модератор
4732 / 2633 / 1051
Регистрация: 01.02.2015
Сообщений: 8,616
Записей в блоге: 1
07.11.2019, 18:15 2
Значит и не должен. Потому, как не понятно в чём его работа. Думаю, что формула так построена, чтобы не учитывать значения переменных.
0
liv
2457 / 1654 / 269
Регистрация: 07.10.2015
Сообщений: 3,978
Завершенные тесты: 1
08.11.2019, 12:53 3
Captain234, не смущает фрагмент?
Assembler
1
2
3
4
5
6
idiv ebx
mov eax, temp_2  ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
mov eax, temp_2
dec eax
mov temp_main, eax
1
Constantin Cat
9904 / 1441 / 414
Регистрация: 28.02.2015
Сообщений: 2,944
Завершенные тесты: 1
08.11.2019, 13:57 4
Цитата Сообщение от liv Посмотреть сообщение
не смущает фрагмент
А что не так, потеряны вычисления 4*В / 30 = 80 / 30
Для новичка это нормально.

Дальше "чудесатей":
Следующие строчки - нормальный способ получить -1, т.е. temp_main = -1
Дальше считаем 12*30 = 360 +15 = 375

и вычисляем 1 / 375 в целой части 0х0000, отсюда и
Цитата Сообщение от Captain234 Посмотреть сообщение
При любых значениях а,б или с выдаёт 0
Но на дробную часть никто не смотрит, а там 0xFFFF

Добавлено через 3 минуты
Ой пропустил 20-375 = 355
Но все равно 1/355 дает целую часть 0
0
08.11.2019, 13:57
liv
2457 / 1654 / 269
Регистрация: 07.10.2015
Сообщений: 3,978
Завершенные тесты: 1
08.11.2019, 14:05 5
Constantin Cat, да, задание то еще... Даже тяжело подобрать эти a,b,d, чтобы не получить в итоге 0
0
Constantin Cat
9904 / 1441 / 414
Регистрация: 28.02.2015
Сообщений: 2,944
Завершенные тесты: 1
08.11.2019, 14:09 6
Цитата Сообщение от liv Посмотреть сообщение
да, задание то еще
И по коду если смотреть,
Assembler
1
2
mov temp_3, eax
mov eax, temp_3
это какой-то компилятор писал, без оптимизации(паскаль любит такие фокусы).
0
liv
2457 / 1654 / 269
Регистрация: 07.10.2015
Сообщений: 3,978
Завершенные тесты: 1
08.11.2019, 14:15 7
Constantin Cat, ну, для новичка простительно...
Я это пропустил мимо глаз
0
Constantin Cat
9904 / 1441 / 414
Регистрация: 28.02.2015
Сообщений: 2,944
Завершенные тесты: 1
08.11.2019, 14:23 8
Цитата Сообщение от liv Посмотреть сообщение
Я это пропустил мимо глаз
Assembler
1
2
mov eax, temp_2
mov eax, temp_2
Скорее всего из-за такого писания тут должно быть:
Assembler
1
2
mov temp_2,eax
mov eax, temp_2
Но все равно там получается 1 вместо -1.
0
liv
2457 / 1654 / 269
Регистрация: 07.10.2015
Сообщений: 3,978
Завершенные тесты: 1
08.11.2019, 14:26 9
Constantin Cat, именно на это и указывал в первом посте
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Но все равно там получается 1 вместо -1
Ну да, ну да... Потому и добавил потом:
Цитата Сообщение от liv Посмотреть сообщение
Даже тяжело подобрать эти a,b,d, чтобы не получить в итоге 0
0
Constantin Cat
9904 / 1441 / 414
Регистрация: 28.02.2015
Сообщений: 2,944
Завершенные тесты: 1
08.11.2019, 15:27 10
Цитата Сообщение от liv Посмотреть сообщение
Даже тяжело подобрать эти a,b,d, чтобы не получить в итоге 0
Если А,В,С меняются от 1 до 40 таких комбинаций 3258
10 36 1 10.21429
10 36 2 35.50000
10 36 3 -4.70000
10 36 4 -1.59091
10 37 1 9.80000
10 37 2 24.33333
10 37 3 -5.37037
10 37 4 -1.71429
10 38 1 9.43750
10 38 2 18.75000
10 38 3 -6.20833
10 38 4 -1.85000
10 39 1 9.11765
10 39 2 15.40000
10 39 3 -7.28571
10 39 4 -2.00000
10 40 1 8.83333
10 40 2 13.16667
10 40 3 -8.72222
10 40 4 -2.16667
0
liv
2457 / 1654 / 269
Регистрация: 07.10.2015
Сообщений: 3,978
Завершенные тесты: 1
08.11.2019, 15:43 11
Constantin Cat, явно не те, что фигурируют в задании
А вот так, наобум, без понимая, что происходит, легко сделать вывод, что всегда 0.

Добавлено через 3 минуты
А с допущенной ошибкой вообще всегда 0. Разве что, получить в знаменателе 1, если это возможно, конечно
Только вот где ТС? Кинул вопрос и в кусты... Уже и не надо
1
Constantin Cat
9904 / 1441 / 414
Регистрация: 28.02.2015
Сообщений: 2,944
Завершенные тесты: 1
08.11.2019, 15:57 12
Цитата Сообщение от liv Посмотреть сообщение
явно не те, что фигурируют в задании
15 20 1 -11.28571
15 20 2 -2.05263
Просто ТС не хотел с карандашиком сидеть или отладчиком проверить.
1
08.11.2019, 15:57
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2019, 15:57

Исправить ошибку в коде (Operand types do not match)
data SEGMENT byte ;Сегмент даних a1 db 1 ;Елементи даних a2 db 2...

Двумерный массив. Поиск нулей.Не могу найти ошибку ошибку в коде
Вот,например массив 5 5 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 считываются два...

Найти сумму целых отрицательных чисел удовлетворяющих условию (найти и исправить ошибку в коде)
#include<iostream> #include<math.h> using namespace std; int main() { int y = 0; ...


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

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

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