Передача параметров через стек - Assembler (224494)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте . Вот есть задача решить уравнение 2*d/3*c - 6*c*d , используя внешние процедуры. Передавать параметры нужно через стек . Если передавать через общую память , то всё получается . А вот со стеком пишет про какие-то ошибки с размером . главная программа:
.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
подпрограмма:
.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
я не могу понять , в чём проблема. помогите пожалуйста с этой задачей разобраться .заранее огромное спасибо за помощь ! вот моя реализация с общей областью памяти , всё работает :
.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
.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

Решение задачи: «Передача параметров через стек»

textual
Листинг программы
cdq

Оцени полезность:

8   голосов , оценка 3.875 из 5