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. [Tkey] 与非

    解法原理1 首先我们需要明白 \(\operatorname{nand}\) 的运算: \[\operatorname{not}(a\operatorname{nand}b)=a\operatorna ...

  2. .NET 白板书写预测-曲线拟合

    白板软件书写速度是其最核心的功能,注册StylusPlugin从触摸线程拿触摸点数据并在另一UI线程绘制渲染是比较稳妥的方案,具体的可以查看小伙伴德熙的2019-1-28-WPF-高性能笔 - lin ...

  3. 浅谈 K-D Tree 及其进阶应用

    前言 \(\text{K-D Tree (K-Dimension Tree)}\) 是一种可以有效处理高维信息的数据结构. 在一般信息学竞赛题目中 \(k = 2\),此时它又称 \(\text{2- ...

  4. PHP实现csv导出(多种方法对比及原理解析)

    前言 导出文件时,如果不需要任何复杂的Excel功能,请使用CSV 工作中最初遇到导出Excel的需求,都是使用的PHPExcel,它的功能非常强大,可以覆盖到绝大多数的定制化导出需求.也就一直用着了 ...

  5. Vue写一个图片轮播组件【转载】

    一.理清思路,理解需求和原理 1. 要写一个什么样的轮播? 在点击右侧箭头时,图片向左滑动到下一张:点击左侧箭头时,图片向右滑到下一张 点击下面的小圆点,滑到对应的图片,相应小圆点的样式也发生改变 要 ...

  6. Dbeaver24.2.2安装和使用教程(免费的数据库管理工具)

    前言 DBeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具. DBeaver 通过 JDBC 连接到数据库,可以支持几乎所有的数据库产品,包括:MySQL.PostgreSQL. ...

  7. 去除tinymce中粘贴的样式

    import "tinymce/plugins/paste"; tinymce.init({ ...其他配置, plugins: ["paste"], past ...

  8. Kubernetes 中实现 MySQL 的读写分离

    Kubernetes 中实现 MySQL 的读写分离 在 Kubernetes 中实现 MySQL 的读写分离,可以通过主从复制架构来实现.在这种架构中,MySQL 主节点(Master)负责处理所有 ...

  9. 关于C++当中的“模板函数”

    本人C++草鸟,在工作当中遇到了这个问题,就简单做个记录.

  10. 解读Karmada多云容器编排技术,加速分布式云原生应用升级

    本文分享自来源:<华为云DTSE>第五期开源专刊,作者:任洪彩 华为云高级软件工程师,Karmada社区Maintainer.   管理和协调跨多个云平台的容器化应用是当前企业面临的复杂性 ...