上一页 1 ··· 167 168 169 170 171 172 173 174 175 ··· 191 下一页
摘要: LCC为了生成不同机器的目标代码,它提供了一个接口给后端的代码生成,以便可以只修改后端,就可以达到生成不同的机器代码。它的接口如下:#001//后端代码生成接口,可以写生成不同的目标代码。#002//#003//蔡军生2007/07/20QQ: 9073204#004//#005typedef struct {#006 //对齐方式的最大字节。#007 unsigned char max_unaligned_load; #008#009 //根据数据类型选择寄存器类型。#010 Symbol (*rmap)(int);#011#012 //给定单元取数到寄存器的代码。#013 void (*b 阅读全文
posted @ 2007-07-20 21:00 ajuanabc 阅读(244) 评论(0) 推荐(0)
摘要: 应用程序为了获取源源不断的消息,就需要调用函数GetMessage来实现,因为所有在窗口上的输入消息,都会放到应用程序的消息队列里,然后再发送给窗口回调函数处理。函数GetMessage声明如下:WINUSERAPIBOOLWINAPIGetMessageA( __out LPMSG lpMsg, __in_opt HWND hWnd, __in UINT wMsgFilterMin, __in UINT wMsgFilterMax);WINUSERAPIBOOLWINAPIGetMessageW( __out LPMSG lpMsg, __in_opt HWND hWnd, __in UIN 阅读全文
posted @ 2007-07-20 08:51 ajuanabc 阅读(395) 评论(0) 推荐(0)
摘要: 当用户使用软件时,往往有些功能是最常用的功能。作为开发人员,就需要让用户感觉到这个软件好用,这样就需要把他们最常用的功能用起来最方便,最快捷,能提高生产效率。在这方面,微软是做到家了,比如在键盘上有一个Windows键,Windows很多功能都可以通过这个键与其它键来组合成快捷键,提高使用的方便性。现在就来介绍一下怎么样让你的程序也方便使用,就是使用快捷键。函数LoadAccelerators声明如下:WINUSERAPIHACCELWINAPILoadAcceleratorsA( __in_opt HINSTANCE hInstance, __in LPCSTR lpTableName);W 阅读全文
posted @ 2007-07-19 08:41 ajuanabc 阅读(388) 评论(0) 推荐(0)
摘要: 现在详细地分析寄存器分配的属性结构,它的定义如下:#001typedef struct {#002 Symbol vbl; //保存变量符号,而不是临时变量.#003 short set; //寄存器类型,比如整数,或者浮点数。#004 short number; //寄存器编号。#005 unsigned mask; //寄存器字节大小,比如EAX,还是AX。#006} *Regnode;#007#008//寄存器集合类型:整数寄存器和浮点寄存器。#009enum { IREG=0, FREG=1 };vbl是用来保存变量的符号指针。set是保存寄存器类型,比如是使用IREG整型寄存器,还是 阅读全文
posted @ 2007-07-17 22:15 ajuanabc 阅读(172) 评论(0) 推荐(0)
摘要: 用单元格变色的方法来做网页导航,在网上可以经常看到,但代码有简有繁,如果运用样式表来实现,将可以节约很多代码,特别是当有很多行需用这种效果时:1.aa{ background-color:#aaa; color:#000 }.bb{ background-color:#ccc; color:#000 }<table width="200" border="0" cellspacing="1" cellpadding="0" ><tr> <td onmouseover="thi 阅读全文
posted @ 2007-07-17 02:21 ajuanabc 阅读(158) 评论(0) 推荐(0)
摘要: 站易用性 43条网页设计中常犯的错误总结zt 是一篇关于网站易用性的文章,作者以亲身体会讲述了43条网站设计中常犯的错误,而无疑这些错误会大大影响网站的可用性。如今网站易用性已成为一种趋势,但纵观国内的各大网站,似乎易用性并未成为设计者们广泛理解的概念, 因此希望这篇文章对大家能有作用。1. 用户必须在几秒钟知道网站是做什么的。注意力是因特网上最有价值的货币。 如果访问者无法在几秒钟之内得知你的网站的方向,他很有可能转而访问其他网站。 你必须迅速地告诉访问者为什么要在你的网站上花费时间。 2. 让网站易于速读。因特网不是书,因此没必要使用大段的文字。 也许我访问你的网站时我正在忙于其他工作,我 阅读全文
posted @ 2007-07-11 18:29 ajuanabc 阅读(117) 评论(0) 推荐(0)
摘要: 没什么特殊的效果,不过位置比较好。不会乱。在需要的页面加<SCRIPT language=JavaScript src="Mouse.js"></SCRIPT>文件如下:var pltsPop=null;var pltsoffsetX = 10;var pltsoffsetY = 12;var pltsPopbg="#FFFFEE";var pltsPopfg="#111111";var pltsTitle="";document.write('<div id=pltsTipL 阅读全文
posted @ 2007-07-11 09:05 ajuanabc 阅读(158) 评论(0) 推荐(0)
摘要: 计算栈的大小,是通过后端接口的代码来完成计算的。栈的大小,主要就是局部变量、临时变量、调用参数和返回值等使用的字节大小,如果变量可以放到寄存器,就不需加到栈的大小里。上面已经看了下面的代码:#044 case Blockbeg: #045 {#046 Symbol *p = cp->u.block.locals;#047 (*IR->blockbeg)(&cp->u.block.x);#048 for ( ; *p; p++)#049 if ((*p)->ref != 0.0)#050 (*IR->local)(*p);#051 else if (glev 阅读全文
posted @ 2007-06-28 22:55 ajuanabc 阅读(220) 评论(0) 推荐(0)
摘要: 从目标代码里,可以看到下面一行:#009sub esp, 16在这行里是保留栈的大小,值为16。但16个字节是怎么样计算出来的呢?下面就来分析LCC的代码,看它是怎么样计算的。它是在函数gencode里进行计算的,它的代码如下:#001void gencode(Symbol caller[], Symbol callee[]) #002{#003 Code cp;#004 Coordinate save;#005#006 if (prunetemps == -1)#007 prunetemps = !IR->wants_dag;#008 save = src;#009 if (assig 阅读全文
posted @ 2007-06-27 21:56 ajuanabc 阅读(199) 评论(0) 推荐(0)
摘要: 由于C语言可以动态地分配局部变量,因此它的运行环境都是基于栈式的分配来实现的,所以在函数的入口就会生成一段分配栈的代码,如下:#002[section .text]#003$main:#004push ebx#005push esi#006push edi#007 push ebp#008mov ebp, esp#009sub esp, 16第2行是NASM汇编的代码段开始。第3行是函数的名称,在NASM是一个过程标号。第4行是保存ebx寄存器。第5行是保存esi寄存器。第6行是保存edi寄存器。第7行是保存ebp寄存器,它是活动帧的指针。第8行是保存上一个栈指针。第9行是保留空间给局部变量和 阅读全文
posted @ 2007-06-23 21:17 ajuanabc 阅读(245) 评论(0) 推荐(0)
上一页 1 ··· 167 168 169 170 171 172 173 174 175 ··· 191 下一页