news 2026/6/9 19:57:21

汇编语言全接触-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/6/10 13:37:48

模型对比实战:三小时完成阿里通义与Stable Diffusion的效果评测

模型对比实战:三小时完成阿里通义与Stable Diffusion的效果评测 作为一名技术博主,我最近计划撰写一篇关于主流图像生成模型的横向评测文章。但在实际操作中,我发现搭建多个测试环境不仅耗时耗力,还难以保证公平比较的条件。经过一…

作者头像 李华
网站建设 2026/6/10 14:44:45

AutoUnipus智能学习助手:重新定义网课学习效率

AutoUnipus智能学习助手:重新定义网课学习效率 【免费下载链接】AutoUnipus U校园脚本,支持全自动答题,百分百正确 2024最新版 项目地址: https://gitcode.com/gh_mirrors/au/AutoUnipus 作为一名长期与网课相伴的学习者,我深知手动完成重复性练习…

作者头像 李华
网站建设 2026/6/10 16:51:49

Ryujinx Switch模拟器从零配置到流畅游戏:新手必学的4个关键步骤

Ryujinx Switch模拟器从零配置到流畅游戏:新手必学的4个关键步骤 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款基于C#开发的开源Nintendo Switch模拟器&…

作者头像 李华
网站建设 2026/6/10 15:35:31

Rockchip RK3588实战完全指南:Ubuntu系统部署与性能调优

Rockchip RK3588实战完全指南:Ubuntu系统部署与性能调优 【免费下载链接】ubuntu-rockchip Ubuntu 22.04 for Rockchip RK3588 Devices 项目地址: https://gitcode.com/gh_mirrors/ub/ubuntu-rockchip 探索如何在Rockchip RK3588开发板上高效部署Ubuntu系统&…

作者头像 李华
网站建设 2026/6/10 16:35:28

一键部署Z-Image-Turbo WebUI:科哥二次开发版快速体验

一键部署Z-Image-Turbo WebUI:科哥二次开发版快速体验 作为一名产品经理,你是否遇到过这样的困境:需要在产品原型中快速验证AI图像生成的效果,但公司IT资源紧张,本地部署又面临复杂的依赖和配置问题?本文将…

作者头像 李华
网站建设 2026/6/9 18:47:47

Vue3 H5移动端开发实战:从项目搭建到性能优化全流程解析

Vue3 H5移动端开发实战:从项目搭建到性能优化全流程解析 【免费下载链接】vue3-h5-template 🌱 A ready-to-use mobile project base template built with the Vue3, Vant, and Vite. | 基于 Vue3、Vite4、TypeScript/JavaScript、Tailwindcss、Vant4&am…

作者头像 李华