Visual Studio C++ 汇编 混合编程
Visual Studio C++ 汇编 混合编程
实验要求
请用汇编语言编写实现GCD递推公式的子程序,对入口和出口参数形式不做要求,但需要用 C 语言函数来获取输入、调用汇编递推子程序,并且用 C 语言显示子程序返回的结果。
Visual Studio 2020 下载
下载时勾选C++桌面开发选项。
环境配置
选择 文件->新建->项目 ,语言选择 C++ ,选择 空项目 。
修改环境配置为 x86。
在项目中新建 gcd.asm
和 t.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++ 汇编 混合编程的更多相关文章
- Visual Studio中创建混合移动应用程序解决方案Xamarin Portable Razor
在Visual Studio中创建混合移动应用程序的一个解决方案是使用Xamarin Portable Razor工具,这是ASP.NET MVC API针对移动设备的一个轻量级实现.Xamarin编 ...
- ARM中C和汇编混合编程及示例(转)
在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...
- C51与汇编混合编程详解
C51和汇编混合编程(1)-C语言中嵌入汇编 1.在 C文件中要嵌入汇编代码片以如下方式加入汇编代码: #pragma ASM ;Assembler Code Here #pragma ENDASM ...
- c语言环境初始化&c语言和汇编混合编程
bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启 ...
- 【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程
最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGe ...
- visual studio 2015下python编程的中文字符串问题
visual studio 2015强大的编程功能,编写起python来也是非常方便的,但其对中文字符的支持不是很好,经常发生莫名其妙的错误,最常见的错误是不报错,也不执行代码. 代码简单如下: x= ...
- Part10-C语言环境初始化-C与汇编混合编程lesson4
1.为什么要混合编程 汇编语言:执行效率高:编写繁琐: 执行效率高:能够更直接地控制处理器. c语言:可读性强,移植性好,调试方便. 1.汇编调用c函数 2.c调用汇编函数 汇编语言定义的函数(标号) ...
- 使用Visual Studio Code进行MicroPython编程
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 Visual Studio Code(以下简称VSC ...
- arm:c语言和汇编混合编程
仅作演示. 1.C和汇编可相互调用,汇编子函数格式参考 汇编:普通的函数调用的汇编代码解析 http://www.cnblogs.com/mylinux/p/4139972.html 本文演示了 : ...
- C与汇编混合编程
C中调用汇编,要把汇编定义为全局的,加.global C内嵌汇编 __asm__( :汇编语句部分 :输出部分 :输入部分 :破坏描述部分 ); 用C内嵌汇编的方式:实现LED的点亮 //#defin ...
随机推荐
- [Tkey] 与非
解法原理1 首先我们需要明白 \(\operatorname{nand}\) 的运算: \[\operatorname{not}(a\operatorname{nand}b)=a\operatorna ...
- .NET 白板书写预测-曲线拟合
白板软件书写速度是其最核心的功能,注册StylusPlugin从触摸线程拿触摸点数据并在另一UI线程绘制渲染是比较稳妥的方案,具体的可以查看小伙伴德熙的2019-1-28-WPF-高性能笔 - lin ...
- 浅谈 K-D Tree 及其进阶应用
前言 \(\text{K-D Tree (K-Dimension Tree)}\) 是一种可以有效处理高维信息的数据结构. 在一般信息学竞赛题目中 \(k = 2\),此时它又称 \(\text{2- ...
- PHP实现csv导出(多种方法对比及原理解析)
前言 导出文件时,如果不需要任何复杂的Excel功能,请使用CSV 工作中最初遇到导出Excel的需求,都是使用的PHPExcel,它的功能非常强大,可以覆盖到绝大多数的定制化导出需求.也就一直用着了 ...
- Vue写一个图片轮播组件【转载】
一.理清思路,理解需求和原理 1. 要写一个什么样的轮播? 在点击右侧箭头时,图片向左滑动到下一张:点击左侧箭头时,图片向右滑到下一张 点击下面的小圆点,滑到对应的图片,相应小圆点的样式也发生改变 要 ...
- Dbeaver24.2.2安装和使用教程(免费的数据库管理工具)
前言 DBeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具. DBeaver 通过 JDBC 连接到数据库,可以支持几乎所有的数据库产品,包括:MySQL.PostgreSQL. ...
- 去除tinymce中粘贴的样式
import "tinymce/plugins/paste"; tinymce.init({ ...其他配置, plugins: ["paste"], past ...
- Kubernetes 中实现 MySQL 的读写分离
Kubernetes 中实现 MySQL 的读写分离 在 Kubernetes 中实现 MySQL 的读写分离,可以通过主从复制架构来实现.在这种架构中,MySQL 主节点(Master)负责处理所有 ...
- 关于C++当中的“模板函数”
本人C++草鸟,在工作当中遇到了这个问题,就简单做个记录.
- 解读Karmada多云容器编排技术,加速分布式云原生应用升级
本文分享自来源:<华为云DTSE>第五期开源专刊,作者:任洪彩 华为云高级软件工程师,Karmada社区Maintainer. 管理和协调跨多个云平台的容器化应用是当前企业面临的复杂性 ...