news 2026/5/23 15:29:12

汇编语言全接触-78.如何产生一个BMP文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
汇编语言全接触-78.如何产生一个BMP文件

概述:

BMP 文件是一种常用的图像文件格式,本文的例子程序产生一个简单的 640x480 24 bit 颜色的 BMP 文件。BMP 文件的格式分两部分,第一部分为文件头,具体定义见源程序,第二部分为数据区,紧接着文件头存放。

源程序:

code segment

assume cs:code,ds:code

org 100h

start:

jmp install

;BMP 文件头定义

;---------------------------------------------------------------

BMP_HEAD DB 'BM' ;固定为 'BM'

D_FILE_LENGTH DD 640*480*3+36h ;文件总长度,包括文件头

D_RESERVED DD ? ;reserved

D_OFFSET DD 36h ;数据区开始位置

D_BISIZE DD 28h ;bit map info' head length

D_WIDTH DD 640 ;图形的宽度(单位象素)

D_HEIGHT DD 480 ;图形的高度(单位象素)

D_PLANES DW 1 ;图形的平面数

D_BIT DW 24 ;颜色位数

D_COMPRESS DD 0 ;压缩方式(0为不压缩)

D_SIZE DD 640*480*3 ;数据长度

D_XPPM DD 0c00h ;pixels per meter (x)

D_YPPM DD 0c00h ;pixels per meter (y)

D_CLRUSED DD 0 ;color used

D_CLRIMP DD 0 ;important color index

BMP_HEAD_END EQU THIS BYTE

;----------------------------------------------------------------

HANDLE DW ?

FILE_NAME DB 'test.bmp',0

LINE_BUF DB 640*3 dup (0)

D_RED DB 0ffh

D_GREEN DB 0

D_BLUE DB 0

install:

mov ah,3ch ;建立文件

xor cx,cx

mov dx,offset file_name

int 21h

jnb cre_ok

int 20h

cre_ok:

mov handle,ax

mov ah,40h ;写入文件头

mov bx,handle

mov cx,offset bmp_head_end-offset bmp_head

mov dx,offset bmp_head

int 21h

mov cx,480 ;写入 480 行数据

xor bp,bp

b_lop:

push cx

mov ax,bp

inc bp

cmp ax,160

jb b1

cmp ax,320

jb b2

b3:

sub ax,320

mov si,offset d_blue

mov di,offset d_red

jmp short b4

b2:

sub ax,160

mov si,offset d_green

mov di,offset d_blue

jmp short b4

b1:

mov si,offset d_red

mov di,offset d_green

b4:

mov cx,0ffh

mul cx

mov cx,160 ;160

div cx

mov byte ptr ds:[si],0ffh

sub byte ptr ds:[si],al

mov byte ptr ds:[di],al

mov cx,640

mov di,offset line_buf

cld

b_lop1:

mov al,d_red

stosb

mov al,d_green

stosb

mov al,d_blue

stosb

loop b_lop1

mov ah,40h

mov bx,handle

mov cx,640*3

mov dx,offset line_buf

int 21h

pop cx

loop b_lop

mov ah,3eh ;关闭文件

int 21h

int 20h

CODE ENDS

END START

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 12:24:11

Chrome画中画扩展深度解析:从基础使用到高级技巧

Chrome画中画扩展深度解析:从基础使用到高级技巧 【免费下载链接】picture-in-picture-chrome-extension 项目地址: https://gitcode.com/gh_mirrors/pi/picture-in-picture-chrome-extension Chrome浏览器的画中画扩展为用户提供了强大的多任务处理能力&am…

作者头像 李华
网站建设 2026/5/21 15:49:04

Ryujinx模拟器终极性能优化指南:从卡顿到流畅的5大实战技巧

Ryujinx模拟器终极性能优化指南:从卡顿到流畅的5大实战技巧 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 还在为Ryujinx模拟器运行游戏时的画面卡顿、声音断断续续而烦恼…

作者头像 李华
网站建设 2026/5/9 10:14:29

PyMOL分子可视化终极指南:从零开始快速上手

PyMOL分子可视化终极指南:从零开始快速上手 【免费下载链接】pymol-open-source Open-source foundation of the user-sponsored PyMOL molecular visualization system. 项目地址: https://gitcode.com/gh_mirrors/py/pymol-open-source PyMOL作为强大的分子…

作者头像 李华
网站建设 2026/5/12 6:37:48

Obsidian Pandoc插件完整指南:一站式文档转换解决方案

Obsidian Pandoc插件完整指南:一站式文档转换解决方案 【免费下载链接】obsidian-pandoc Pandoc document export plugin for Obsidian (https://obsidian.md) 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-pandoc 还在为文档格式转换的繁琐过程而…

作者头像 李华
网站建设 2026/5/22 11:13:25

3DS无线文件管理终极教程:5分钟实现零数据线传输

3DS无线文件管理终极教程:5分钟实现零数据线传输 【免费下载链接】3DS-FBI-Link Mac app to graphically push CIAs to FBI. Extra features over servefiles and Boop. 项目地址: https://gitcode.com/gh_mirrors/3d/3DS-FBI-Link 还在为3DS文件管理而烦恼吗…

作者头像 李华