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

Вычисление значения выражения y=(2*c-d+23)/(a/4-1)

05.11.2017, 22:42. Просмотров 1003. Ответов 7
Метки нет (Все метки)

Ребята, помогите, пожалуйста, найти ошибку в программе, которая вычисляет значение выражения y=(2*c-d+23)/(a/4-1)

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
.386
.model flat,stdcall
option casemap:none
include ..\INCLUDE\kernel32.inc 
include ..\INCLUDE\user32.inc 
includelib ..\LIB\kernel32.lib 
includelib ..\LIB\user32.lib 
BSIZE equ 15   
 
.data
ifmt db "%d", 0     ;строка формата
stdout dd ?         
cWritten dd ?
CRLF WORD ?
 
.data?
buf db BSIZE dup(?) ;буфер
.code
start:
invoke GetStdHandle, -11 
mov stdout,eax 
mov CRLF, 0d0ah
 
mov ecx,[d]
mov eax,[c]
mul eax,2
sub eax, d
add eax, 23
mov ebx,[a]
mov edx, 0
div ebx, 4
sub ebx, 1
div eax, ebx
mov [y], eax
c dd 3
d dd 2
a dd 16
y dd ?
 
invoke wsprintf, ADDR buf, ADDR ifmt, eax
invoke WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0
 
invoke ExitProcess,0  
end start
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2017, 22:42
Ответы с готовыми решениями:

Вычисление значения выражения (2c-42)/(c+a-1)
Дано вот такое выражение: (2c-42)/(c+a-1). Нужно вычислить его значение. MASM MODEL SMALL...

Вычисление значения выражения: (с/d + 3*а/2)/(c - а + 1)
Помогите пожалуйста, вычислить (с/d + 3*а/2)/(c - а + 1) для исходных данных в знаковых форматах...

Вычисление значения выражения: (3*c-2*d)/(a)
Помогите пожалуйста, вычислить (3*c-2*d)/(a).

Вычисление значения выражения
Здравствуйте. Просматриваю код через дебаг и почему то у меня регист dx обнуляется (черным...

Вычисление значения выражения
Добрый день! Подскажите как записать этот пример в ассемблер? X=\frac{({A}^{2}+D)}{C-B}

7
nmcf
6527 / 5751 / 2621
Регистрация: 14.04.2014
Сообщений: 24,493
06.11.2017, 23:56 2
c, d, a, y почему не в data?
0
ФедосеевПавел
Модератор
4306 / 2381 / 954
Регистрация: 01.02.2015
Сообщений: 7,846
07.11.2017, 06:55 3
И ещё, masm почему-то "не любит" переменную с именем "C". Так что нужно её переименовать по всей программе.
0
Farshik
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 24
11.11.2017, 10:54  [ТС] 4
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
И ещё, masm почему-то "не любит" переменную с именем "C". Так что нужно её переименовать по всей программе.
Вот, немного подправила, но всё равно не получается не могли бы Вы помочь новичку, пожалуйста? )
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
.386
.model flat,stdcall
option casemap:none
include ..\INCLUDE\kernel32.inc 
include ..\INCLUDE\user32.inc 
includelib ..\LIB\kernel32.lib 
includelib ..\LIB\user32.lib 
BSIZE equ 15   
 
.data
ifmt db "%d", 0     ;строка формата
stdout dd ?         
cWritten dd ?
CRLF WORD ?
 
.data?
buf db BSIZE dup(?) ;буфер
e dd 3
d dd 2
a dd 16
y dd ?
.code
start:
invoke GetStdHandle, -11 
mov stdout,eax 
mov CRLF, 0d0ah
 
mov ecx,[d]
mov eax,[e]
mul eax,2
sub eax, d
add eax, 23
mov ebx,[a]
mov edx, 0
div ebx, 4
sub ebx, 1
div eax, ebx
mov [y], eax
 
invoke wsprintf, ADDR buf, ADDR ifmt, eax
invoke WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0
 
invoke ExitProcess,0  
end start
0
11.11.2017, 10:54
ФедосеевПавел
Модератор
4306 / 2381 / 954
Регистрация: 01.02.2015
Сообщений: 7,846
11.11.2017, 12:24 5
Внешне похоже на правильно, чуть позже внимательнее посмотрю.
0
Farshik
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 24
11.11.2017, 18:19  [ТС] 6
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Внешне похоже на правильно, чуть позже внимательнее посмотрю.
Спасибо огромное!
0
ФедосеевПавел
Модератор
4306 / 2381 / 954
Регистрация: 01.02.2015
Сообщений: 7,846
12.11.2017, 00:02 7
Лучший ответ Сообщение было отмечено Farshik как решение

Решение

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
.386
.model flat,stdcall
option casemap:none
include ..\INCLUDE\kernel32.inc
include ..\INCLUDE\user32.inc
includelib ..\LIB\kernel32.lib
includelib ..\LIB\user32.lib
BSIZE equ 15
 
.data
ifmt db "%d", 0     ;строка формата
stdout dd ?
cWritten dd ?
CRLF WORD ?
e dd 3
d dd 2
a dd 16
 
.data?
buf db BSIZE dup(?) ;буфер
y dd ?
.code
start:
invoke GetStdHandle, -11
mov stdout,eax
mov CRLF, 0d0ah
 
;y=(2*c-d+23)/(a/4-1)
;ebx=(2*c-d+23)
mov eax,[e]
mov ebx, 2
imul ebx
sub eax, [d]
add eax, 23
mov ebx, eax
;ecx=(a/4-1)
mov eax,[a]
cdq
mov ecx, 4
idiv ecx
sub eax, 1
mov ecx, eax
;eax=(2*c-d+23)/(a/4-1)
mov eax, ebx
idiv ecx
;y=(2*c-d+23)/(a/4-1)
mov [y], eax
 
invoke wsprintf, ADDR buf, ADDR ifmt, eax
invoke WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0
 
invoke ExitProcess,0
end start
1
Farshik
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 24
12.11.2017, 10:35  [ТС] 8
Спасибо Вам большое ещё раз! Очень помогли!
0
12.11.2017, 10:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2017, 10:35

Вычисление значения выражения (x^3-15)
Прошу помощи с задачей: "Необходимо ввести с клавиатуры число X и вычислить значение выражения...

Вычисление значения выражения (debug)
F=12569-(12+(Х-un long)-(Y-un char))+(Z-un int)+3699 Mov ax,1000 ; записываем в ax слово 1000...

Вычисление значения математического выражения
Можете написать код для вычисления следующего выражения: y = y1 - y2 , если: 1) y1 =...


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

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

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