?? releasenote.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 + -