#include <stdio.h>extern"C"int CalcSum(int a, int b, int c);
int main(int argc, char *argv[])
{
int a=17, b=11, c=14;
int sum = CalcSum(a,b,c);
printf(" a: %d\n", a);
printf(" b: %d\n", b);
printf(" c: %d\n", c);
printf(" sum: %d\n", sum);
return0;
}
calcsum.asm
; Name: calcsum.asm;; Build: g++ -m32 -c main.cpp -o main.o; nasm -f elf32 -o calcsum.o calcsum.asm; g++ -m32 -o calcsum calcsum.o main.o;; Source: Modern x86 Assembly Language Programming p.29global CalcSum
section .text
; extern "C" int CalcSum(int a, int b, int c);;; Description: This function demonstrates passing arguments between; a C++ function and an assembly language function in; Linux with gcc and nasm.;; Returns: a + b + c%define a [ebp+8]%define b [ebp+12]%define c [ebp+16]CalcSum:pushebpmovebp,espmoveax,a
addeax,b
addeax,c
popebpret