编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *p1,int *p2) { int temp; temp = *p1; *p1 = *p2; *p2= temp; //printf("p1=%d,p2=%d,temp=%d\n",p1,p2,temp); } void main(){ ; ; char *str1="a=%d,b=%d\n"; printf("++++++\n&qu…
写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i++) { ;j<i/;j++) { ) { count=; break; } } ) { printf("%d\n",i); } count = ; } } 由于C语言中使用的是for进行循环,使用VC调试汇编时,发现for汇编的jmp需要具体地址才可以进行,对于程序来讲不方便 然后…
原始C语言: #include<stdio.h> void main(){ ]; char pipei[] = "abcdefghijklmnopqrstuvwxyz"; ]={}; ,j=; scanf("%s",str); printf("%s\n",str); ;i<;i++) { ;j<;j++) { if(str[i]==pipei[j]) count[j]+=; } } ;j<;j++) { ) prin…
实现变量的值互相交换的三种不同方法 方法一:利用第三个变量来实现数值的交换 int tmp; tmp = a; a = b; b = tmp; 此方法直观,简易.不易出错,推荐使用 方法二:利用两个变量间的加减运算实现数值的交换 a=a+b; b=a-b; a=a-b; //a=a-b; //b=a+b; //a=b-a; 注:在某些运算中会出现bug,不建议使用 方法三:利用按位异或运算实现数值的交换 a=a^b;//bug,自身异或为0 b=a^b; a=a^b; 注:同样的在某些运算中会出…
关于交换算法,我想非常简单,所以,这次不做分析,直接上代码: #include <stdio.h> #include <stdlib.h> //用异或方式实现 void swap(int *a,int *b) { *a^=*b; *b^=*a; *a^=*b; } //用指针加减运算的方式实现 void swap1(int *a,int *b) { *a+=*b; *b=*a-*b; *a=*a-*b; } int main(void) { int a = 3 , b = 2 ,…
目录 基本语法 函数执行 函数示例     函数可以简化程序的代码量,达到更好的代码复用度,因此会让程序变得更加易读.简洁和易修改.其作用就是将需要多次使用的代码整合到一块,使其成为一个整体,然后通过函数名即可完成调用. 基本语法 function functionName () { 语句 return n } 其他简化写法如下 function functionName { 语句 return n } 或 functionName () { 语句 return n } 建议采用非简化的书写方式…
最近写一个控制台程序,并且希望该控制台程序运行时不显示控制台窗口,于是在程序include语句下面加入如下代码 #pragma comment (linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") 而原先的控制台程序入口为int wmain(int argc, _TCHAR* argv[]),必须要改为main才能编译通过 但是问题来了,原来运行没问题的代码,现在出问题了 if (…
说起Serverless这个词,我想大家应该都不陌生,那么Serverless这个词到底是什么意思?Serverless到底能解决什么问题?可能很多朋友还没有深刻的体会和体感,这篇文章我就和大家一起聊聊Serverless. 什么是Serverless 我们先将Serverless这个词拆开来看.Server,大家都知道是服务器的意思,说明Serverless解决的问题范围在服务端.Less,大家肯定也知道它的意思是较少的.那么Serverless连起来,再稍加修饰,那就是较少的关心服务器的意思…
bootloader通常会分为两个阶段:第一阶段采用汇编语言来编写,主要是一些核心的初始化工作(内存,时钟的初始化),第二阶段使用C语言来编写,主要是它会完成一些板载硬件的初始化(串口,网口)然后其启动我们的操作系统.所以我们需要先搭建好C语言环境.-----------------------------------------------------栈的初始化(只有一行,但信息量巨大,而且非常重要,对以后嵌入式的学习起了至关重要的作用):栈:一种后进先出性质的数据组织方式.满栈:当堆栈指针s…
C 语言嵌入式系统编程修炼之一:背景篇 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择.而与之相比,C 语言:一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择. 实际上,大多数嵌入式系统的硬件平台包括两部分: 以通用处理器为中心的协议处理模块,用于网络控制协议的处理: 以数字信号处理器(DSP)为中心的信号处理模块,用…
转自:http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM——GCC内联汇编.这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效的代码. 1.基本内联汇编 GCC中基本的内联汇编非常易懂,我们先来看两个简单的例子: __asm__…
为了更加深入理解C语言的本质,我们需要学习一些汇编相关的知识.作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但是非常重要.因为它能够完成许多其它语言所无法完成的功能.就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分.由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能. 大多数情况下我们不需要使用汇编语言,因为即便…
单片机的编程语言和开发环境 LET′S TRY“嵌入式编程”: 3 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 在“单片机入门(1)”和“单片机入门(2)”中,我们学习了单片机硬件方面的知识.本期我们将学习开发环境和编程语言吧. CPU懂的机器语言 人性化的C语言 能够找出程序错误的调试器 综合开发环境 CPU懂的机器语言 单片机的CPU从存储器读取程序,但是一次只能读取一条指令,然后解释每条指令,并执行.存储器…
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制. 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样.之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中…
转载:http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html C语言ASM汇编内嵌语法 .3 GCC Inline ASM GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作GCC Inline ASM——GCC内联汇编.这是一个非常有用的功能,有利于我们将一些C/C++语法无法表达的指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效的代码. 1.基本内联汇编 GCC中基本…
对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见,省略了异常处理.我不希望读者死记硬背这些细节,而是能在自己的平台上进行实验从而获得对应的结果.另外,本文仅仅关注于C,可能会考虑C++的表现,但在C++和C#环境下的编译器所获得的看似C代码而实不同的结果不作为参考.基础的东西比如“函数参数传值”.“转义字符”.“else的最近配对”.“case的下…
无意中找到一篇十分好用,而且篇幅也不是很大的入门教程,通篇阅后,再把“栗子”敲一遍,基本可以有一个比较理性的认识,从而方便更好地进一步深入学习. 废话不多说,上干货(英语好的直接跳过本人的渣翻译了哈——!纯本人手打原创,有错请指教,要转载请声明出处,谢~~): MIPS Architecture and Assembly Language Overview MIPS架构及其汇编初步 (开始之前稍微再提下,整体分为4个结构:) 1: 寄存器种类: 2: 算术及寻址指令 3: 程序结构 4: 系统调…
在keil 中 C语言的函数有带参数和不带参数之分. 一般的资料里说fun(void)类型的函数不带参数,所以,keil编译器生成的汇编的调用地址(函数名) 为fun.这没有错.事实上,不管C语言的函数是否带参数,只要函数在调用过程中不用寄存器传递参数,生成的汇调用址(函数名)都是原来的函数名. 比如:     #pragma noregparms   void fun(unsigned int a,unsigned char b) {   unsigned c;   c = a + b; re…
研究实验二 问题研究过程: 发问:C语言中的变量究竟是什么,通过下面的程序进行C语言中的变量的学习 图1  URL.EXE函数 为了研究main函数的首地址,我首先自作聪明的用了一条_DX=main,这样一条语句,希望通过debug中的G命令执行完程序.通过DX的值得到main 的地址.但很不幸的是,最终DX的值为0000,并没有得到相应的程序执行结果.于是发问: 为什么这个程序没有得到执行.那个G命令到底执行了什么? 基于目前对汇编语言的理解,在这里一定要用main这个符号吗,可不可以换成别的…
C语言与VT100控制码编程 声明: . 如果您打算阅读本文,希望您已经了解过C语言的基本语法,本文不对C语言的基本语法进行说明,因为那些东西几乎唾手可得; . 本文在vim中编辑,请尽量是用vim进行阅读,因为有不对齐的现象; . 本人强烈建议您先编译,运行本文最后提供的sinDemo源代码,再看本文的正文,因为您看了运行效果,您就知道本人为什么要写这篇文章; \\\\\\\\\\\\--*目录*--/////////// | 一. 需求背景 | | 二. VT100控制码是什么 | | 三.…
转自:http://blog.csdn.net/yue7603835/article/details/44282823 Go语言的面向对象编程简单而干净,通过非侵入式接口模型,否定了C/C++ Java C#等传统面向对象编程语言的复杂度的必要性,我们发现在Go中即使简单的组合也能达到传统面向对象语言的效果,而且耦合度非常低,按照Go的作者之一也就是C语言的作者之一说的一句话:Go是更好的C语言. 1.Go中任意类型Any即  interface{}类型,也就是空接口,可以赋值为任意类型 2.可…
通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制,本篇中,我将分别使用两个典型的系统调用(getpid,open)来进行实例分析,意图通过这两个不同的系统调用来阐述Linux中的系统调用的工作方式. 本篇关键词:系统调用,内联汇编 运行环境: Ubuntu 14.04 LTS x64…
编程实践中C语言的一些常见细节(转载) 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见,省略了异常处理.我不希望读者死记硬背这些细节,而是能在自己的平台上进行实验从而获得对应的结果.另外,本文仅仅关注于C,可能会考虑C++的表现,但在C++和C#环境下的编译器所获得的看似C代码而实不同的结果不作为参考.基础的东西比如“函数参数传值”.“转义字符”…
本文收录在Python从入门到精通系列文章系列 1. 了解面对对象编程 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法. "把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(general…
为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言. 这个问题的意思应该是:现在有很多很好用的高级语言,如java,python等等,为什么这些语言不能用来编写单片机程序呢?那么这个问题的答案就是:不是不能,而是不合适.   一.单片机编程的特点 对单片机编程来说: 首先要考虑的是单片机的程序空间和数据空间都是有限的,所以要让程序尽量短小精悍,以节省程序占用的存储空间. 第二.单片机编程的一个主要对象是对单片机的端口和内部寄存器的操作和配置,这个需要比较精确的时序控制. 第三.单…
一个简单程序的结构 你已经看过一个具体的例子,下面可以了解一些 C程序的基本规则了. 程序由一个或多个函数组成,其中一定有一个名为 main()的函数.函数的描述由函数头和函数体组成.函数头包括预处理语句#include和函数名.可以通过圆括号识别一个函数名.而函数体位于花括号 { }中,并由一系列语句组成,每个语句以一个:结束 .   一个包含函数头和函数体的函数 上面的例子中包含一个声明语句,指出所使用的变量名和类型.然后是一个赋值语句,给变量赋一个值.接着,是1个输出语句,调用 print…
REVIEW 1.如何称呼C程序的基本模块? ans 它们被称为函数 2.什么是语法错误?给出一个英语例子和一个C语言例子 me C的语法错误是指把正确的C符号放在了错误的位置 likes coding He.  int main(void) () ans 语法错误就是指违背了如何把语句或程序放置在一起的规则. Me speaks English good. printf "where are the parentheses?"; 3.什么是语义错误?给出一个英语例子和一个C语言例子…
整理自C语言面试题(嵌入式开发方向,附答案及点评) 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没…
这里,我们要准备两个文件,一个是汇编文件start.S,另一个是C文件led.c.汇编文件套用C文件中的开关灯函数,C文件套用汇编文件中延时函数. //start.S .global led_init led_init: @;GPC1CON @;GPC1PUD loop: mov r0,# @将1存到寄存器r0中,实现LED开灯效果 bl led_ops @调用C文件中的led_ops函数,此时led_ops函数调用的参数会自动从寄存器中取,即r0 mov r0,# @将0存到寄存器r0中,实现…
x86的通用寄存器有eax.ebx.ecx.edx.edi.esi.这些寄存器在大多数指令中是可以任意选用的,比如movl指令可以把一个立即数传送到eax中,也可传送到ebx中.但也有一些指令规定只能用其中某些寄存器做某种用途,例如除法指令idivl要求被除数在eax寄存器中,edx寄存器必须是0,而除数可以在任意寄存器中,计算结果的商数保存在eax寄存器中,而原来的被除数被覆盖掉,余数保存在edx寄存器中.也就是说,通用寄存器对于某些指令而言不是通用的. x86的特殊寄存器有ebp.esp.e…