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
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