首页 > 编程语言 >Visual Studio C++ 汇编 混合编程

Visual Studio C++ 汇编 混合编程

时间:2024-12-19 21:58:39浏览次数:6  
标签:GCD int C++ eax Visual Studio edx ebx gcd

Visual Studio C++ 汇编 混合编程

实验要求

请用汇编语言编写实现GCD递推公式的子程序,对入口和出口参数形式不做要求,但需要用 C 语言函数来获取输入、调用汇编递推子程序,并且用 C 语言显示子程序返回的结果。

Visual Studio 2020 下载

下载时勾选C++桌面开发选项。

环境配置

选择 文件->新建->项目 ,语言选择 C++ ,选择 空项目

修改环境配置为 x86

在项目中新建 gcd.asmt.cpp 或将这两个文件添加到项目中。

右键项目,选择 生成依赖项->生成自定义,勾选 masm 选项。

右键 gcd.asm 文件,选择 属性

从生成中排除 选择

项类型 选择 Microsoft Macro Assembler

在编译运行的时候出现如下错误:

scanf‘: This function or variable may be unsafe.Consider using scanf_s instead

相关问题的解答 Link

可以在 .cpp 文件的头文件加入 #define _CRT_SECURE_NO_WARNINGS

Code

cpp 文件

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

// 声明外部汇编函数
extern "C" int GCD(int a, int b);

int main() {
    int a, b, result;

    // 获取用户输入
    printf("请输入两个整数以计算其最大公约数:");
    scanf("%d %d", &a, &b);

    // 调用汇编函数
    result = GCD(a, b);

    // 输出结果
    printf("数字 %d 和 %d 的最大公约数是:%d\n", a, b, result);

    return 0;
}

asm文件

.model flat, c
.code
public GCD       ; 声明函数为公共,可以被外部调用

GCD proc
    mov eax, [esp+4] ; 获取第一个参数 a (位于 esp+4)
    mov ebx, [esp+8] ; 获取第二个参数 b (位于 esp+8)

gcd_loop:
    cmp ebx, 0       ; 如果 b == 0,跳转到结束
    je gcd_done
    xor edx, edx     ; 清空 edx,避免余数计算时的干扰
    div ebx          ; eax = eax / ebx,余数存入 edx
    mov eax, ebx     ; a = b
    mov ebx, edx     ; b = a % b
    jmp gcd_loop

gcd_done:
    ret              ; 返回结果存于 eax
GCD endp

end

标签:GCD,int,C++,eax,Visual,Studio,edx,ebx,gcd
From: https://www.cnblogs.com/Varuxn/p/18618005

相关文章

  • LVGL学习 - Visual Studio外部“.c.h”文件添加
    一、首先把文件添加至工程,现有项选择所需添加的“.c.h”文件但还是会有如下报错,解决方法在第2步。二、“.c”文件需要添加“extern"C"”下图截至官方文档我试了只添加“extern"C"”,多个地方添加过还是不行,后面仿照LVGL官方代码,添加如下图,原报错搞定。点击查看代码#ifd......
  • 深入理解C语言和C++中struct的区别
    大家好!我是兔飞飞!今天学习struct结构体,主要从c语言和c++的对比出发,这样更好辨析,应该大部分人都是先学c语言,再学的c++?1.C中struct的特点在C中,struct主要是用来定义一个包含多个数据成员的数据结构。结构体在C中只能包含数据成员,而不能包含函数。以下是C中struct......
  • 《C++Primer Plus(第6版)中文版》关键知识点笔记汇总(关键框架)
    前言《C++PrimerPluse(第6版)中文版》(后文简称CPPPP)是一部经典的C++入门书籍,作为入门书籍给我的感觉却是劝退,所以我也建议读者在读CPPPP前了解C语言或C++,他的优点也是他的缺点——讲解过细过深,有写地方深入但没有讲透彻让读者晕头转向,在加上翻译问题更是让很多人读不下去,这......
  • 「C/C++」C/C++ 之 用头文件作为程序的配置文件
    ✨博客主页何曾参静谧的博客(✅关注、......
  • 【深入STL:C++容器与算法】深度解析string类的使用
    文章目录1️⃣什么是stringstring的设计以及编码问题2️⃣string的重要接口......
  • Android studio的版本
    文章目的在下载Androidstudio时,能更好的了解安装的版本信息。声明本文章供大家学习借鉴和参考,请大家理性判断。1.事件起因第一次下载Androidstudio时,了解到下载最新版的可能会存在一些bug,而且以前电脑上要是有项目的化还会出现不兼容的问题,所以打算找一个之前的稳定版......
  • 在Android Studio中,通过设置腾讯镜像和代理解决无法下载gradle和gradle.plugin等组件
    诸神缄默不语-个人CSDN博文目录这个出现在刚打开项目的时候,下载一堆必要的组件……无法下载gradle的报错信息是:CouldnotinstallGradledistributionfrom'https://services.gradle.org/distributions/gradle-8.9-bin.zip'.Reason:java.net.SocketTimeoutException:......
  • Linux C/C++编程的线程结束
    【图书推荐】《LinuxC与C++一线开发实践(第2版)》_linuxc与c++一线开发实践pdf-CSDN博客《LinuxC与C++一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要书评试读】-京东图书(jd.com)Linux系统与编程技术_夏天又到了的博客-CSDN博客LinuxC/C++编程的线程创建-CSDN......
  • c++死锁调试 ,gdb pstack
    psatck‌pstack命令‌是一个在Linux系统中用于查看进程堆栈信息的工具。写了一个服务端死锁程序,如下:#include<iostream>#include<thread>#include<mutex>#include<chrono>#include<sys/socket.h>#include<netinet/in.h>#include<unistd.h>#......
  • 教你成为学霸第一期——深入了解C / C++ / Python / Java 语言的优势与劣势
     给我一点时间,我可以将你从小白变成资深学霸目录C语言一、优势(一)高效性与速度(二)简洁性与灵活性(三)可移植性(四)丰富的库支持二、劣势(一)复杂的语法和指针操作(二)缺乏现代编程特性(三)内存管理手动性(四)开发效率相对较低C++语言一、优势(一)面向对象编程特性(二)高效性......