C语言和汇编模块化混合编程解决兔子数量问题
文章目录
- 前言
- 一、汇编语言操作
- 二、C语言操作
- 三、IDA调试
- 总结
前言
通过C语言调用汇编模块实现C语言和汇编模块化混合编程。
一、汇编语言操作
汇编代码如下:
;c.asm 这个是汇编程序名
.386
.model flat,C
.STACK
.code
avg PROC var1:DWORD,var2:DWORD,var3:DWORD,var4:DWORDmov ecx,var2mov eax,var1L1:mov var4,eax add eax,var3mov var1,eaxmov eax,var4mov var3,eaxmov eax,var1loop L1ret
avg ENDP
END
进入命令提示符
进入c.asm所在目录下
输入C:\Masm64\ml /c /coff c.asm
生成c.ojb文件
二、C语言操作
建立Win32控制台应用程序
点击[项目|属性|配置属性|C/C++|高级]
将其中调用约定—设为__cdecl(/Gd),编译为----设为编译为c代码(/TC)
点击[项目|属性|配置属性|链接器|常规]
将c.obj文件所在目录添加进 附加库目录
点击[项目|属性|配置属性|链接器|输入]
将c.obj文件添加进 附加依赖项
C代码如下:
#include <stdio.h>
extern int avg(int a, int b,int c,int d);void main()
{int j;int s,d,i=0,k=0; // s为开始的兔子,d为月份,返回J结果printf("输入初始兔子对数");scanf("%d",&s);printf("输入兔子繁殖月数");scanf("%d",&d);if(s<0 || d<0){printf("输入错误");}else{j = avg(s, d-1,i,k);printf("到%d月份时有%d对\n",d,j);}
}
三、IDA调试
点击调试,生成相应的exe文件,用IDA打开进行反编译与调试
总结
代码分析:
#include <stdio.h>
extern int avg(int a, int b,int c,int d); //声明函数void main() //主函数
{int j; //汇编返回结果变量int s,d,i=0,k=0; // s为开始的兔子,d为月份printf("输入初始兔子对数"); //从屏幕输出提示的字符串scanf("%d",&s); //从屏幕输入值并保存到地址s中printf("输入兔子繁殖月数"); //从屏幕输出提示的字符串scanf("%d",&d); //从屏幕输入值并保存到地址d中if(s<0 || d<0) //判断如果输入的数据都大于零,就执行else{printf("输入错误");} //如果输入值有负数就报错并停止运行Else //如果输入值没有有负数就继续运行下一步{j = avg(s, d-1,i,k); //将参数传入到汇编模块中,并返回值保存到J中
.386
.model flat,C
.STACK
.code
avg PROC var1:DWORD,var2:DWORD,var3:DWORD,var4:DWORD ;4个参数分别为1,6,0,0mov ecx,var2 ;月份存入ecx中mov eax,var1 ;对数存入eax中L1:mov var4,eax ;eax,var1 的值存入 var4中add eax,var3 ;var3中的值加到eax中mov var1,eax ;eax中的值加入到var1中 = 前面两个月的和(var3+var4)mov eax,var4 ;将var4中的值移入eax中mov var3,eax ;将eax中的值移入var3中 (var4的值移入 var3中 )mov eax,var1 ;将var1中的值移入eax中loop L1 ;当ecx-1=0时停止循环ret ;返回c中
avg ENDP
ENDprintf("The total number of rabbits in %d was %d\n",d,j);}
//从屏幕输出结果
}
C语言和汇编模块化混合编程解决兔子数量问题相关推荐
- 嵌入式c语言汇编混合编程,嵌入式C语言和汇编语言的混合编程
此文章简单介绍 单片机 C语言和汇编语言混合编程的例子.主要用单片机汇编语言编写DS1302的底层驱动,在C语言里通过调用汇编语言,从而实现C和汇编的混合编程. ;汇编语言源文件 ;========= ...
- 物联网中C语言与汇编语言,ARM Cortex-M架构CPU中C语言和汇编语言的混合编程
这里主要从3个方面讲一下C和汇编的混合编程,包括相互之间的函数调用 1 汇编代码中调用C函数 在汇编中调用C的函数,需要在汇编中IMPORT 对应的C函数名,然后将C的代码放在一个C文件中进行编译 我 ...
- C语言primcount素数计数,C语言与汇编的嵌入式编程:求100以内素数
写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include void main(){ int i,j; int count=; for(i=;i<=;i+ ...
- 【胶水语言】 Python 的混合编程
Python运行 JavaScript, C/C++, PHP JavaScript C/C++ DLL 文件生成流程 PHP PHP 安装流程 JavaScript 这里介绍一个自带的 Python ...
- ARM中C语言和汇编语言的混合编程
1.内联汇编 在C语言中内嵌汇编注意事项: 不能直接向PC寄存器赋值,程序跳转要使用B或者BL指令在使用物理寄存器时,不要使用过于复杂的C表达式,避免物理寄存器冲突R12和R13可能被编译器用来存放中 ...
- 3d打印c语言与g代码混合编程,[转载]三轴运动控制器、串口运动控制器、支持G代码、3D打印机、雕刻、源代码开放、...
串口运动控制器,支持G代码.M代码 3D打印机.雕刻机.激光雕刻.木工雕刻.微型CNC.开源GRBL运动控制平台 电源电压:DC12V-24V CPU:Atmega328P 串口:RS232电平,通信 ...
- java基础算法优化解决兔子数量以及拓展
package javaBlog;/* 古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思指的是每 ...
- c语言汇编混合编程方法,C语言和汇编语言混合编程方法
摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言.两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用.本文通过具体的实例,说明了混合编程的基本方法, ...
- ARM中C和汇编混合编程及示例
在嵌入式系统开发中,目前使用的主要编程语言是C和汇编,C++已经有相应的编译器,但是现在使用还是比较少的.在稍大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较 ...
最新文章
- 修改Mysql的root密码方法归纳
- SVM学习(三):线性分类器的求解
- BluePrism初尝2
- Windows手工使用CMD命令写入系统服务方法
- 一样是图标设计,UI 小白应该和老司机学的上手技能,临摹!
- sass穿透 scoped 的情况下 去修改ui组件的样式
- MapReduce简介和过程浅析
- 【知识蒸馏】如何写好BERT知识蒸馏的损失函数代码(一)
- RNA_seq(1)植物转录组实战(中)之subread工具进行序列比对和转录组生物学定量
- SD卡、TF卡读写速率测试
- Ubuntu20.04安装C++版Opencv4
- wx.scanCode(Object object)使用详解
- 广东第一高中生_广东男篮签下全美第一高中生 NBA状元热门征战CBA
- linux系统开发安卓应用,在 Linux 里搭建 Android App 开发环境
- 摄影教学 - 城市夜景
- 设置div的内容及子标签向右对齐
- 低血压形成的原因和治疗方法
- PHP中mq是什么,MQ是什么
- Jekins安装和部署
- 马尔可夫链及其平稳状态
热门文章
- 一文读懂“售后服务认证”
- ssm+java计算机毕业设计高校固定资产管理平台eqg98(程序+lw+源码+远程部署)
- 火箭月亮html5游戏,HTML5 svg和CSS3炫酷火箭升空动画特效
- IAR 打开工程后workspace栏没有任何文档显示的解决办法
- kafka第三次课!
- 深入理解Promise并写一个符合Promise a+规范的Promise代码
- 触觉互联网_触觉服是VR的未来吗?
- Microsoft Office PPT如何批量修改所有页文本框的字体大小、种类以及颜色
- Android中谷歌翻译接口使用(使用谷歌翻译接口,App做文本翻译)
- Nodejs批量处理图片小工具:批量修改图片信息