汇编语言显示bmp图像文件-实验报告-附源码.doc

上传人:大张伟 文档编号:6080586 上传时间:2020-09-06 格式:DOC 页数:7 大小:680.50KB
返回 下载 相关 举报
汇编语言显示bmp图像文件-实验报告-附源码.doc_第1页
第1页 / 共7页
汇编语言显示bmp图像文件-实验报告-附源码.doc_第2页
第2页 / 共7页
汇编语言显示bmp图像文件-实验报告-附源码.doc_第3页
第3页 / 共7页
汇编语言显示bmp图像文件-实验报告-附源码.doc_第4页
第4页 / 共7页
汇编语言显示bmp图像文件-实验报告-附源码.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《汇编语言显示bmp图像文件-实验报告-附源码.doc》由会员分享,可在线阅读,更多相关《汇编语言显示bmp图像文件-实验报告-附源码.doc(7页珍藏版)》请在三一文库上搜索。

1、1. 问题描述用汇编语言编写程序,该程序能打开并显示一个.bmp位图图像文件。原本设想该程序在命令提示符下输入文件路径后直接打开文件,但是在用DosBox测试时发现不能寻找系统路径,后来将程序改成直接打开当前文件夹下的某个文件,不再输入文件路径。这个程序对图片文件格式有一定的要求,首先显示模式为320*200的256色模式,故位图属性应该是256色位图,即位深度为8。2. 位图相关知识BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式。由于它可以不作任何变换地保存图像像素域的数据

2、,因此成为我们取得RAW数据的重要来源。Windows的图形用户界面(graphical user interfaces)也在它的内建图像子系统GDI中对BMP格式提供了支持。BMP文件的数据按照从文件头开始的先后顺序分为四个部分:bmp文件头(bmp file header):提供文件的格式、大小等信息;位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息;调色板(color palette):可选,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表;位图数据(bitmap data):用来保存图像数据;色彩深度又叫色彩位数,即位

3、图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指标。常用有1位(单色),2位(4色,CGA),4位(16色,VGA),8位(256色),16位(增强色),24位和32位(真彩色)等。其中24位和32位位图中没有调色板。在这个实验中,因为程序显示模式为256色,于是我采用8位色彩深度的位图图片。因此,我用windows的画图工具制作了一个320*200大小的256色位图图片。如图所示:为了便于了解位图文件的组成结构,先用UltraEdit软件将上图打开,图片数据如下图所示: 位图各部分组成结构如下表所示:地址偏移大小(字节)数值(十六进制)说明0000h242 2D位图的类型000

4、2h436 FE 00 00文件大小(FE36H)0006h400 00 00 00保留位000Ah436 04 00 00位图数据开始的地址(0436H)000Eh428 00 00 00位图信息头的长度(Windows默认28)0012h440 01 00 00位图宽度(0140h=320)0016h4C8 00 00 00位图高度(00c8h=200)001Ch408 00 00 00每个像素位数(08h=28=256色)0036h256*400 00 调色板信息0076h6400000 40 图像数据,彩色调色板的索引号3. 数据结构在程序中,需要用到几个由数组组成的缓冲区。1、保存文

5、件头信息的head,占54个字节2、保存调色板信息部分的color,占1024个字节3、图片数据信息部分datas,占64000个字节4. 算法描述读取失败打开失败打开失败读取成功打开成功打开文件读取文件设置显示模式结束向显存地址写入图像数据设置调色板信息5. 效果与测试情况测试图片:6. 分析与讨论实验中出现的问题及解决办法:1、问题:程序运行时停在一步没有反应; 分析:猜测是文件并没有打开成功或者读取文件失败,无法继续程序,而我当时没有加入文件打开失败的处理代码,因此程序无法继续进行; 解决方法:在源代码中加入文件打开失败和文件读取失败的处理代码。2、问题:用问题1的解决方法之后一直提示文

6、件打开失败;分析:经过测试发现在使用虚拟机DosBox测试程序时不能识别图片文件路径,导致找不到文件,因此无法打开; 解决方法:删去文件名前面的路径,改成直接打开当前目录下的文件,但需提前在源程序文件夹下放置测试图片;仍需解决的问题:1、只能处理一种类型的图片,且对文件尺寸大小和色彩深度有要求,程序兼容性不高;7. 参考资料1沈美明,温冬婵. IBM-PC汇编程序设计. 北京:清华大学出版社,20018. 源代码data segmentfile db weitu256.bmp,00headdb 54 dup(0);位图头信息部分00h-35hcolor db 1024 dup(0);调色板信息

7、部分36h-0435hdatas db 64000 dup(0);图片数据信息部分,0436h-fa36herror1 db failed to open file!,24herror2 db failed to read file!,24hdata endsstacks segment stackdw 100 dup(0)top label wordstacks endscode segment assume cs:code,ss:stacks,ds:datamain proc farmov ax,datamov ds,axmov ax,stacksmov ss,axlea sp,top;只

8、读方式打开文件mov ah,3dhmov al,00hlea dx,fileint 21hjc openError;将文件读入内存从bmphead开始的数据缓冲区mov bx,ax;bx=文件代号mov ah,3fhmov cx,0fe36h ;cx=读取的字节数,即图片文件大小lea dx,headint 21hjc readError;设置显示模式 256色,320200像素mov ax,0013hint 10h;设置调色板,输出(OUT)色彩索引号,共写256次mov cx,256mov bl,0mov di,0L1:mov al,blmov dx,03c8hout dx,almov d

9、x,03c9hmov al,colordi+2;位图中调色板存放格式:shr al,1shr al,1out dx,al;dx=端口号mov al,colordi+1shr al,1shr al,1out dx,almov al,colordishr al,1shr al,1out dx,aladd di,4inc blloop L1;向显存地址写入数据mov ax,0a000h;显存地址(0A000:00000A000:0F9FF)mov es,ax;位图中图像由底向上自左向右存储,;而显示屏上要求从上至下mov di,63680d;320*199lea si,datas;故从底写至上,写图像索引号及RGB数据mov bx,200loop2:mov cx,320loop1:mov al,simov es:di,alinc si;指向该行下一像素inc diloop loop1sub di,640;写上一行,320+320dec bxcmp bx,0jnz loop2jmp exitopenError:lea dx,error1mov ah,9int 21hjmp exitreadError:lea dx,error2mov ah,9int 21hexit:mov ah,4chint 21hmain endpcode endsend main

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1