⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 releasenote.txt

📁 ucgui中文字体转换工具
💻 TXT
字号:
========================================================================
       DYNAMIC LINK LIBRARY : UCGUIFontGen
========================================================================


/***********************************************************************
  REVISION LOG ENTRY
  Revision By: UCGUIFontGen.cpp
  Revised on 2005-8-29 22:59:53
  QQ:106719880
  Email:ucgui@163.com
  Home:http://www.ucgui.com
  Comments: UCGUIFontTool 1.0.0.0
			UCGUI字体.C文件导出工具...

 ***********************************************************************/


  1. 完成字体生成工具动态库, 调用接口为ShowGenFontHZDlg(), 弹出字体生成界面,
     导出汉字GBK的汉字字体.c文件. 专门用于UCGUI.
  2. 可以自定义导出汉字.C文件, 输入自己要使用的汉字及ASCII字符.
  3. 跳过0xaaa1~0xafff这几分区, 因为这几个分区没对有对应任何的汉字.

下面附上调试程序时一点收获. 
我的程序在DEBUG版时无错, 在RELEASE版出错, 找了半天, 才有如下收获:

错误终于在中午找到了.....收获也实在出乎意料....
看来细节不容错过..

一. i++出现在一个表达式中, 如果有自增运算(++i,不是i++)时的顺序问题
在函数GenOutPutCharLin中有这么一句:
BytePos = (OutputChar[i]-0xa1)*94 + (OutputChar[++i] - 0xa1) + 0x60;

同一句话, 在degbu版下.vc没有进行优化, 他的意思是.

(OutputChar[i]-0xa1)*94 先计算.此时取OutputChar数组第i个元素.
(OutputChar[++i] - 0xa1)后计算.此时i取值增一. 取数组中i+1个元素.

这样的逻辑也是我的本意.
谁知..在release版VC下.居然不是我这样想的.这个错误真是百年难一遇. 
怎么也没想到这个错误.

在release版下.被优化成了:
i++;
BytePos = (OutputChar[i]* 95 - (0xa1*95 + 0x60);

这个优化.导致我的程序在release版有问题.但在DEBUG版没有问题.
实在是没有想到.这样一个比较有岐义的写法.导致这种错误.没有想到.优化真
是厉害啊.把那么复杂一个算式.变成那么短了.

比人为计算还聪明..充分利用交换率啊..结合率啊!!!!1

i++;
BytePos = (OutputChar[i]* 95 - (0xa1*95 + 0x60);

精简!! 导致我的错误. 

二. 乘法指令的优化.

如果让你用汇编实现A*94.你用最少的指令周期完成.写成哪几句代码?用x86

有两种思路. 
一. 直接乘法指令,mul.
二.先将A+A+A. 再将所得值左移4位得值再减A.得值再右移一位. 

第一种,指令周期是12. 
第二种共用4个周期.eax中着A 
lea edx, [eax+eax*2] 一指令周期 
shl edx, 4           一指令周期 
sub edx, eax         一指令周期 
shl edx, 1           一指令周期 

这个优化好牛.VC release版优化真够学的....







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -