文章目录

  • 前言
  • 一、汇编语言操作
  • 二、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语言和汇编模块化混合编程解决兔子数量问题相关推荐

  1. 嵌入式c语言汇编混合编程,嵌入式C语言和汇编语言的混合编程

    此文章简单介绍 单片机 C语言和汇编语言混合编程的例子.主要用单片机汇编语言编写DS1302的底层驱动,在C语言里通过调用汇编语言,从而实现C和汇编的混合编程. ;汇编语言源文件 ;========= ...

  2. 物联网中C语言与汇编语言,ARM Cortex-M架构CPU中C语言和汇编语言的混合编程

    这里主要从3个方面讲一下C和汇编的混合编程,包括相互之间的函数调用 1 汇编代码中调用C函数 在汇编中调用C的函数,需要在汇编中IMPORT 对应的C函数名,然后将C的代码放在一个C文件中进行编译 我 ...

  3. C语言primcount素数计数,C语言与汇编的嵌入式编程:求100以内素数

    写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include void main(){ int i,j; int count=; for(i=;i<=;i+ ...

  4. 【胶水语言】 Python 的混合编程

    Python运行 JavaScript, C/C++, PHP JavaScript C/C++ DLL 文件生成流程 PHP PHP 安装流程 JavaScript 这里介绍一个自带的 Python ...

  5. ARM中C语言和汇编语言的混合编程

    1.内联汇编 在C语言中内嵌汇编注意事项: 不能直接向PC寄存器赋值,程序跳转要使用B或者BL指令在使用物理寄存器时,不要使用过于复杂的C表达式,避免物理寄存器冲突R12和R13可能被编译器用来存放中 ...

  6. 3d打印c语言与g代码混合编程,[转载]三轴运动控制器、串口运动控制器、支持G代码、3D打印机、雕刻、源代码开放、...

    串口运动控制器,支持G代码.M代码 3D打印机.雕刻机.激光雕刻.木工雕刻.微型CNC.开源GRBL运动控制平台 电源电压:DC12V-24V CPU:Atmega328P 串口:RS232电平,通信 ...

  7. java基础算法优化解决兔子数量以及拓展

    package javaBlog;/* 古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思指的是每 ...

  8. c语言汇编混合编程方法,C语言和汇编语言混合编程方法

    摘要: C语言是一种高级的面向过程的开发语言,汇编语言是一种低级的面向机器的编程语言.两者在程序设计开发方面各有优劣,目前两者的混合编程得到了广泛的应用.本文通过具体的实例,说明了混合编程的基本方法, ...

  9. ARM中C和汇编混合编程及示例

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

最新文章

  1. 修改Mysql的root密码方法归纳
  2. SVM学习(三):线性分类器的求解
  3. BluePrism初尝2
  4. Windows手工使用CMD命令写入系统服务方法
  5. 一样是图标设计,UI 小白应该和老司机学的上手技能,临摹!
  6. sass穿透 scoped 的情况下 去修改ui组件的样式
  7. MapReduce简介和过程浅析
  8. 【知识蒸馏】如何写好BERT知识蒸馏的损失函数代码(一)
  9. RNA_seq(1)植物转录组实战(中)之subread工具进行序列比对和转录组生物学定量
  10. SD卡、TF卡读写速率测试
  11. Ubuntu20.04安装C++版Opencv4
  12. wx.scanCode(Object object)使用详解
  13. 广东第一高中生_广东男篮签下全美第一高中生 NBA状元热门征战CBA
  14. linux系统开发安卓应用,在 Linux 里搭建 Android App 开发环境
  15. 摄影教学 - 城市夜景
  16. 设置div的内容及子标签向右对齐
  17. 低血压形成的原因和治疗方法
  18. PHP中mq是什么,MQ是什么
  19. Jekins安装和部署
  20. 马尔可夫链及其平稳状态

热门文章

  1. 一文读懂“售后服务认证”
  2. ssm+java计算机毕业设计高校固定资产管理平台eqg98(程序+lw+源码+远程部署)
  3. 火箭月亮html5游戏,HTML5 svg和CSS3炫酷火箭升空动画特效
  4. IAR 打开工程后workspace栏没有任何文档显示的解决办法
  5. kafka第三次课!
  6. 深入理解Promise并写一个符合Promise a+规范的Promise代码
  7. 触觉互联网_触觉服是VR的未来吗?
  8. Microsoft Office PPT如何批量修改所有页文本框的字体大小、种类以及颜色
  9. Android中谷歌翻译接口使用(使用谷歌翻译接口,App做文本翻译)
  10. Nodejs批量处理图片小工具:批量修改图片信息