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

Visual Studio C++ 汇编 混合编程的更多相关文章

  1. Visual Studio中创建混合移动应用程序解决方案Xamarin Portable Razor

    在Visual Studio中创建混合移动应用程序的一个解决方案是使用Xamarin Portable Razor工具,这是ASP.NET MVC API针对移动设备的一个轻量级实现.Xamarin编 ...

  2. ARM中C和汇编混合编程及示例(转)

    在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...

  3. C51与汇编混合编程详解

    C51和汇编混合编程(1)-C语言中嵌入汇编 1.在 C文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ;Assembler Code Here #pragma ENDASM ...

  4. c语言环境初始化&c语言和汇编混合编程

    bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启 ...

  5. 【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程

    最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGe ...

  6. visual studio 2015下python编程的中文字符串问题

    visual studio 2015强大的编程功能,编写起python来也是非常方便的,但其对中文字符的支持不是很好,经常发生莫名其妙的错误,最常见的错误是不报错,也不执行代码. 代码简单如下: x= ...

  7. Part10-C语言环境初始化-C与汇编混合编程lesson4

    1.为什么要混合编程 汇编语言:执行效率高:编写繁琐: 执行效率高:能够更直接地控制处理器. c语言:可读性强,移植性好,调试方便. 1.汇编调用c函数 2.c调用汇编函数 汇编语言定义的函数(标号) ...

  8. 使用Visual Studio Code进行MicroPython编程

    转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 Visual Studio Code(以下简称VSC ...

  9. arm:c语言和汇编混合编程

    仅作演示. 1.C和汇编可相互调用,汇编子函数格式参考 汇编:普通的函数调用的汇编代码解析 http://www.cnblogs.com/mylinux/p/4139972.html 本文演示了 : ...

  10. C与汇编混合编程

    C中调用汇编,要把汇编定义为全局的,加.global C内嵌汇编 __asm__( :汇编语句部分 :输出部分 :输入部分 :破坏描述部分 ); 用C内嵌汇编的方式:实现LED的点亮 //#defin ...

随机推荐

  1. トヨタ自動車プログラミングコンテスト2024#7(ABC 362)

    非常好名次,使我的 \(1\) 旋转 四发罚时应该是这次比赛最唐的东西了,没有就进前一千了 A.Buy a Pen 特判秒了,懒得打三种 ans=,所以就把不能选的那个赋值成无穷大了 #include ...

  2. Nuxt.js 应用中的 page:finish 钩子详解

    title: Nuxt.js 应用中的 page:finish 钩子详解 date: 2024/10/9 updated: 2024/10/9 author: cmdragon excerpt: pa ...

  3. 【01】DataFrame的创建和属性

    DataFrame是一个表格型的数据结构,可以看成就是excel中的表格. 官方文档:https://pandas.pydata.org/docs/reference/frame.html DataF ...

  4. iOS关于七牛云项目分发遇到的问题小结

    在新公司做iOS开发,目前主要是用企业开发证书通过七牛云分发的形式实现app下载.在工作过程中遇到了几个相关的问题,在这里整理一下. 1.分发的ipa包在七牛云无法正常分发安装的问题 解决方案:在七牛 ...

  5. nestjs 登录和验证码结合验证 svgCaptcha 包 session 会话标识

    // ps: 现在用户验证使用 token jwt 了 代替了 session // session 是服务器为每个用户建立的唯一标识 以区分用户 会话标识 // session 是express中的 ...

  6. element的图片上传预处理函数

    /** 图片格式和大小的控制 */ beforeAvatarUpload (file) { // 允许上传 jpg 和 png 格式的图片 const isJPG = file.type === &q ...

  7. 收到offer之后的回复术语

    不去: 您好,非常荣幸能收到贵岗的offer, 感谢您对我能力的认可,但贵公司岗位要求/薪资结构和我预想还有一定的差距,希望今后有共事的机会,祝您工作顺利!   去: 您好,非常荣幸能够收到贵公司的o ...

  8. 为什么科技企业都在建设API开放平台?

    一.API开发者门户的兴起 随着数字化转型的推进,越来越多的企业开始依赖 API 来实现内部系统的连接与外部服务的集成.然而,企业在API管理方面面临着复杂且繁琐的挑战:API的调用关系混乱.难以追踪 ...

  9. mysql进阶-索引篇

    索引(SQL主要的优化方式) 介绍: 索引(index)是帮助MySQL高效获取数据的数据结构(有序).在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据 ...

  10. 会话层技术-cookie

    会话层技术cookie的使用 cookie拿下! package com.atguigu.servlet; import javax.servlet.ServletException; import ...