m0_74232340 2023-04-01 22:14 采纳率: 78.6%
浏览 63
已结题

汇编语言与C/C++混合编程

汇编语言与C/C++混合编程;

1、设C程序中有三个全局变量分别为para1、para2和para3,编写一段汇编程序实现变量para1和para2相加,并将结果赋给变量para3。通过C语言程序可以调用该汇编程序sump。

2.设四个数的值分别为x、y、z和w,编写一段汇编程序调用C语言程序,C语言程序实现x*y+z+w,在汇编程序中设置好各参数的值,调用C语言函数asm_ c实现四个数的运算。

  • 写回答

3条回答 默认 最新

  • 晓敏88 2023-04-02 23:05
    关注
    1. 汇编程序实现变量para1和para2相加,并将结果赋给变量para3:
    ; 汇编代码
    global sump
    sump:
        mov eax, DWORD PTR [para1]
        add eax, DWORD PTR [para2]
        mov DWORD PTR [para3], eax
        ret
        
    ; C语言调用
    extern void sump(int* para1, int* para2, int* para3);
    
    int main() {
        int a = 1, b = 2, c;
        sump(&a, &b, &c);
        printf("%d", c); // 输出3
        return 0;
    }
    
    
    1. 汇编程序调用C语言程序,实现x*y+z+w:
    
    // C语言代码
    int asm_c(int x, int y, int z, int w) {
        return x * y + z + w;
    }
    
    // 汇编代码
    global asm_call_c
    asm_call_c:
        push ebp
        mov ebp, esp
        mov eax, DWORD PTR [ebp + 8] ; x
        mov ebx, DWORD PTR [ebp + 12] ; y
        mov ecx, DWORD PTR [ebp + 16] ; z
        mov edx, DWORD PTR [ebp + 20] ; w
        push edx
        push ecx
        push ebx
        push eax
        call asm_c
        add esp, 16
        pop ebp
        ret
    
    // C语言调用
    extern int asm_call_c(int x, int y, int z, int w);
    
    int main() {
        int x = 2, y = 3, z = 4, w = 5;
        int result = asm_call_c(x, y, z, w);
        printf("%d", result); // 输出17
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 创建了问题 4月1日

悬赏问题

  • ¥15 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败