Передача параметров через стек - 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