上一页 1 ··· 4 5 6 7 8 9 10 11 下一页
摘要: 今天老师布置了课后习题,有一题是判断立即数的,大家都知道,arm里的立即数并非都是合法的。 描述:如立即数记作 <immediate> ,8位常数记作immed_8,4位的循环右移值记作rotate_imm,有效的立即数是由一个8位的立即数循环左移偶数位得到,则有效立即数immediate可表示成: <immediate> = immed_8循环右移( 2 * rotate_imm ) 例:有效立即数 0x0000F200,0x00110000, 0x00012800 无效立即数 0x1010, 0x00102, 0xFF1000 显然,对于8位立即数都是有效的。... 阅读全文
posted @ 2011-03-31 22:05 云说风轻 阅读(1850) 评论(0) 推荐(0) 编辑
摘要: 好久没写博客了 ,一是懒,二是没什么可写,或者说最近真正看书的时间不多,时间也是花了的,都搞飞思卡尔了,不过调车这个东西,很耗时间的,但也确实有趣。 今天在同学那看到了KR的《The C Programming Language》,说来惭愧,一时说自己是搞软件的,但却没有看完这本最最经典的著作。 直接翻到第7章输入与输出,做第一个练习题7-1,题目是编写一个程序,根据它自身被调用时存放在argv[0]中的名字,实现将大写字母转换为小写字母或将小写字母转换为大写字母的功能。程序很easy,实现如下(平台ubuntu)#include <stdio.h> #include <st 阅读全文
posted @ 2011-03-30 16:16 云说风轻 阅读(505) 评论(0) 推荐(0) 编辑
摘要: 电容在EMC设计中非常重要,也是我们常用的滤波元件!但在我培训的过程中发现,大家对电容的使用并不是很明确!这里我把电容滤波的两个要点介绍一下:1、电容滤波是有频段的,很多人以为电容是越大越好,其实不然,每个电容有一定的滤波频段,大电容滤低频,小电容滤高频,主要是根据电容的谐振频点来决定,电容在谐振频率点处有最佳的滤波效果!在以谐振点为中心的一段频段之内有较好的滤波效果,其他部分滤波效果不佳!电容的谐振点与电容的容值以及ESL(等效串联电感)相关,具体大家可以查一下网上资料,以及会议学校学习串联谐振电路的理论分析就会知道!通常我们建议在电源端口增加UF级别电容来滤波几百KHZ到5MHZ之间的差模 阅读全文
posted @ 2011-02-26 11:01 云说风轻 阅读(626) 评论(0) 推荐(0) 编辑
摘要: #与##在宏定义中的--宏展开#include <stdio.h>#define f(a,b) a##b#define g(a) #a#define h(a) g(a)int main(){ printf("%s/n", h(f(1,2))); // 12 printf("%s/n", g(f(1,2))); // f(1,2) return 0;}宏展开时:如果宏定义以#开头,不展开参数,直接替换。故g(f(1,2))--->#f(1,2)--->"f(1,2)";如果宏定义不以#开头,展开参数,直接替换,由 阅读全文
posted @ 2011-02-25 16:29 云说风轻 阅读(2058) 评论(0) 推荐(0) 编辑
摘要: 昨天晚上没事看了孙鑫VC视频的第9课,一边和老婆发短信,一边听着视频,感觉优哉游哉的,呵呵,无语的是最后他又用VC组件了,好吧,我承认我用的VS2008,而从VS2005开始就不支持Splash screen这样地基于源码地组件了,上一个右键菜单组件我就忍了,你还来…… 不过本着不服输的精神,就手动整一个吧,还有就是可能贴出来的代码排版有问题,事先声明不是我的错,这个CSDN博客系统的问题,有图为证,看看我那边test日志就知道了 新建一个单文档应用程序,从CWnd类派生一个类就叫CSplashWnd吧,如图。 添加两个保护属性的成员变量,如下所示,感觉有时用向导反而不爽,自己敲吧。 //初. 阅读全文
posted @ 2011-01-31 15:06 云说风轻 阅读(1363) 评论(0) 推荐(0) 编辑
摘要: 因为一直是在嵌入式,以前没有接触过VC/MFC,自然也没有用过VS。但在打开资源视图时就遇到了一个不大不小的问题………… 阅读全文
posted @ 2011-01-30 11:48 云说风轻 阅读(4311) 评论(0) 推荐(0) 编辑
摘要: 谁可以帮我解释一下为什么发的代码排版不一样了,如图所示??还有,难道CSDN发帖不能本地图片?why?? 阅读全文
posted @ 2011-01-29 11:41 云说风轻 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 最近没事在看孙鑫的VC视频教程,也想学学VC了,在第八课中有一个逃跑按钮的实现,不过在视频中是用两个按钮,依次一个显示,一个隐藏来实现的,后面孙鑫也提到了可以用SetWindowPos函数来实现一个坐标随机的逃跑按钮,但视频中没有给出实现过程,这里,我们来实现一下。 阅读全文
posted @ 2011-01-29 11:33 云说风轻 阅读(2723) 评论(0) 推荐(0) 编辑
摘要: 原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); 功 能: 使用快速排序例程进行排序 参 数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 阅读全文
posted @ 2011-01-28 14:26 云说风轻 阅读(3553) 评论(3) 推荐(0) 编辑
摘要: C90及C++的数组对象定义是静态联编的,在编译期就必须给定对象的完整信息。但在程序设计过程中,我们常常遇到需要根据上下文环境来定义数组的情况,在运行期才能确知数组的长度。对于这种情况,C90及C++没有什么很好的办法去解决(STL的方法除外),只能在堆中创建一个内存映像与需求数组一样的替代品,这种替代品不具有数组类型,这是一个遗憾。C99的可变长数组为这个问题提供了一个部分解决方案。可变长数组(variable length array,简称VLA)中的可变长指的是编译期可变,数组定义时其长度可为整数类型的表达式,不再象C90/C++那样必须是整数常量表达式。在C99中可如下定义数组:int 阅读全文
posted @ 2011-01-27 16:08 云说风轻 阅读(3886) 评论(0) 推荐(0) 编辑
摘要: 在数学运算当中经常会涉及到判断两个数是否相等的情况对于整数很好处理 A==B这样的一个语句就可以解决全部的问题但是对于浮点数是不同的首先,浮点数在计算机当中的二进制表达方式就决定了大多数浮点数都是无法精确的表达的现在的计算机大部分都是数字计算机,不是模拟机,数字机的离散化的数据表示方法自然无法精确表达大部分的数据量的。其次计算机浮点数的精度在单精度float类型下,只有7位,在进行浮点运算的时候,这个精度往往会导致运算的结果和实际期望的结果之间有误差因为前两个原因,我们很难用 A==B来判定两个浮点数是否相同很自然,我们可以想到 fabs(A-B) < epsilon 这样的一种判别方法 阅读全文
posted @ 2011-01-25 17:59 云说风轻 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 我们奔三的80后,见到亲戚朋友,他们不再问你考试考了几分,更多的是问现在一个月工资多少;我们奔三的80后,每天不再感叹学校有多少作业做不完,开始感叹油价、房价涨的有多快;我们奔三的80后,不再乱买东西,月底开始算计这个月还了信用卡,还了房贷,还剩下多少钱;我们奔三的80后,渐渐地讨厌酒吧、KTV,喜欢亲近自然,喜欢健康的生活方式;我们奔三的80后,偶尔会有寂寞,偶尔会挂念一个人我们奔三的80后,我们开始追逐梦想,不会再轻易流泪,不会再为了一点挫折而放弃;我们奔三的80后,没有了年少的轻狂,把遇到的挫折困难都当成一种人生的阅历,试着去包容,试着去忍耐;我们奔三的80后,我们隐身上QQ 看看谁在线 阅读全文
posted @ 2011-01-24 18:24 云说风轻 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 飞花似梦,细雨如愁,情到深处自孤独。溪水柔,追流苏。年年相守年年瘦,岁岁断肠岁岁长。物是人非,行单影孤,天若有情天亦哭。三载怨,几时休。不求万里觅封侯,但求与伊常白首。 阅读全文
posted @ 2010-12-30 09:26 云说风轻 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 蛮长的一段时间,天天和一个女孩聊天,最近才发现居然慢慢有了依赖感…… 也许她也会看到这篇博客,我想说的是,等待必不痛苦,我愿意…… 我也会好好努力,天天开心…… 阅读全文
posted @ 2010-12-13 23:28 云说风轻 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 保护模式中最重要的一个思想就是通过分级把代码隔离了起来,不同的代码在不同的级别 ,使大多数情况下都只和同级代码发生关系。 Intel的80286以上的cpu可以识別4个特权级(或特权层),0级到3级。数值越大特权越小。一般用把系统内核放在0级,系统的其他服务程序位于1、2级,3级则是应用软件。一般情况下代码都在自己的级别下做自己的工作,同一级别之间可以相互访问,而一般是不允许不同级别的代码间随意访问的。但有时候不同级别的程序之间一定要访问,比如系统的接口函数等,必须能够使得应用程序能够随意调用。于是Intel将代码分为:1.非一致码:受到隔离的代码,只能在同一级别间相互访问2.一致码:不受到隔 阅读全文
posted @ 2010-11-27 19:40 云说风轻 阅读(4148) 评论(1) 推荐(0) 编辑
摘要: %macroDescriptor3;有三个参数:【段界限】、【段基址】、【段属性】dw%2&0FFFFh;段界限1(2字节)dw%1&0FFFFh;段基址1(2字节)db(%1>>16)&0FFh;段基址1(1字节)dw((%2>>8)&0F00h)|(%3&0F0FFh);属性1+段界限2+属性2(2字节)db(%1>>24)&0FFh;段基址2(1字节)%endmacro;共8字节看似很简单的结构体理解起来可不是那么简单!【Descriptor结构体】有8个字节。1、【第1、2字节】组合(word)表示该段 阅读全文
posted @ 2010-11-27 18:50 云说风轻 阅读(722) 评论(1) 推荐(0) 编辑
摘要: 依旧是第三章,看的好慢哦,其实从实模式跳转到保护模式还是很好懂得,主要注意就是跳转指令jmp dword SelectorCode32:0 //而不能是 jmp SelectorCode32:0 因为这时编译出来的是16位代码。如果目标地址的偏移不是0,而是一个较大的值,比如jmp SelectorCode32:0x12345678 则编译后偏移会被截断,只剩下0x5678。 所以,这个特殊的跳转需要特殊的处理。在Linux内核中(Linux使用的是AT&T汇编,不是一般常见的IBMPC汇编),这个跳转是用DB指令直接写二进制代码的方法实现的,而NASM显然提供了更好的解决方法,就.. 阅读全文
posted @ 2010-11-27 16:45 云说风轻 阅读(1346) 评论(0) 推荐(0) 编辑
摘要: 在《一个操作系统的实现》一书的第三章,两个代码段代码写着写着用就用了align 32,写着写着又不用了,无若我那可怜的汇编功底,压根没见过这是什么指令…… 实际上 align是个负责内存对齐的宏,它会补充一些数据以便下面的数据对齐。align 32 //会被展开成类似 times (((32) - (($-$$) % (32))) % (32)) nop 它就是为了数据对齐的。你使用影响对齐的数据类型后就需要用align填充一下,以便后面的数据可以对齐到边界上。 至于在这里的作用,段首最好是32字节对齐的。不过也不是必须。实模式每段是64kb大小,段寄存器中保存的是地址的高16位,i... 阅读全文
posted @ 2010-11-27 16:07 云说风轻 阅读(423) 评论(0) 推荐(0) 编辑
摘要: 从昨天起深陷《一个操作系统的实现》这个书不能自拔,这本书可以说再次燃起了我小时候想写操作系统的美好愿望,所以说愿望总是美好的,还进入了大学开始真正去学计算机才发现似乎写操作系统是和我没什么关系的神话,也许还是Linux那孩子太牛叉了吧。 好吧,实现愿望从昨天开始…… 只是虽然本书开始时说学习《一个操作系统的实现》只需要一些C和汇编的知识,但是很遗憾,作者在部分地方写的很不详细,一笔带过,这使阅读本书的我苦恼不已,也许还是我水平太菜了吧。这里这本书我一定一定坚持读下去,遇到问题坚决不放过,百度到可信的答案直至读懂为止,并转贴到本博客,百度或谷歌不到答案的,也必然亲自研究至问题解决未知。比如:《. 阅读全文
posted @ 2010-11-27 15:59 云说风轻 阅读(512) 评论(0) 推荐(0) 编辑
摘要: 段机制轻松体验 内存寻址: 实模式下的内存寻址: 让我们首先来回顾实模式下的寻址方式 段首地址×16+偏移量 = 物理地址 为什么要×16?因为在8086CPU中,地址线是20位,但寄存器是16位的,最高寻址64KB,它无法寻址到1M内存。于是,Intel设计了这种寻址方式,先缩小4位成16位放入到段寄存器,用到时候,再将其扩大到20位,这也造成了段的首地址必须是16的倍数的限制。 公式:xxxx:yyyy 保护模式下分段机制的内存寻址: 分段机制是利用一个称作段选择符的偏移量,从而到描述符表找到需要的段描述符,而这个段描述符中就存放着真正的段的物理首地址,再加上偏移量 一 阅读全文
posted @ 2010-11-27 13:19 云说风轻 阅读(635) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 下一页