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日

悬赏问题

  • ¥50 gki vendor hook
  • ¥15 centos7中sudo命令无法使用
  • ¥15 灰狼算法和蚁群算法如何结合
  • ¥15 这是一个利用ESP32自带按键和LED控制的录像代码,编译过程出现问题,请解决并且指出错误,指导如何处理 ,协助完成代码并上传代码
  • ¥20 stm32f103,hal库 hal_usart_receive函数接收不到数据。
  • ¥20 求结果和代码,sas利用OPTEX程序和D-efficiency生成正交集
  • ¥50 adb连接不到手机是怎么回事?
  • ¥20 抓取数据时发生错误: get_mooncake_data() missing 1 required positional argument: 'driver'的问题,怎么改出正确的爬虫代码?
  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联