[FWD] Re: 也谈汉字的快速显示
>From News server: news.freesoft.cei.gov.cn
From: "Miao YuCheng" <helios@online.sh.cn>
Newsgroups: chinese.comp.linux.development
Subject: Ҳ̸ºº×ֵĿìËÙÏÔʾ
Date: Fri, 17 Dec 1999 22:30:33 +0800
[posted and mailed]
On 17 Dec 1999, you wrote in chinese.comp.linux.development:
>×î½üÕýÔÚ¿´Michael Abrash's Graphics ProgrammingºÚƤÊé,
>ÉîÊÜÆô·¢. ÁªÏµÒÔÇ°¶Ôyact, cceһЩººÏÔ»úÀíµÄÁ˽â, ×öÁË
>һЩÊÔÑé, ·¢ÏÖÈç¹ûÓÃдģʽ3±Ü¿ªoutÖ¸ÁîµÄ»°, ¿ÉÒÔʹµ¥×Ö
>ÏÔʾµÄËÙ¶ÈÃ÷ÏÔ¼Ó¿ì. ×öÁËһϱȽÏ, ÓÃͨ³£ÒâÒåÉϵĿìËÙ·½
>·¨, ¼´Í¨¹ýÿ´ÎдλÆÁ±Î¼Ä´æÆ÷ÏÔʾ8¸öpixelµÄ·½°¸×îÉÙÒ²Òª
>15000microseconds(1 microseconds = 1000 ns), ¶øÓÃдģ
>ʽ3¿ÉÒÔ´ïµ½5000microsendsµÄËÙ¶ÈÒÔµ¥×ÖÏÔʾµ÷ÓÃдÂúÈ«ÆÁ
>(¼´·´¸´µ÷ÓñÈÈçwrite_hanziÕâÑùÒ»¸öÏÔʾµ¥×ֵĹý³ÌÌíÂúÆÁ
>Ä», Ò²¾ÍÊÇ°üÀ¨ÁËpush, popµÄʱ¼ä, Èç¹ûдÔÚÒ»¸ö¹ý³ÌÖп϶¨
>»á¸ü¿ìÒ»µã). Èç¹û˵дģʽ3ÓõIJ»¶àµÄÔÒòÔÚÓÚºÍEGA²»¼æÈÝ
>µÄ»°, ÄÇô°´ÕÕÏÖÔÚVGAÈç´ËÆÕ¼°µÄÇéÐÎ, ÎÒÏë¸Ã²»ÓÃÔÙ¿¼ÂǺÍ
>EGA¼äµÄ¼æÈÝÐÔÁË°É. ÎÒÐÞ¸ÄÁËcceÖеÄÏÔʾascii×Ö·ûµÄ¹ý³Ì,
>ÖØбàÒëºó, ²âÊÔÁËÒ»ÏÂÏÔʾyactÔ´ÂëÖÐtestĿ¼Ïµļ¸¸ö
>ASCII ART Îļþ, ±ÈÈçearth(ÓÃASCII×Ö·û»Ò»¸öÐýתµÄµØÇò,
>»¹ÓÐÐí¶àÆäËûºÃÍæµÄ¶«Î÷, ÈçÊ¥µ®¶¯»µÈ, ºÜ¾µä),
>ËÙ¶ÈÃ÷ÏÔ¿ìÁËÐí¶à, ºÍgceÏà±È»¹ÊÇ¿ì(ÏëÀ´, gce²»»áÊÇÓÃдģ
>ʽ3ÏÔʾ×Ö·ûµÄ). µ«ÔÚÎļþ±È½Ï¶àµÄĿ¼ÏÂÖ´ÐÐÒ»´Îls·¢ÏÖû
>ÓÐÃ÷ÏÔµÄËÙ¶ÈÔö¼Ó, cceÖ®ËùÒÔÂý¿´À´Òª¹é¾ÌÓÚ¾íÆÁµÄÎÊÌâÁË,
>cceͨ¹ý¿½±´ÏÔ´æʵÏÖ¾íÆÁ, ԼҪռȥ40000microsecondsµÄʱ
>¼ä, ºÍÏÔʾһÕûÆÁºº×ÖÏà±È, ÓÅ»¯ºóËÙ¶ÈÎÞ¹ÖûÓÐÃ÷ÏÔµÄÔö¼Ó.
>¿¼ÂÇÓÃÆðʼÐÐɨÃè¼Ä´æÆ÷(¹À¼ÆgceÒ²ÊÇÕâô×öµÄ), »¹ÊÇÓÐЩÎÊ
>ÌâµÄ, Ò»ÊÇÏÞÓÚ64KÓ³ÉäÏÔ´æµÄÏÞÖÆ, Ô¼Ö»Äܾí18ÐÐ, 18Ðкó»¹
>ÊÇÒªÓÐÒ»´Î´óÁ¿µÄÏÔ´æ--ÏԴ濽±´, Èç¹ûÄܱÜÃâ, µ±È»×îºÃ.
>¶þÊÇÓÃÆðʼɨÃè¼Ä´æÆ÷µÄ»°, ÿ´Î¾íÆÁ, ¶¼ÒªÖػ״̬Ìõ, ¸Ã
>ÈçºÎ±ÜÃâ? ²ð·ÖÆÁÄ»ÊÇ·ñÄܽâ¾ö´ËÎÊÌâ. Èç¹ûÉÏÊöÁ½Õ߶¼²»ÄÜ
>±ÜÃâµÄ»°, ¹ÀËãÁËÒ»ÏÂ, ÿ¾íÆÁ18ÐÐ, ƽ¾ùÿ´Î¾íÆÁËù»¯Ê±¼ä
>4500microseconds, ËäÈ»»¹ÊÇԶԶСÓÚcceµÄʱ¼ä, µ«È´²»ÊÇ
>×îÀíÏëµÄ. ÎÒÔÚÕâÀïÌÖÂÛ, Ï£ÍûÓйýºº×Ö»òͼÐαà³Ì¾ÑéµÄÅó
>ÓÑÄÜ˵˵½â¾öÖ®µÀ.
>
>Áí¸½ÀûÓÃдģʽ3ʵÏÖµ¥×ÖÏÔʾµÄ¹ý³Ì:
>#void hz16_draw (int row, int col, char** hzbm);
>#row -- ÐÐ
>#col -- ÁÐ
>#hzbm - ºº×Öλͼ
>
>hz16_draw:
> pushl %ebp
> movl %esp, %ebp
> pushl %ecx
> pushl %edx
> pushl %esi
> pushl %edi
>
> # ÓÃoffset_table±íµÄ·½·¨Ôö¼ÓËÙ¶È,
> # µÈЧÓÚÏÂÃæ×¢Ê͵ĴúÂë
> movl 8(%ebp), %eax
> shll $2, %eax
> movl offset_table(%eax), %edi
> movl 12(%ebp),%edx
> shll $1, %edx
> addl %edx, %edi
>
> # simpliest but slowest
> # movl 8(%ebp), %eax
> # imul $1440, %eax
> # movl %eax, %edi
>
> movl 16(%ebp), %esi
> addl graph_mem, %edi
>
> #draw background
> movw $0x3CE, %dx
> movw $0xf00, %ax # replace 0xf with background
> outw %ax, %dx
>
> movw $0xffff, (%edi)
>
> #draw foreground
> movw $0x0000, %ax # replace 0x0 with foreground
> outw %ax, %dx
>
> # Ëö´æÆ÷Öж¼ÊÇÒ»ÑùµÄÖµ, ¹ÊÖ»×°ÈëÒ»´Î
> # ½ÚÔ¼2000microseconds :-)
> movw (%edi), %ax
> movl $18, %ecx
>draw2:
> movw (%esi), %ax
> movw %ax, (%edi)
> addl $80, %edi
> inc %esi
> inc %esi
> loop draw2
>
> popl %edi
> popl %esi
> popl %edx
> popl %ecx
> popl %ebp
> ret
>
>
>
>
Reply to: