Почему не работает код на ассемблере?
Написал код на си с ассемблерными вставками, сначала вводил все переменные по отдельности, но потом решил упростить, с помощью макросов. Работать перестало, если у кого есть идеи как это изменить, то буду благодарен за помощь.
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
#define vvod (var, msg)\
_asm lea edx, msg\
_asm push edx\
_asm call printf\
_asm pop edx\
_asm lea eax, var\
_asm push eax\
_asm lea ebx\
_asm call scanf\
_asm add esp, 8
int main()
{
int a, b, c, d, e;
int y = 0;
char R[] = "%s %d\n";
char error[] = "error 0\n";
char result[] = "result =";
_asm {
// a
vvod(a, "a:")
// b
vvod(b, "b:")
// c
vvod(c, "c:")
// d
vvod(d, "d:")
jmp Ne_nol
// e
nol:
lea edx, error
push edx;
call printf
pop edx
Ne_nol :
vvod(e, "e:")
mov ebx, e
cmp ebx, 0
je nol
mov eax, a;
sub eax, b;
mov y, eax;
mov eax, c
imul d
idiv e
add eax, y
push eax;
lea edx, result;
push edx;
lea edx, R;
push edx;
call printf
pop edx
pop edx
pop edx
}
getchar();
}
Вот старый код:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <math.h>
int main()
{
int a, b, c, d, e;
int y = 0;
char I[] = "%i";
char A[] = "a: ";
char B[] = "b: ";
char C[] = "c: ";
char D[] = "d: ";
char E[] = "e: ";
char R[] = "%s %d\n";
char error[] = "error 0\n";
char result[] = "result =";
_asm {
lea edx, A
push edx;
call printf
pop edx
lea eax, a
push eax
lea ebx, I
push ebx
call scanf
add esp, 8
lea edx, B
push edx;
call printf
pop edx
lea eax, b
push eax
lea ebx, I
push ebx
call scanf
add esp, 8
lea edx, C
push edx;
call printf
pop edx
lea eax, c
push eax
lea ebx, I
push ebx
call scanf
add esp, 8
lea edx, D
push edx;
call printf
pop edx
lea eax, d
push eax
lea ebx, I
push ebx
call scanf
add esp, 8
jmp Ne_nol
nol:
lea edx, error
push edx;
call printf
pop edx
Ne_nol :
lea edx, E
push edx;
call printf
pop edx
lea eax, e
push eax
lea ebx, I
push ebx
call scanf
add esp, 8
mov ebx, e
cmp ebx, 0
je nol
mov eax, a;
sub eax, b;
mov y, eax;
mov eax, c
imul d
idiv e
add eax, y
push eax;
lea edx, result;
push edx;
lea edx, R;
push edx;
call printf
pop edx
pop edx
pop edx
}
getchar();
}
Источник: Stack Overflow на русском