📄 附录二 程式语言效率分析.htm
字号:
<BR> 34: DB 03FH,030H,03FH,033H,03FH,03CH,03FH,03FH
<BR> 35: DB 03FH,0C0H,03FH,0C3H,03FH,0CCH,03FH,0CFH
<BR> 36: DB 03FH,0F0H,03FH,0F3H,03FH,0FCH,03FH,0FFH
<BR> 37: DB 0C0H,000H,0C0H,003H,0C0H,00CH,0C0H,00FH
<BR> 38: DB 0C0H,030H,0C0H,033H,0C0H,03CH,0C0H,03FH
<BR> 39: DB 0C0H,0C0H,0C3H,0C0H,0CCH,0C0H,0CFH,0C0H
<BR> 40: DB 0C0H,0F0H,0C0H,0F3H,0C0H,0FCH,0C0H,0FFH
<BR> 41: DB 0C3H,000H,0CH3,003H,0C3H,00CH,0C3H,00FH
<BR> 42: DB 0C3H,030H,0C3H,033H,0C3H,03CH,0C3H,03FH
<BR> 43: DB 0C3H,0C0H,0C3H,0C3H,0C3H,0CCH,0C3H,0CFH
<BR> 44: DB 0C3H,0F0H,0C3H,0F3H,0C3H,0FCH,0C3H,0FFH
<BR> 45: DB 0CCH,000H,0CCH,003H,0CCH,00CH,0CCH,00FH
<BR> 46: DB 0CCH,030H,0CCH,033H,0CCH,03CH,0CCH,03FH
<BR> 47: DB 0CCH,0C0H,0CCH,0C3H,0CCH,0CCH,0CCH,0CFH
<BR> 48: DB 0CCH,0F0H,0CCH,0F3H,0CCH,0FCH,0CCH,0FFH
<BR> 49: DB 0CFH,000H,0CFH,003H,0CFH,00CH,0CFH,00FH
<BR> 50: DB 0CFH,030H,0CFH,033H,0CFH,03CH,0CFH,03FH
<BR> 51: DB 0CFH,0C0H,0CFH,0C3H,0CFH,0CCH,0CFH,0CFH
<BR> 52: DB 0CFH,0F0H,0CFH,0F3H,0CFH,0FCH,0CFH,0FFH
<BR> 53: DB 0F0H,000H,0F0H,003H,0F0H,00CH,0F0H,00FH
<BR> 54: DB 0F0H,030H,0F0H,033H,0F0H,03CH,0F0H,03FH
<BR> 55: DB 0F0H,0C0H,0F0H,0C3H,0F0H,0CCH,0F0H,0CFH
<BR> 56: DB 0F0H,0F0H,0F0H,0F3H,0F0H,0FCH,0F0H,0FFH
<BR> 57: DB 0F3H,000H,0F3H,003H,0F3H,00CH,0F3H,00FH
<BR> 58: DB 0F3H,030H,0F3H,033H,0F3H,03CH,0F3H,03FH
<BR> 59: DB 0F3H,0C0H,0F3H,0C3H,0F3H,0CCH,0F3H,0CFH
<BR> 60: DB 0F3H,0F0H,0F3H,0F3H,0F3H,0FCH,0F3H,0FFH
<BR> 61: DB 0FCH,000H,0FCH,003H,0FCH,00CH,0FCH,00FH
<BR> 62: DB 0FCH,030H,0FCH,033H,0FCH,03CH,0FCH,03FH
<BR> 63: DB 0FCH,0C0H,0FCH,0C3H,0FCH,0CCH,0FCH,0CFH
<BR> 64: DB 0FCH,0F0H,0FCH,0F3H,0FCH,0FCH,0FCH,0FFH
<BR> 65: DB 0FFH,000H,0FFH,003H,0FFH,00CH,0FFH,00FH
<BR> 66: DB 0FFH,030H,0FFH,033H,0FFH,03CH,0FFH,03FH
<BR> 67: DB 0FFH,0C0H,0FFH,0C3H,0FFH,0CCH,0FFH,0CFH
<BR> 68: DB 0FFH,0F0H,0FFH,0F3H,0FFH,0FCH,0FFH,0FFH
<BR> 69: CG ENDS
<BR> 70: END START
<BR> 本程式因为加了个转换表,空间增大为1471字元,但速度却加快为2.5 秒,这是空间换时间的最佳例证。
<BR><BR>二、C
<BR><BR> C近来极受美国各系统公司的推崇,我们特以之与组合语言作个比较,但不幸的是在指令的精简上,就显得力不从心,不像组合语言那样可以斤斤计较。
<BR> 因此,我们祇能就点阵移位、查小表及查总表的方式,测试其效率。首先,利用查大表的方式如下:
<BR><BR> 1: main() <BR> 2: {
<BR> 3: unsigned char s[24][3];
<BR> 4: unsigned short tab[256], d[48][3], count;
<BR> 5: register short i,j,k;
<BR> 6:
<BR> 7: for (count = 0; count < 10000; count++)
<BR> 8: {
<BR> 9: k = 0;
<BR> 10: for (i = 0; i < 24; i++)
<BR> 11: {
<BR> 12: for (j = 0; j < 3; j++)
<BR> 13: d[k][j] = d[k + 1][j] = tab[s[i][j]];
<BR> 14: k += 2;
<BR> 15: }
<BR> 16: }
<BR> 17: }
<BR><BR> 程式制作时间10分钟,较组合语言稍快;占用空间4575字元,则大了三倍,至于执行速度为18秒,慢了七倍之多。
<BR> 再换个方法,试一试查小表如次:
<BR> 1: main() <BR> 2: {
<BR> 3: unsigned char i,j, s[24][3], d[48][6], tab[16];
<BR> 4: unsigned short count;
<BR> 5: register short k, l, x;
<BR> 6:
<BR> 7: for (count = 0; count < 10000; count++)
<BR> 8: {
<BR> 9: k = 0;
<BR> 10: for (i = 0; i < 24; i++)
<BR> 11: {
<BR> 12: l = 0;
<BR> 13 for (j = 0; j < 3; j++)
<BR> 14: {
<BR> 15: x = s[i][j];
<BR> 16: d[k][l] = d[k + 1][l] = tab[x & 0360 >> 4];
<BR> 17: d[k][l+1] = d[k + 1][l + 1] = tab[x & 017];
<BR> 18: l += 2;
<BR> 19: }
<BR> 20: k += 2;
<BR> 21: }
<BR> 22: }
<BR> 23: }
<BR> 占用空间为4,693 字元,比组合语言大了五倍;速度为30秒,则慢了四倍多。这证明了组合语言的灵活性,在空时效率交换的技术运用下,可以选择最有利的条件。再看利用位置的方式,结果如何?
<BR><BR> 1: main() <BR> 2: {
<BR> 3: unsigned char ss[24][3];
<BR> 4: unsigned short dd[48][3];
<BR> 5: int i, k, count;
<BR> 6: register short d, j;
<BR> 7: register unsigned char s;
<BR> 8:
<BR> 9: for (count = 0; count < 10000; count++)
<BR> 10: {
<BR> 11: k = 0;
<BR> 12: for (i = 0; i < 24; i++)
<BR> 13: {
<BR> 14: for (j = 0; j < 3; j++)
<BR> 15: {
<BR> 16: s = ss[i][j];
<BR> 17: d = 0;
<BR> 18: if (s & 01)
<BR> 19: d |= 03;
<BR> 20: if (s & 02)
<BR> 21: d |= 014;
<BR> 22: if (s & 04)
<BR> 23: d |= 060;
<BR> 24: if (s & 010)
<BR> 25: d |= 0300;
<BR> 26: if (s & 020)
<BR> 27: d |= 01400;
<BR> 28: if (s & 040)
<BR> 29: d |= 06000;
<BR> 30: if (s & 0100)
<BR> 31: d |= 030000;
<BR> 32: if (s & 0200)
<BR> 33: d |= 0140000;
<BR> 34: dd[k + 1][j] = dd[k][j] = d;
<BR> 35: }
<BR> 36: k += 2;
<BR> 37: }
<BR> 38: } <BR> 39:}
<BR><BR> 占用的空间为 4,727字元,较组合语言大四倍,执行时间29秒,差不多是四倍的差异。这种采用高阶指令的方式,拉近了C与组合语言的距离。足证纵然使用组合语言,若不采用精简指令的技巧,其效率不彰。一般程式师很少在组合语言的技巧上下功夫, 以致不能认识组合语言的真面目。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -