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

TASM: divide by zero

17.10.2017, 20:57. Показов 1712. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Нужно написать программу на ассемблере, которая вычисляет следующую дробь:


a = 2; b = 7; с = -3;

x=(7*a*b-4*b*c)/(a^2-b*(a+1))


Получаю ошибку divide by zero, подскажите, пожалуйста, что не так?

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
SSEG segment stack
db 400h dup (?)
SSEG ends
 
    
data segment PARA 'data'
 a  db 2
 b db 7
 c db -3
 
 
 x db ?
 
data ends
 
code SEGMENT PARA 'code'
   assume ds:data,cs:code
    start proc far
    ;------return to DOS
    
    push ds
    sub ax, ax
    push ax
    ;------zanesenie v registr ds adresa segmenta
     mov ax, data
  mov  ds, ax
  ;------NACHALO PROGI
  mov al, b ;b
  
  imul b   ;b^2
  imul a   ;7*b*a
  
  mov bl,al    ;bl:=7*b*a
  
  
 mov al,b   ;b
 imul c    ;b*c
 imul 7    ;b*c*7
 
 sub bl,al    ;7*b*a-4*b*c rez v bl
 ;chislitel v bl
 ;CHISLITEL GOTOV
 
 
 mov bl,al   ;chislitel v bl=a^3+b*c/a
 
 mov al,a    ;v al a
 imul a    ;v al a^2
 mov bh, al   ;v bh=a^2
 mov al,a   ; v al a
 add al,1    ; v al a+1
 imul b    ;v al (a+1)*b
 sub bh,al    ;v bh a^2-b*(a+1)
 ;znamenatel v bh
 ;znamenatel GOTOV
 
 mov al,bl   ;chisl v al
 cbw
 
 idiv bh   ;v al chastnoe
 mov x, al  ; x=al
 st_ret:ret
 start endp
code ends
end start
 
  
 
 
 
 cbw   ;podgotovka k deleniu
 
 idiv bh  ;v al chastnoe
 mov x, al  ;x:=al
 st_ret:ret
 start endp
code ends
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2017, 20:57
Ответы с готовыми решениями:

Divide error
Привет всем. Пишу ассемблерную вставку для вычисления выражения. Не пойму где ошибаюсь. Использую...

divide overflow
дебагом ничего подозрительного не выявил, от чего оно лезет ? STAK SEGMENT para stack 'stack' dw...

divide overflow
наверно,у меня уже крыша едет работаю в консоли,в конце выводит "divide overflow" смотрю через...

Ошибка divide overflow
Как ни пытаюсь, никак не получается. masm model small .stack 100h .data otvet df '','$' ...

6
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
17.10.2017, 21:11 2
Попробуйте выполнить программу по шагам в отладчике td (Turbo Debugger).
Увидите содержимое регистров и строку с ошибкой.

Добавлено через 8 минут
Я не смог скомпилировать пример ни tasm ни masm.
Чем компилируете?
0
0 / 0 / 0
Регистрация: 20.03.2017
Сообщений: 15
17.10.2017, 21:24  [ТС] 3
Не тот файл приложила.
Вот, этот компилируется

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
SSEG segment stack
db 400h dup (?)
SSEG ends
 
    
data segment PARA 'data'
 a  db 2
 b db 7
 c db -3
 
 
 mn_1 db 4
 x db ?
 
data ends
 
code SEGMENT PARA 'code'
   assume ds:data,cs:code
    start proc far
    ;------return to DOS
    
    push ds
    sub ax, ax
    push ax
    ;------zanesenie v registr ds adresa segmenta
     mov ax, data
  mov  ds, ax
  ;------NACHALO PROGI
  mov al, b ;b
  
  imul b   ;b^2
  imul a   ;7*b*a
  
  mov bl,al    ;bl:=7*b*a
  
  
 mov al,b   ;b
 imul c    ;b*c
 imul mn_1   ;b*c*4
 
 sub bl,al    ;7*b*a-4*b*c rez v bl
 ;chislitel v bl
 ;CHISLITEL GOTOV
 
 
 mov bl,al   ;chislitel v bl=a^3+b*c/a
 
 mov al,a    ;v al a
 imul a    ;v al a^2
 mov bh, al   ;v bh=a^2
 mov al,a   ; v al a
 add al,1    ; v al a+1
 imul b    ;v al (a+1)*b
 sub bh,al    ;v bh a^2-b*(a+1)
 ;znamenatel v bh
 ;znamenatel GOTOV
 
 mov al,bl   ;chisl v al
 cbw
 xor dx,dx
 idiv bh   ;v al chastnoe
 mov x, al  ; x=al
 st_ret:ret
 start endp
code ends
end start
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
17.10.2017, 21:52 4
Глаз-да-глаз

Добавлено через 6 минут
Этот код без ошибок выполняется.

Добавлено через 4 минуты
Единственно, вы читаете какую-то древнюю книгу. Очень древнюю.
Начало сегмента кода
Assembler
1
2
3
4
5
code SEGMENT PARA 'code'
   assume ds:data,cs:code
    start proc far
     mov ax, data
  mov  ds, ax
Завершение
Assembler
1
2
3
4
5
6
st_ret:
    mov ax, 4C00h
    int 21h
 start endp
code ends
end start
0
0 / 0 / 0
Регистрация: 20.03.2017
Сообщений: 15
17.10.2017, 22:16  [ТС] 5
Спасибо, исправила. Методичка такая.
Запускаю через dos box, завершается сообщением: terminated, exit code 0
Так и должно быть?
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
17.10.2017, 22:18 6
Да. Это код завершения программы. Если он равен 0, то всё в порядке.
Код завершения вы сами формируете в заключительных строках
Assembler
1
2
3
st_ret:
    mov ax, 4C00h   ;  <---  00 - это и есть код завершения программы, можно заменить на другой
    int 21h
0
0 / 0 / 0
Регистрация: 20.03.2017
Сообщений: 15
17.10.2017, 22:20  [ТС] 7
Спасибо Вам огромное! Очень помогли!
0
17.10.2017, 22:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2017, 22:20
Помогаю со студенческими работами здесь

Divide error в программе (emu8086)
Учусь на 2-ом курсе, задали несколько задач по эмулятору. В одной из задач надо обязательно разбить...

Divide by zero assembler Откуда вообще ошибка
Доброго времени суток, с наступающим ! Буду признателен в помощи решения ошибки.. 5....

ошибка: divide overflow не могу справиться. кто подскажет?
ошибка: divide overflow не могу справиться. кто подскажет?

Почему приведенный код выдает сообщение divide overflow
Помогите, пожалуйста, не могу разобраться почему выдает сообщение divide overflow( вроде push и pop...


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

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