showbmp.asm

来自「学分管理系统的分析」· 汇编 代码 · 共 86 行

ASM
86
字号
;功能:打开bmp图片
;入口参数:ax--y,bx---x 为图片位置的左下角坐标,dx为文件名指针
;si为显示方式  1-P_COPY,2- P_AND, 3-- P_OR, 4-  P_XOR
;出口参数:无

 include macro.lib
 extern writepoint:far
 public showbmp
 
data segment  public  'data'
  filecode dw 0
  buf db 3*1024 dup(0)
  picwidth dd 0
  x dw 0
  y dw 0
data ends
;===============================================
code segment   'code'
  assume cs:code,ds:data
 .386
;显示bmp图片
showbmp  proc far
      pusha 
      push ds                        ;保护现场
      mov x,bx
      mov y,ax
      
      mov bx,data
      mov ds,bx
      mov ah,3dh
      mov al,0
      int 21h
      jc  exit
      mov filecode,ax               ; 保存文件代号

      readfile filecode, buf, 54
      jnc next 
      closefile filecode             ;读文件失败      
      jmp exit
      
next: lea bx,buf                     ;读文件头信息
      mov eax,18[bx]                 ;文件宽度
      mov picwidth,eax
           
      mov ax,x 
      cwde
      mov ebx,eax                   ;设置起始点
      mov ax,y
      add picwidth,ebx
lopa: push ax
      readfile filecode ,buf,3*1024
      or ax,ax		              ;如果ax为零,则文件已经读完
      jz finish
      xor dx,dx
      mov cx,3
      div cx
      mov cx,ax
      pop ax
      
       lea di,buf
lopb:  RGB 2[di],1[di],0[di]	       ;颜色转换
      
       call writepoint		     ;画一个像素
            
       inc ebx
       cmp ebx,picwidth               ;换行
       jne next1
       dec ax 
       mov bx,x
next1: add di,3			     ;读另一个象素
       loop lopb
       jmp lopa

finish:
       pop ax
      
       closefile filecode
       pop ds                
exit:  popa
       ret   
showbmp  endp

code ends

     END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?