汇编语言显示位图的方法

上传人:jiups****uk12 文档编号:48508423 上传时间:2018-07-16 格式:DOC 页数:6 大小:139KB
返回 下载 相关 举报
汇编语言显示位图的方法_第1页
第1页 / 共6页
汇编语言显示位图的方法_第2页
第2页 / 共6页
汇编语言显示位图的方法_第3页
第3页 / 共6页
汇编语言显示位图的方法_第4页
第4页 / 共6页
汇编语言显示位图的方法_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《汇编语言显示位图的方法》由会员分享,可在线阅读,更多相关《汇编语言显示位图的方法(6页珍藏版)》请在金锄头文库上搜索。

1、位图文件的汇编语言显示1.开启项目的原因这个学期开了一门微机课(全名:微型计算机原理与接口技术),这样就不得不要接触到汇编语言(AssemblyLanguage),无奈蒙老师厚爱,给了这个题目。既然要做,那就要做得轰轰烈烈,把它放到自己的 网站上,与大家一起分享下。 2.需解决的问题现在要着手工作了,在开始前,想想要解决那些问题。1、位图文件的格式2、汇编中文件的读取3、汇编中显示的问题 3.Start. 开始工作了,先到 Google 上找找资料。3.1 位图文件的格式位图(Bitmap,bmp)文件的格式的结构由以下四部分组成:图文件头、位图信息头、彩色表、定义位图的字节阵列对于它的详细资

2、料可参考: http:/ 像素,16 色)其文件的十六进制数显示如下:各数据量说明:地址偏地址偏 移量移量大小大小数值数值(Hex)说明说明0000h 2Bytes42 4D 位图的类型0002h 4BytesF6 00 00 00文件的大小(F6H=246Bytes)0006h 4Bytes00 00 00 00保留位000Ah 4Bytes76 00 00 00从文件开始到位图数据开始之间之间的偏移 量(76H=位图数据从地址 0076H 开始)000Eh 4Bytes28 00 00 00位图信息头的长度,(28=windows 的默认 数值)0012h 4Bytes10 00 00 0

3、0位图的宽度,(10H=16 像素)0016h 4Bytes10 00 00 00位图的高度,(10H=16 像素)001Ch 4Bytes04 00 00 00每个像素的位数,(04H=24=16 色)0036h 16*4B00 00FF 00调色板。对于调色板中的每个表项,这 4 个 字节用下述方法来描述 RGB 的值:1 字节用 于蓝色分量,1 字节用于绿色分量,1 字节用于 红色分量,1 字节用于填充符(为 0)0076H 128B33 33 44 44图像数据,彩色调色板的索引号。由底向上 自左向右存储。对于 16 色图片来说,半个 Byte 就能表示一个索引号(范围 0-F)。如,

4、 首个 33H(地址 0076H)表示左下角的两个像素的调色板都为地址 (0036h+3*4h=0042h)里的 RGB 值3.2 文件的读取文件的读取,将硬盘里的文件读入至内存中。这里用到 DOS 的 21 号中断。读取文件分为两步:1、打开文件利用 DOS 21H 中断,功能号 AH=3DH,当 AL=00H 时,DS:DX 中存放文件的地址时,将以只读方式打开此文件,文件号存放于 AX 中。2、读取文件到内存利用 DOS 21H 中断,功能号 AH=3FH,当 BX=文件号,CX=读取的字节数时,将在 DS:DX 中存放读取的文件内容。示例:示例:DATA SEGMENTFILEHAND

5、 DW ? ;存放文件号PATHNM1 DB C:1.BMP,00Hbuffer db 256 dup(?) ;文件内容存放于此DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AH,3DH ;以只读方式打开文件MOV AL,00HLEA DX,PATHNM1INT 21HMOV FILEHAND,AXMOV AH,3FH ;将文件的 256 个字节写入内存MOV CX,256 ;number of bytes to readMOV DX,OFFSET BUFFERMOV BX,FILEHAND

6、INT 21HCODE ENDSEND START以上例程,将“c:1.bmp”的 256 个字节存于 DS:BUFFER 中。3.3 图形显示设置显示模式设置显示模式:当 AX=0013H 时,调用 10H 中断,可将显示模式设为 320200,256 像素。设置调色板设置调色板:向地址 03C8H 输出色彩索引号(0255),向地址 03C9H 依次输出 R、G、B。向显存里写数据向显存里写数据:当显示模式设为 13H 时,屏幕分辨率 320X200,对应显存地址0A000:00000A000:0F9FF。可依次向地址中写入相应的像素索引号。示例:示例:Data SegmentImageS

7、rcdb test.bmp,0bmpheaddb54 dup(?) ;存放位图的头信息bmppaldb1024 dup(?) ;存放位图文件的调色板信息(256 色4=1024B)bmpdatadb64000 dup(?) ;存放图片信息 Data EndsCode SegmentAssume cs:Code,ds:DataStart:mov ax,Datamov ds,axopenfile:MOVAH,3DH ;以知道方式打开文件 MOVAL,00HLEADX,ImageSrcINT21Hreadfile:movbx,ax ;将文件读入内存 DS:bmphead 中 movah,3fhmov

8、cx,0Fe36h ;文件大小 movdx,offset bmpheadint21hsetmode:movax,0013h ;设置显示模式 256 色,320200像素 int10hsetpal:mov cx,256 ;设置调色板,输出(OUT)色彩索引号及 RGB 数据,共写 256 次 mov bl,0 mov di,0wpal:mov al,blmov dx,03c8hout dx,almov dx,03c9hmov al,bmppaldi+2 ;位图中调色板存放格式:(为空)shr al,1 ;RGB/4 后写入,显卡要求,RGB 范围(063),位图中(0255)shr al,1ou

9、t dx,almov al,bmppaldi+1shr al,1shr al,1out dx,almov al,bmppaldishr al,1shr al,1out dx,aladd di,4inc blloop wpalwritepix:mov ax,0a000h ;显存地址 (0A000:00000A000:0F9FF)mov es,axmov di,320*199 ;位图中图像由底向上自左向右存储,而显示屏上要求从上至下lea si,offset bmpdata ;故从底写至上,写图像索引号。movbx,200 ;共 200 行 loop2:movcx,320 ;每行 320 像素 loop1:moval,simoves:di,alincsi ;指向该行下一像素 incdilooploop1subdi,320+320 ;写上一行 decbxcmpbx,0jnzloop2S_wait:mov ax,0 ;等待键盘按下任意键 int 16hS_mode:movax,4f02h ;返回字符模式 movbx,03hint10hexit: mov ax,4c01h ;返回 DOSint 21hCodeendsendStart

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号