jovin555
November 15th, 2015, 07:59 PM
I am new to linux assembly language programming and am doing coding with basic addition and multiplication and getting wrong output.Following is my output
jovin@jovin-desktop ~/Documents/Linuxasmpgm/examples/tute4 $ ./runme
Give us a number:1
2nd number:2
3rd number:3
4th number:4
Sum of ints is 5
1x17 is 0
1-5x2is 0
The following is my code[main.cpp]
#include <iostream>
using namespace std;
extern "C" int AddInts(int a,int b,int c,int d);
extern "C" int MulBy17(int b);
extern "C" int Sub5x(int a,int b);
int main()
{
int a,b,c,d;
cout<<"Give us a number:";
cin>>a;
cout<<"2nd number:";
cin>>b;
cout<<"3rd number:";
cin>>c;
cout<<"4th number:";
cin>>d;
cout<<"Sum of ints is "<<AddInts(a,b,c,d)<<endl;
cout<<a<<"x17 is "<<MulBy17(b)<<endl;
cout<<a<<"-5x"<<b<<"is "<<Sub5x(a,b)<<endl;
cout<<endl;
return 0;
}
asm.asm
global AddInts
global MulBy17
global Sub5x
section .text
AddInts:
mov eax,edi
add eax,esi
add eax,ecx
add eax,edx
ret
MulBy17:
imul edi,17
mov eax,edi
ret
Sub5x:
imul esi,5
sub edi,esi
mov eax,edi
ret
makefile
runme: main.cpp asm.o
g++ main.cpp asm.o -o runme
asm.o: asm.asm
nasm -f elf asm.asm -o asm.o
Can anyone let me know what is wrong with my coding?
jovin@jovin-desktop ~/Documents/Linuxasmpgm/examples/tute4 $ ./runme
Give us a number:1
2nd number:2
3rd number:3
4th number:4
Sum of ints is 5
1x17 is 0
1-5x2is 0
The following is my code[main.cpp]
#include <iostream>
using namespace std;
extern "C" int AddInts(int a,int b,int c,int d);
extern "C" int MulBy17(int b);
extern "C" int Sub5x(int a,int b);
int main()
{
int a,b,c,d;
cout<<"Give us a number:";
cin>>a;
cout<<"2nd number:";
cin>>b;
cout<<"3rd number:";
cin>>c;
cout<<"4th number:";
cin>>d;
cout<<"Sum of ints is "<<AddInts(a,b,c,d)<<endl;
cout<<a<<"x17 is "<<MulBy17(b)<<endl;
cout<<a<<"-5x"<<b<<"is "<<Sub5x(a,b)<<endl;
cout<<endl;
return 0;
}
asm.asm
global AddInts
global MulBy17
global Sub5x
section .text
AddInts:
mov eax,edi
add eax,esi
add eax,ecx
add eax,edx
ret
MulBy17:
imul edi,17
mov eax,edi
ret
Sub5x:
imul esi,5
sub edi,esi
mov eax,edi
ret
makefile
runme: main.cpp asm.o
g++ main.cpp asm.o -o runme
asm.o: asm.asm
nasm -f elf asm.asm -o asm.o
Can anyone let me know what is wrong with my coding?