免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 13346 | 回复: 46
打印 上一主题 下一主题

DOS下看真彩BMP位图的小程序(我给加了注释) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-03 23:55 |只看该作者 |正序浏览
很久以前编的DOS看真彩BMP位图的小程序给贴上来了,有兴趣的就自己编译着玩玩,里边还有我写的一个画直线的算法,不过很笨拙。 初学者可以试着看看源码挺简单的,看到有不少人看这个贴子我就给注释了,不过画直线的函数就不用看了,很乱我自己都懒得看所以就没有注释
另外几个函数的功能在后面的跟贴我简单的介绍了一下



A.c main文件


  1. #include <stdio.h>;
  2. #include <conio.h>;
  3. #include "a.h"

  4. /*extern         void        print();
  5. *extern  void        init(int);
  6. *extern  void        vinfo(int)
  7. *extern  void demo(int,int,int);
  8. *extern  void Pixel16HiC(int,int,int);
  9. *extern         void Pixel24TrC(unsigned long int,int,int);
  10. *extern         void Pixel256C(char,int,int);

  11. *#define         Hi15(R,G,B)
  12. *#define  HiColor(R,G,B)    R*2048+G*32+B
  13. *#define  TrColor(R,G,B)    R*65536+G*256+B
  14. *#define  Tr_HColor(R,G,B)
  15. *#define  H_TColor(RGB)
  16. *#define  T_HColor(RGB)
  17. */



  18. main()
  19. {
  20.         unsigned int i,j,x,y;
  21.         FILE *fp;

  22.         if((fp=fopen("d:\\BC4\\Ship\\24.bmp","rb"))==NULL)/*自己选择路径*/
  23.                 printf("Can't open 256.bmp\n");

  24.         init(Tr800_600);/*初始化显示模式为24位真彩色,800*600分辨率*/

  25.         readpic(fp);/*主函数*/
  26.                 fclose(fp);

  27.         /*for(i=0;i<=767;i++)
  28.          *                line(i,i,1023,0,TrC(i,i*3,i/2));/*这里是画直线函数*/
  29.                  */
  30.                 getch();
  31.         return;
  32. }

复制代码




BMP.C 主文件,里边有画直线函数

  1. #include<stdio.h>;
  2. #include<alloc.h>;
  3. #include<dos.h>;
  4. #include"a.h"



  5. unsigned        far* readpic(FILE *fp)
  6. {

  7.         struct bmp_head  far* bhead;
  8.         int        x,y;
  9.         unsigned long size,length,width;
  10.         void far *        farmem;
  11.         unsigned char        far *RGB;
  12.         char        temp[30],over;


  13.         fread(temp,30L,1,fp); /*读BMP文件头信息*/

  14.         bhead=(char far*)temp;

  15.         over=bhead->;width%4;/*BMP格式每行多出的位,我也不清楚为什么要多出这几位,当时我这里让我很头痛费了好大劲才查出来*/

  16.         width=bhead->;width*3+over;/*位图宽*/

  17.         if((farmem=farmalloc(width*10+10))==NULL)/*分配缓冲区因为DOS最大可分配内存是一个段64K字节这里我分配了位图宽度*10 +10*/
  18.                 printf("Not enough Memory\n");

  19.         fseek(fp,bhead->;offset,0);/*读指针跳到位图数据起点*/

  20.         fread(farmem,width,10,fp);/*读位图数据到缓冲区*/
  21.                
  22.         RGB=farmem;/*RGB画像素用的指针,每像素3个字节*/

  23.         for(y=bhead->;hight;y>;=0;y--)/*bhead->;hight 位图高度*/
  24.         {
  25.                 for(x=0;x<bhead->;width;x++)/*bhead->;width 位图宽度*/
  26.                 {
  27.                         Pixel24TrC(TrC(*(RGB+2),*(RGB+1),*RGB),x,y);/*画点*/
  28.                         RGB=RGB+3;/*一个像素点3个字节*/
  29.                         if(FP_OFF(RGB)==width*10+FP_OFF(farmem)||FP_OFF(RGB)==width*10+FP_OFF(farmem)+3)/*FP_OFF取远指针偏移,这个条件语句判断画完一个缓冲区*/
  30.                         {
  31.                                 fread(farmem,width,10,fp);
  32.                                 RGB=farmem;
  33.                         }/*把BMP位图分成缓冲区大小的段*/
  34.                 }
  35.                 RGB=RGB+over;/*每行最后多出over个字节*/
  36.         }
  37.         farfree(farmem);


  38.         return        farmem;

  39. }


  40. /*画直线函数*/

  41. void line(unsigned long left_x,unsigned long left_y,unsigned long right_x,unsigned long right_y,unsigned long color)
  42. {

  43.         unsigned long        x=left_x,y=left_y;
  44.         if(left_x>;right_x)
  45.                 if(left_y>;right_y)
  46.                 {
  47.                         while(left_x-right_x>;left_x-x)
  48.                         {
  49.                                 Pixel24TrC(color,x,y);
  50.                                 if((left_x-right_x)>;(left_y-right_y))
  51.                                         while((left_y-right_y)*(left_x-x)<(left_x-right_x)*(left_y-y))
  52.                                         {
  53.                                                 x--;
  54.                                                 Pixel24TrC(color,x,y);
  55.                                         }
  56.                                 x--;
  57.                                 if(y<=right_y)
  58.                                         continue;
  59.                                 if((left_y-right_y)>;(left_x-right_x))
  60.                                         while((left_y-right_y)*(left_x-x)>;(left_x-right_x)*(left_y-y))
  61.                                         {
  62.                                                 y--;
  63.                                                 Pixel24TrC(color,x,y);
  64.                                         }
  65.                                 y--;
  66.                         };
  67.                         while(y>;right_y)
  68.                         {
  69.                                 Pixel24TrC(color,x,y);
  70.                                 y--;
  71.                         };

  72.                 }
  73.                 else
  74.                 {
  75.                         while(x>;right_x)
  76.                         {
  77.                                 Pixel24TrC(color,x,y);
  78.                                 if((left_x-right_x)>;(right_y-left_y))
  79.                                         while((right_y-left_y)*(left_x-x)<(left_x-right_x)*(y-left_y))
  80.                                         {
  81.                                                 x--;
  82.                                                 Pixel24TrC(color,x,y);
  83.                                         }
  84.                                 x--;
  85.                                 if(!(y<right_y))
  86.                                         continue;
  87.                                 if((right_y-left_y)>;(left_x-right_x))
  88.                                         while((right_y-left_y)*(left_x-x)>;(left_x-right_x)*(y-left_y))
  89.                                         {
  90.                                                 y++;
  91.                                                 Pixel24TrC(color,x,y);
  92.                                         }
  93.                                 y++;
  94.                         };

  95.                         while(y<=right_y)
  96.                         {
  97.                                 Pixel24TrC(color,x,y);
  98.                                 y++;
  99.                         };
  100.                 }

  101.         else
  102.                 if(left_y>;right_y)
  103.                 {
  104.                         while(x<right_x)
  105.                         {
  106.                                 Pixel24TrC(color,x,y);
  107.                                 if((right_x-left_x)>;(left_y-right_y))
  108.                                         while((left_y-right_y)*(x-left_x)<(right_x-left_x)*(left_y-y))
  109.                                         {
  110.                                                 x++;
  111.                                                 Pixel24TrC(color,x,y);
  112.                                         }
  113.                                 x++;
  114.                                 if(left_y-y>;left_y-right_y)
  115.                                         continue;
  116.                                 if((left_y-right_y)>;(right_x-left_x))
  117.                                         while((left_y-right_y)*(x-left_x)>;(right_x-left_x)*(left_y-y))
  118.                                         {
  119.                                                 y--;
  120.                                                 Pixel24TrC(color,x,y);
  121.                                         }
  122.                                 y--;
  123.                         };

  124.                         while(left_y-y<=left_y-right_y)
  125.                         {
  126.                                 Pixel24TrC(color,x,y);
  127.                                 y--;
  128.                         };

  129.                 }
  130.                 else
  131.                 {
  132.                         while(x<right_x)
  133.                         {
  134.                                 Pixel24TrC(color,x,y);
  135.                                 if((right_x-left_x)>;(right_y-left_y))
  136.                                         while((right_y-left_y)*(x-left_x)<(right_x-left_x)*(y-left_y))
  137.                                         {
  138.                                                 x++;
  139.                                                 Pixel24TrC(color,x,y);
  140.                                         }

  141.                                 x++;

  142.                                 if(y>;=right_y)
  143.                                         continue;
  144.                                 if((right_y-left_y)>;(right_x-left_x))
  145.                                         while((right_y-left_y)*(x-left_x)>;(right_x-left_x)*(y-left_y))
  146.                                         {
  147.                                                 y++;
  148.                                                 Pixel24TrC(color,x,y);
  149.                                         }
  150.                                 y++;
  151.                         };

  152.                         while(y<=right_y)
  153.                         {
  154.                                 Pixel24TrC(color,x,y);
  155.                                 y++;
  156.                         };
  157.                 }

  158.         return 0;
  159. }


复制代码



a.h 头文件


  1. #define        LINE        640


  2. #define        C256(R,G,B)                (unsigned char)R*0x20%0x100+(unsigned char)G*0x4%0x20+B

  3. #define         Hi15(R,G,B)                (unsigned)R*0x400%0x8000+(unsigned)G*0x20%0x400+(char)B%0x20

  4. #define        HiC(R,G,B)                 (unsigned)R*0x800%0x10000+(unsigned)G*32%0x800+(char)B%0x20
  5. #define        TrC(R,G,B)                (unsigned long)R*0x10000%0x1000000+(unsigned long)G*0x100%0x10000+(unsigned)B%0x100
  6. #define        Hi-TrC(RGB)           (unsigned long)RGB%0x10000/2048*65536+(unsigned long)RGB%2048/32*256+(unsigned char)RGB%32
  7. #define        Tr-HiC(RGB)                (unsigned long)RGB%0x1000000/65536%32*2048+(unsigned long)RGB%65536/64*32+(unsigned char)(RGB%32)


  8. #define        C256_640_400                0x100
  9. #define        C256_640_480                0x101
  10. #define        C16_800_600                        0x102
  11. #define        C256_800_600                0x103
  12. #define        C16_1024_768                0x104
  13. #define        C256_1024_768                0x105
  14. #define        Hi15_640_480                0x110
  15. #define        Hi640_480                        0x111
  16. #define        Tr640_480         0x112
  17. #define        Hi15_800_600                0x113
  18. #define        Hi800_600                        0x114
  19. #define        Tr800_600                        0x115
  20. #define        Hi15_1024_768                0x116
  21. #define        Hi1024_768                        0x117
  22. #define        Tr1024_768                        0x118




  23. extern        void  Demo(unsigned long,int,int);

  24. extern        void        init(int);
  25. extern      void Pixel16HiC(int,int,int);
  26. extern        void Pixel24TrC(unsigned long,int,int);
  27. extern        void Pixel256C(char,int,int);
  28. extern      void line(unsigned long x1,unsigned long y1,unsigned long x2,unsigned long y2,unsigned long color);

  29. /*seepic*/
  30. extern        unsigned far* readpic(FILE *fp);

  31. extern        void mouse(void);


  32. struct        bmp_head
  33. {
  34.         int         other1;
  35.         unsigned long        length;
  36.         char        other2[4];
  37.         unsigned  int        offset;
  38.         char        other3[6];
  39.         unsigned  int        width;
  40.         char        other4[2];
  41.         unsigned  int        hight;
  42.         char                        other5[4];
  43.         unsigned        char        color;
  44. };
复制代码



mybmp.c这是嵌入式汇编的画点函数

  1. void init(int mode)
  2. {
  3.         asm        mov                bx,mode
  4.         asm         mov                ax,4f02h
  5.         asm        int                10h
  6.         return;
  7. }




  8. void Pixel24TrC(unsigned long color,int x,int y)
  9. {

  10.         asm         push                es
  11.         asm        push                di

  12.         asm        mov                ax,4f03h
  13.         asm        int                10h

  14. pi112:
  15.         asm        cmp                 bx,112h
  16.         asm        jnz                pi115

  17.         asm        mov                dx,640
  18.         asm        jmp                write_24t


  19. pi115:
  20.         asm        cmp                bx,115h
  21.         asm        jnz                pi118

  22.         asm        mov                dx,800
  23.         asm        jmp                write_24t

  24. pi118:
  25.         asm        cmp                bx,118h
  26.         asm        jnz                Tr_exit

  27.         asm        mov                dx,1024

  28. write_24t:
  29.         asm        mov                ax,0a000h
  30.         asm        mov                es,ax
  31.         asm        mov                ax,y
  32.         asm        mul                dx
  33.         asm        mov                bx,ax
  34.         asm        mov                cx,dx
  35.         asm        add                ax,bx
  36.         asm        adc                dx,cx
  37.         asm        add                ax,bx
  38.         asm        adc                dx,cx
  39.         asm        add                ax,bx
  40.         asm        adc                dx,cx

  41.         asm        mov                bx,x
  42.         asm        add                bx,x
  43.         asm        add                bx,x
  44.         asm        add                bx,x
  45.         asm        add                ax,bx
  46.         asm        adc                dx,0
  47.         asm        mov                di,ax

  48.         asm        mov                ax,4f05h
  49.         asm        mov                bx,0
  50.         asm        int                10h

  51.         asm        mov                cx,word ptr color
  52.         asm        mov                word ptr es:[di],cx
  53.         asm        add                di,2
  54.         asm        mov                cx,word ptr color+2
  55.         asm        mov                word ptr es:[di],cx

  56. Tr_exit:
  57.         asm        pop                di
  58.         asm        pop                es

  59.         return;
  60. }


  61. void Pixel16HiC(int color,int x,int y)
  62. {
  63.         asm        push                es
  64.         asm        push                di

  65.         asm        mov                ax,4f03h
  66.         asm        int                10h

  67. pi110:
  68.         asm        cmp                bx,110h
  69.         asm        jnz                pi111

  70.         asm        mov                dx,640
  71.         asm        jmp                write_16h



  72. pi111:
  73.         asm        cmp                bx,111h
  74.         asm        jnz                pi113

  75.         asm        mov                dx,640
  76.         asm        jmp                write_16h



  77. pi113:
  78.         asm        cmp                bx,113h
  79.         asm        jnz                pi114

  80.         asm        mov                dx,800
  81.         asm        jmp                write_16h


  82. pi114:
  83.         asm        cmp                bx,114h
  84.         asm        jnz                pi116

  85.         asm        mov                dx,800
  86.         asm        jmp                write_16h


  87. pi116:
  88.         asm        cmp                bx,116h
  89.         asm        jnz                pi117

  90.         asm        mov                dx,1024
  91.         asm        jmp                write_16h


  92. pi117:
  93.         asm        cmp                bx,117h
  94.         asm        jnz                Hi_exit

  95.         asm        mov                dx,1024


  96. write_16h:
  97.         asm        mov                ax,0a000h
  98.         asm        mov                es,ax
  99.         asm        mov                ax,word ptr [y]
  100.         asm        mul                dx
  101.         asm        shl                ax,1
  102.         asm        jc                        a1
  103.         asm        shl                dx,1
  104.         asm        jmp                cont
  105. a1:
  106.         asm        shl                dx,1
  107.         asm        inc                dx

  108. cont:
  109.         asm        shl                word ptr [x],1
  110.         asm        add                ax,word ptr [x]
  111.         asm        adc                dx,0
  112.         asm        mov      di,ax

  113.         asm        mov                ax,4f05h
  114.         asm        mov                bx,0
  115.         asm        int                10h

  116.         asm        mov                cx,word ptr [color]
  117.         asm        mov                word ptr es:[di],cx

  118. Hi_exit:
  119.         asm        pop                di
  120.         asm        pop                es

  121.         return;
  122. }


  123. void Pixel256C(char        color,int x,int y)
  124. {
  125.         asm        push                es
  126.         asm        push                di


  127.         asm        mov                ax,4f03h
  128.         asm        int                10h


  129. pi100:
  130.         asm        cmp                bx,100h
  131.         asm        jnz                pi101

  132.         asm        mov                dx,640
  133.         asm        jmp                write_256

  134. pi101:
  135.         asm        cmp                bx,101h
  136.         asm        jnz                pi103

  137.         asm        mov                dx,640
  138.         asm        jmp                write_256



  139. pi103:
  140.         asm        cmp                bx,103h
  141.         asm        jnz                pi105

  142.         asm        mov                dx,800
  143.         asm        jmp                write_256



  144. pi105:
  145.         asm        cmp                bx,105h
  146.         asm        jnz                exit_256

  147.         asm        mov                dx,1024

  148. write_256:
  149.         asm        mov                ax,0a000h
  150.         asm        mov                es,ax
  151.         asm        mov                ax,word ptr [y]
  152.         asm        mul                dx
  153.         asm        add                ax,word ptr [x]
  154.         asm        adc                dl,0
  155.         asm        mov      di,ax

  156.         asm        mov                ax,4f05h
  157.         asm        mov                bx,0
  158.         asm        int                10h

  159.         asm        mov                cl,byte ptr [color]
  160.         asm        mov                byte ptr es:[di],cl


  161. exit_256:
  162.         asm        pop                di
  163.         asm        pop                es

  164.         return;
  165. }
复制代码



gl.asm 底层画点函数要用TASM编译,不过有上边的嵌入式汇编这个可以不用了


  1. .386

  2.                                         public          _init
  3.                                         public        _Demo
  4.                                         public   _Pixel16HiC
  5.                                         public   _Pixel24TrC
  6.                                         public   _Pixel256C


  7. _ATTRI                     struc

  8. MODE_ATTR           DW                ?
  9. WIN_A_ATTR                DB                ?
  10. WIN_B_ATTR                DB                ?
  11. WIN_GRAN                        DB                ?
  12. WIN_SIZE                        DW                ?
  13. WIN_A_SEG                DW                ?
  14. WIN_B_SEG                DW                ?
  15. WIN_FUNC_PTR   DD                ?
  16. LINE_BYTE                DW                ?

  17. _ATTRI                    ends



  18. mpusha                        macro
  19.                                         push                ax
  20.                                         push                cx
  21.                                         push                dx
  22.                                         push                bx
  23.                                         push                sp
  24.                                         push                bp
  25.                                         push                si
  26.                                         push                di
  27.                                         endm


  28. mpopa                                macro
  29.                                         pop                di
  30.                                         pop                si
  31.                                         pop                bp
  32.                                         pop                sp
  33.                                         pop                bx
  34.                                         pop                dx
  35.                                         pop                cx
  36.                                         pop                ax
  37.                                         endm


  38. DGROUP                        group                  _DATA,_BSS




  39.                                         extrn                _printf:far




  40. _TEXT                                segment        use16 byte public 'code'
  41.                                         assume        cs:_TEXT,ds:DGROUP


  42. ;初始化图型模式
  43. ;入口参数:显示模式压入?

  44. _init                     proc                far

  45.                                         enterw          0,0
  46.                                         mov                bx,[bp+6]
  47.                                         mov                ax,4f02h
  48.                                         int                10h
  49.                                         leavew
  50.                                         ret

  51. _init                      endp


  52. ;画点



  53. _Pixel24TrC         proc                far

  54.                                         enterw        0,0
  55.                                         push                es
  56.                                         push                di

  57.                                         mov                ax,4f03h
  58.                                         int                10h

  59. pi112:                        cmp                 bx,112h
  60.                                         jnz                pi115

  61.                                         mov                dx,640
  62.                                         jmp                write_24t


  63. pi115:         cmp                bx,115h
  64.                                         jnz                pi118

  65.                                         mov                dx,800
  66.                                         jmp                write_24t

  67. pi118:                        cmp                bx,118h
  68.                                         jnz                Tr_exit

  69.                                         mov                dx,1024

  70. write_24t:                mov                ax,0a000h
  71.                                         mov                es,ax
  72.                                         mov                ax,word ptr [bp+12]
  73.                                         mul                dx
  74.                                         mov                bx,ax
  75.                                         mov                cx,dx
  76.                                         add                ax,bx
  77.                                         adc                dx,cx
  78.                                         add                ax,bx
  79.                                         adc                dx,cx
  80.                                         add                ax,bx
  81.                                         adc                dx,cx

  82.                                         mov                bx,word ptr [bp+10]
  83.                                         add                bx,word ptr [bp+10]
  84.                                         add                bx,word ptr [bp+10]
  85.                                         add                bx,word ptr [bp+10]
  86.                                         add                ax,bx
  87.                                         adc                dx,0
  88.                                         mov                di,ax

  89.                                         mov                ax,4f05h
  90.                                         mov                bx,0
  91.                                         int                10h

  92.                                         mov                cx,word ptr [bp+6]
  93.                                         mov                word ptr es:[di],cx
  94.                                         add                di,2
  95.                                         mov                cx,word ptr [bp+8]
  96.                                         mov                word ptr es:[di],cx

  97. Tr_exit:                        pop                di
  98.                                         pop                es

  99.                                         leavew
  100.                                         ret

  101. _Pixel24TrC                endp




  102. _Pixel16HiC         proc                far

  103.                                         enterw        0,0
  104.                                         push                es
  105.                                         push                di

  106.                                         mov                ax,4f03h
  107.                                         int                10h

  108. pi110:                        cmp                bx,110h
  109.                                         jnz                pi111

  110.                                         mov                dx,640
  111.                                         jmp                write_16h



  112. pi111:         cmp                bx,111h
  113.                                         jnz                pi113

  114.                                         mov                dx,640
  115.                                         jmp                write_16h



  116. pi113:         cmp                bx,113h
  117.                                         jnz                pi114

  118.                                         mov                dx,800
  119.                                         jmp                write_16h


  120. pi114:         cmp                bx,114h
  121.                                         jnz                pi116

  122.                                         mov                dx,800
  123.                                         jmp                write_16h


  124. pi116:                        cmp                bx,116h
  125.                                         jnz                pi117

  126.                                         mov                dx,1024
  127.                                         jmp                write_16h


  128. pi117:         cmp                bx,117h
  129.                                         jnz                Hi_exit

  130.                                         mov                dx,1024


  131. write_16h:                mov                ax,0a000h
  132.                                         mov                es,ax
  133.                                         mov                ax,word ptr [bp+10]
  134.                                         mul                dx
  135.                                         shl                ax,1
  136.                                         jc                        a1
  137.                                         shl                dx,1
  138.                                         jmp                cont
  139. a1:                                shl                dx,1
  140.                                         inc                dx

  141. cont:                                shl                word ptr [bp+8],1
  142.                                         add                ax,word ptr [bp+8]
  143.                                         adc                dx,0
  144.                                         mov      di,ax

  145.                                         mov                ax,4f05h
  146.                                         mov                bx,0
  147.                                         int                10h

  148.                                         mov                cx,word ptr [bp+6]
  149.                                         mov                word ptr es:[di],cx

  150. Hi_exit:                        pop                di
  151.                                         pop                es

  152.                                         leavew
  153.                                         ret

  154. _Pixel16HiC                endp




  155. _Pixel256C                 proc                far

  156.                                         enterw        0,0
  157.                                         push                es
  158.                                         push                di


  159.                                         mov                ax,4f03h
  160.                                         int                10h


  161. pi100:                        cmp                bx,100h
  162.                                         jnz                pi101

  163.                                         mov                dx,640
  164.                                         jmp                write_256

  165. pi101:                        cmp                bx,101h
  166.                                         jnz                pi103

  167.                                         mov                dx,640
  168.                                         jmp                write_256



  169. pi103:                        cmp                bx,103h
  170.                                         jnz                pi105

  171.                                         mov                dx,800
  172.                                         jmp                write_256



  173. pi105:         cmp                bx,105h
  174.                                         jnz                exit_256

  175.                                         mov                dx,1024

  176. write_256:                mov                ax,0a000h
  177.                                         mov                es,ax
  178.                                         mov                ax,word ptr [bp+10]
  179.                                         mul                dx
  180.                                         add                ax,word ptr [bp+8]
  181.                                         adc                dl,0
  182.                                         mov      di,ax

  183.                                         mov                ax,4f05h
  184.                                         mov                bx,0
  185.                                         int                10h

  186.                                         mov                cl,byte ptr [bp+6]
  187.                                         mov                byte ptr es:[di],cl


  188. exit_256:                pop                di
  189.                                         pop                es

  190.                                         leavew
  191.                                         ret

  192. _Pixel256C                endp



  193. ;入口参数: ax=要转换的二进制数

  194. ;出口参数  dx:ax=转换十进数?
  195. B_O                                proc                near

  196.                                         enterw          5,0
  197.                                         push                es
  198.                                         push                di
  199.                                         push                si
  200.                                         mov                bx,10
  201.                                         mov                cx,5
  202.                                         mov                di,sp
  203.                                         mov                ax,ss
  204.                                         mov                es,ax

  205. getover:                        div      bx
  206.                                         add                dl,30h
  207.                                         mov                byte ptr           es:[di],dl
  208.                                         dec                cx
  209.                                         jz                        return
  210.                                         inc                di
  211.                                         cmp                ax,0
  212.                                         jnz      getover
  213.                                         mov                byte ptr           es:[di],dl

  214. return:                        xor                dx,dx
  215.                                         xor                ax,ax
  216.                                         std
  217.                                         mov                si,di
  218. relod:              mov                cx,4
  219.                                         lodsb
  220. re:                                shl                dx,1
  221.                                         shl                ax,1
  222.                                         jnc                d0
  223.                                         inc                dx
  224. d0:                 dec                cx
  225.                                         jnz                re

  226.                                         cmp                si,sp
  227.                                         jnz                relod

  228.                                         pop                si
  229.                                         pop                di
  230.                                         pop                es
  231.                                         leavew
  232.                                         ret

  233. B_O                                endp


  234. _Demo                 proc                  far

  235.                                         enterw        0,0
  236.                                         push                es
  237.                                         push                di

  238.                                         mov                ax,0a000h
  239.                                         mov                es,ax
  240.                                         mov                dx,1024
  241.                                         mov                ax,word ptr [bp+12]
  242.                                         mul                dx
  243.                                         mov                bx,ax
  244.                                         mov                cx,dx
  245.                                         add                ax,bx
  246.                                         adc                dx,cx
  247.                                         add                ax,bx
  248.                                         adc                dx,cx
  249.                                         add                ax,bx
  250.                                         adc                dx,cx

  251.                                         mov                bx,word ptr [bp+10]
  252.                                         add                bx,word ptr [bp+10]
  253.                                         add                bx,word ptr [bp+10]
  254.                                         add                bx,word ptr [bp+10]
  255.                                         add                ax,bx
  256.                                         adc                dx,0
  257. ;                                        cmp                ax,0fffdh
  258. ;                                        jnbe                exit_Tr

  259.                                         mov                di,ax

  260.                                         mov                ax,4f05h
  261.                                         mov                bx,0
  262.                                         int                10h

  263.                                         mov                cx,word ptr [bp+6]
  264.                                         mov                word ptr es:[di],cx
  265.                                         add                di,2
  266.                                         mov                cx,word ptr [bp+8]
  267.                                         mov                word ptr es:[di],cx

  268. exit_Tr:                        pop                di
  269.                                         pop                es
  270.                                         leavew

  271.                                         ret

  272. _Demo                                endp


  273. _TEXT                         ends




  274. _DATA                                segment  use16        byte public 'data'

  275. c@                                        label                byte
  276.                                         db                        37
  277.                                         db                        63h
  278.                                         db                        10
  279.                                         db                        0

  280. s@                                        label                byte
  281.                                         db                        37
  282.                                         db                        73h
  283.                                         db                        10
  284.                                         db                        0

  285. d@                                        label                byte
  286.                                         db                        37
  287.                                         db                        64h
  288.                                         db                        10
  289.                                         db                        0

  290. x@                                        label                byte
  291.                                         db                        37
  292.                                         db                        78h
  293.                                         db                        10
  294.                                         db                        0

  295. u@                                        label                byte
  296.                                         db                        37
  297.                                         db                        75h
  298.                                         db                        10
  299.                                         db                        0

  300. o@                                        label                byte
  301.                                         db                        37
  302.                                         db                        6fh
  303.                                         db                        10
  304.                                         db                        0


  305. _DATA               ends




  306. _BSS                                segment        use16        byte public 'data'

  307. attr                                _ATTRI        ?
  308.                                         db                        0f0h dup(0)

  309. _BSS                                ends


  310.                                         end
复制代码

论坛徽章:
0
47 [报告]
发表于 2007-06-17 02:40 |只看该作者
heihei,不错

论坛徽章:
0
46 [报告]
发表于 2007-06-17 02:23 |只看该作者

看过就要顶。。。

虽然还看不懂。。吼吼。。

论坛徽章:
0
45 [报告]
发表于 2007-05-08 17:59 |只看该作者
加油,努力学C,往LINUX图形界面发展

论坛徽章:
0
44 [报告]
发表于 2007-04-17 19:58 |只看该作者

顶一个

不知道,楼上各位有没有谁在Linux上玩图形界面啊?比如用Framebuffer显示图片,跑电影。

论坛徽章:
0
43 [报告]
发表于 2007-04-09 16:03 |只看该作者
想起了以前上编译原理课时为写词法分析器画流程图的日子……

论坛徽章:
0
42 [报告]
发表于 2007-03-20 11:22 |只看该作者
佩服,继续学习C

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
41 [报告]
发表于 2007-03-14 09:58 |只看该作者
谁把这帖子顶上来了???

好像看到了过去的自己.


.|^|.

论坛徽章:
0
40 [报告]
发表于 2007-03-14 09:42 |只看该作者
放上来就是,看得懂的人多得是啊,不要太骄傲了哦

论坛徽章:
0
39 [报告]
发表于 2007-01-19 10:40 |只看该作者
牛人.

93-94好远啊,
02年才认识的电脑.
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP