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

汇编语言与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日

悬赏问题

  • ¥50 关于#微信小程序#的问题:微信小程序支持h5实现webrtc h264 h265低延迟传输渲染,能付费帮我们解决一下吗
  • ¥20 请问ansys License manager 这个问题如何解决
  • ¥15 memory.limit()' is no longer supported
  • ¥15 基于stm32f4产生两路pwm信号并可由串口通信调节
  • ¥15 C++/QT设置函数调用条件(多个功能调用同一,且各自调用条件不同)
  • ¥15 UE5样条线生成的网格UV问题
  • ¥15 如何用最短的时间大致看懂springboot+vue的项目
  • ¥15 (有偿)懂数值分析和含时变参数微分方程的来
  • ¥15 abaqus随机生成二维颗粒
  • ¥15 安装ansys许可证管理器时出现了这个问题,如何解决?