TASM汇编代码加载BMP图片报错且无法显示的问题求助
TASM汇编代码加载BMP图片报错且无法显示的问题求助
我从一本汇编书上抄了一段加载BMP图片的代码,自己把一张PNG转成了BMP格式,命名为doeshe.bmp。不管我把图片放在TASM文件夹根目录还是BIN子文件夹里,都看不到图片,反而会显示"Error"提示。
这是我用的代码:
IDEAL MODEL small STACK 100h DATASEG filename db 'doeshe.bmp',0 filehandle dw ? Header db 54 dup (0) Palette db 256*4 dup (0) ScrLine db 320 dup (0) ErrorMsg db 'Error', 13, 10 ,'$' CODESEG proc OpenFile mov ah, 3Dh xor al, al mov dx, offset filename int 21h jc openerror mov [filehandle], ax ret openerror : mov dx, offset ErrorMsg mov ah, 9h int 21h ret endp OpenFile proc ReadHeader mov ah,3fh mov bx, [filehandle] mov cx,54 mov dx,offset Header int 21h ret endp ReadHeader proc ReadPalette mov ah,3fh mov cx,400h mov dx,offset Palette int 21h ret endp ReadPalette proc CopyPal mov si,offset Palette mov cx,256 mov dx,3C8h mov al,0 out dx,al inc dx PalLoop: mov al,[si+2] shr al,2 out dx,al mov al,[si+1] shr al,2 out dx,al mov al,[si] shr al,2 out dx,al add si,4 loop PalLoop ret endp CopyPal proc CopyBitmap mov ax, 0A000h mov es, ax mov cx,200 PrintBMPLoop : push cx mov di,cx shl cx,6 shl di,8 add di,cx mov ah,3fh mov cx,320 mov dx,offset ScrLine int 21h cld mov cx,320 mov si,offset ScrLine rep movsb pop cx loop PrintBMPLoop ret endp CopyBitmap start : mov ax, @data mov ds, ax mov ax, 13h int 10h call OpenFile call ReadHeader call ReadPalette call CopyPal call CopyBitmap mov ah,1 int 21h mov ah, 0 mov al, 2 int 10h exit: mov ax, 4c00h int 21h END start
我原本期望能看到自己转换的图片,但实际运行后只弹出了"Error"提示,完全看不到图像。有没有大佬能帮我找找问题出在哪?
备注:内容来源于stack exchange,提问作者mia herstein
相关产品推荐
相关产品推荐

