0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 37
1

Передача параметров через стек

13.10.2013, 17:47. Показов 1704. Ответов 3
Метки нет (Все метки)

Здравствуйте . Вот есть задача решить уравнение 2*d/3*c - 6*c*d , используя внешние процедуры. Передавать параметры нужно через стек . Если передавать через общую память , то всё получается . А вот со стеком пишет про какие-то ошибки с размером .
главная программа:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.386
.model flat
extern calculator1:proc   ;назва зовніщньої процедури
option casemap:none
.data
d  dd 2410
_c dd 95
op1 dd 2
op2 dd 3
op3 dd 6
.code
_Start:
push  op3
push  op2
push  _c
push  op1
push  d
call calculator1
ret 
end _Start
подпрограмма:
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
.386
.model flat
public calculator2
.data
res1 dd 0
res2 dd 0
res3 dd 0
res4 dd 0
res5 dd 0
.code
calculator1 proc
push ebp
mov ebp,esp
mov eax,[ebp+8]
mul [ebp+12]
mov res1,eax
mov eax,[ebp+16]
mul [ebp+20]
mov res2,eax
mov eax,[ebp+16]
mul [ebp+24]
mov res3,eax
mul [ebp+8]
mov res4,eax
mov eax,res1
mov ebx,res2
mov edx,0
idiv ebx
mov res1,eax
mov res2,edx
mov ebx,res4
sbb res1,ebx
mov eax,res1
 
ret
calculator2 endp
end
я не могу понять , в чём проблема. помогите пожалуйста с этой задачей разобраться .заранее огромное спасибо за помощь !


вот моя реализация с общей областью памяти , всё работает :
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.386
.model flat
extern calculator1:proc   ;назва зовніщньої процедури
public d,_c,op1,op2,op3,res1,res2,res3,res4,res5
option casemap:none
.data
d dd 2410
_c dd 95
op1 dd 2
op2 dd 3
op3 dd 6
res1 dd 0
res2 dd 0
res3 dd 0
res4 dd 0
res5 dd 0
.code
_Start:
call calculator1
ret 
end _Start
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
.386
.model flat
public calculator1
extern d:dword,_c:dword,op1:dword,op2:dword,op3:dword,res1:dword,res2:dword,res3:dword,res4:dword,res5:dword
.code
calculator1 proc
mov eax,d
mul op1
mov res1,eax
mov eax,_c
mul op2
mov res2,eax
mov eax,_c
mul d
mov res3,eax
mul op3
mov res4,eax
mov eax,res1
mov ebx,res2
mov edx,0
idiv ebx
mov res1,eax
mov res2,edx
mov ebx,res4
sbb res1,ebx
mov eax,res1
 
ret
calculator1 endp
end
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2013, 17:47
Ответы с готовыми решениями:

Передача параметров через стек
Здравствуйте! Подскажите как можно переменную передать через стек в качестве параметров и как...

Передача параметров через стек. Тип процедуры – ближний
Всем привет! Есть задание: Ввести 8-битовое целое число А. Если оно четное, вычислить значение...

Внешняя процедура, выполняющая сложение двух чисел (передача параметров через стек)
Помогите, пожалуйста!!!! Написать прорамму с внешней процедурой, выполняющую сложение 2 чисел с...

Перенос параметров через стек
Доброго времени суток . Даны два массива , заменить элемент массива кратный 5 на первый...

3
193 / 189 / 18
Регистрация: 06.10.2013
Сообщений: 358
14.10.2013, 07:27 2
_Mars_, при возврате из процедуры сделайте
Код
pop ebp
ret 20
0
1668 / 828 / 251
Регистрация: 26.05.2012
Сообщений: 3,060
23.08.2015, 12:52 3
Assembler
1
2
3
calculator1 proc
    ;тело процедуры
calculator2 endp
ха-ха-ха) а почему описание процедуры начинается одним именем, а заканчивается совсем другим. поскольку в основном модуле процедура calculator1 объявляется внешней и она же вызывается, то замените имя, которой заканчивается процедура на calculator1. тогда же именно ее придется и объявить общедоступной во втором модуле программы.
Assembler
1
public calculator1
есть еще замечание по внутренности процедуры calculator1. обнуляя регистр dx вы этим говорите, что число в dx:ax обязательно должно быть положительным. но после ее же указываете команду знакового деления. получается несостыковка.
Цитата Сообщение от _Mars_ Посмотреть сообщение
mov eax,res1
mov ebx,res2
mov edx,0
idiv ebx
предлагаю заменить команду
Assembler
1
mov edx,0
на
Assembler
1
cdq
0
Ушел с форума
Автор FAQ
15035 / 7230 / 901
Регистрация: 11.11.2010
Сообщений: 12,981
23.08.2015, 14:10 4
proc3nt,
ей богу, за любовь к мертвечине стоит наказывать, или вы специально пытаетесь решить проблемы пользователей, которые возникли три и более года назад?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2015, 14:10

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

[JWASM] Организовать вызов собственных процедур с передачей параметров через стек
подскажите пожалуйста как в jwasm на 64 бит сделать так чтобы апи функции вызывались через RCX RDX...

Передача через стек параметры в процедуру
Пытаюсь реализовать первое действие. Точнее проверить его. Реализовать в процедуре действие...

Передача параметров через регистры процесора
Написать программу используя подпрограмму-(программа изменяет все буквы на большие)!!!Передача...

печать строки. передача строки через стек
c1 segment assume cs:c1, ds:c1, ss:c1 org 100h start: jmp setup prg proc pop dx mov...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru