opencv配置后编程遇到的小的问题 插入一点C语言转汇编知识

打开vs2017 文件->新建->项目->空项目
然后建成新项目
右击源文件在这里插入图片描述
添加新建项 即可选择添加新c++文件并进行编程

我很久之前就已经配置好了opencv 但是打开还是无法运行(很长时间没有用VS,加上本来记忆力不好,啥都忘了)找了很长时间才发现因为我电脑配置的64位 而我选择的是x86 改为x64头文件就可以用了
在这里插入图片描述

关于x86和x64,稍微了解一下吧:
x86和x64
x86就是32位 x64就是64位 都是来形容操作系统的。
不同位数的操作系统,对CPU的运算方式产生的影响或者要求不同,更深层次来说,window64和32位是指cpu运算方式的差异。
32位系统最大只能发挥4G内存的效用,如果电脑安装了大于4g的内存,32位的操作系统是不能更好的利用大于4g那部分内存的。

关于预编译头:
头文件的作用,是把所有文件直接复制“粘贴”到相应的#include语句处,头文件的出现给书写程序带来了很大方便,但是到了windows时代就有一些问题了,所有的windows程序都必须包含windows.h,而这个文件很大,编译很慢。到了MFC时代,情况更加严重了,毕竟c风格的windows头文件里面包含的还只是函数定义和宏,而MFC库里面的头文件很多都是类声明。
但是,人们发现,虽然用到的头文件多,但是在一个工程里,总有那么一堆头文件是所有cpp必须包含的。那么可不可以把这些头文件都提取出来,只编译一遍,然后其他cpp就都能使用呢,这就是预编译头的思想由来。
但是也有一个问题:预编译头中包含过的头文件会在所有cpp中使用,因此它在编译cpp时,会将预编译头中已经编译完的部分加载到内存中。如果它发现你的cpp居然没包含编译头,它就会很郁闷,因为它不知道该如何将已经编译完的部分从内存中清出去,整个编译过程就会失败。

如果不想使用预编译头:
右击文件->属性->预编译头->创建/使用预编译头,选择“不使用预编译头"

关于waitKey()函数:(注意K要大写)
(没有这个函数图像捕捉不到)
c++:int waitKey(int delay=0)
waitKey函数的功能是不断刷新图像,频率时间为delay 单位为ms 当括号里为0 则代表无限时间等待用户响应
如果程序想响应某个按键,可以利用if(waitKey(10) == KeyValue);
经常程序里面出现if(waitKey(10) >= 0)是说10ms中按任意键进入此if块

关于汇编语言
在编译原理的角度,C语言时如何转变为汇编语言的?


简单了解一下汇编语言**

**
计算机只能处理和识别二进制指令,我们利用各种高级编程语言编写的程序,需要经过一系列的处理步骤,最终转变为汇编指令,再最后转变为机器指令。

汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言。(面向机器(处理器)的程序设计语言)
在这里插入图片描述
汇编语言的主要特点:
1。汇编语言是直接面向处理器的程序设计语言
2。汇编语言所操作的对象不是具体的数据,而是寄存器或者存储器,也就是说他是直接和寄存器和存储器打交道,这也是为什么汇编语言的执行速度要比其他语言快,但同时也是变成更为复杂。
3。汇编语言是机器指令的一种符号表示,而不同类型的CPU有不同的机器指令系统,也就有不同的汇编语言。

所以C语言是如何转换成汇编语言的呢

1 预处理
2 词法分析
3 语法分析
4 语义分析
5 优化
8 链接

1。预处理
预处理是执行C语言中的#include , #if , #else等预处理指令。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SYSTEM_KEY
#ifndef COMPLIE_ONCE
	#define COMPILE_ONCE
#endif

2。词法分析
把你定义的函数名、变量名、预留的关键字等抽象化,用一个符号来代替。方便编译程序处理。例如main 、 return 、printf等单词,都被看做一个符号,转换成M,R。这个过程中,会检查你的变量名、函数名名称是否正确

3。语法分析
经过词法分析后,程序代码已经变成了一堆人看不懂但是计算机能认识的字符了(例如:I S T F…M I R P)。这时的符号是打散的,语法分析负责把这些符号按照一定的结构组织起来,形成一个抽象语法树(这个结构跟你写的程序代码的结构是对应起来的)
在这里插入图片描述

4。语义分析 当构造出这样一个树结构之后,编译就会检查语法是否正确,并去扫描这颗树的结构,生成中间指令了。这个中间指令已经非常接近汇编。但是它与汇编还是有区别的。因为不同厂家的CPU指令有所不同,所以还要根据不同厂家的CPU指令集,把这个中间指令转换成汇编。在这里插入图片描述

5。优化
由于程序员写代码有时会导致一些多余操作,或者效率低的指令。优化过程可以找出这些毛病,自动替换成更好的指令。

6。链接
以上过程只是编译了一个模块,一个大型程序往往包括好多个模块,最后的链接过程负责把所有的模块组装起来,构造成最后可执行的程序。

这一板块转自点击这里我又重新叙述一遍来增加我的理解记忆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值