程序集 - 试图写入文件但访问被拒绝
Assembly - trying to write to file but access denied
我有一个文件需要从数据段中的 "Buffer" 写入,但是当我尝试使用 DOS 中断 21h 40h 写入文件时,它将进位标志设置为 1,斧头到 05 - 这意味着访问被拒绝,该怎么办
代码段:
proc scanScreen
push offset Buffer
call openFile
mov [fileHandle], ax
mov dx, [BMPX]
mov di, [BMPY]
mov cx, [BMPHeight]
scanScreen_toBuffer:
push cx
mov si, offset graphicBuffer
mov cx, [BMPWidth]
scanScreen_toBuffer_line:
push cx
mov bh, 0
mov cx, dx
push dx
mov dx, di
mov ah, 0Dh
int 10h
mov [si], al
inc si
pop dx
inc dx
pop cx
loop scanScreen_toBuffer_line
mov ah, 40h -
mov cx, [BMPWidth] |
mov dx, offset graphicBuffer |> HERE IS THE PROBLEM
mov bx, [fileHandle] |
int 21h -
pop cx
mov dx, [BMPX]
inc di
loop scanScreen_toBuffer
call closeFile
ret
endp scanScreen
来电者:(我扫描屏幕并立即打印,看它是否保持不变,这意味着它有效)
mov [BMPX],66
mov [BMPY],38
mov [BMPHeight], 5
mov [BMPWidth], 12
call scanScreen
push offset Buffer
call openFile
mov [fileHandle], ax
mov bx, [fileHandle]
call showBMP
call closeFile
数据段:
BMPHeader db HEADER_SIZE dup (RESET)
BMPPalette db AMOUNT_OF_COLORS * COLOR_SIZE dup (RESET)
BMPX dw ?
BMPY dw ?
BMPWidth dw ?
BMPHeight dw ?
BMPMaxLine db MAX_WIDTH dup (RESET)
graphicBuffer db MAX_WIDTH dup (RESET)
Buffer db "buffer.buf", RESET
fileHandle dw ?
变量:
RESET equ 0
MAX_WIDTH equ 320
AMOUNT_OF_COLORS equ 256
HEADER_SIZE equ 54
COLOR_SIZE equ 4
当我打开文件时,我没有打开它进行写入
来自
xor ax, ax
mov ah, 3Dh
int 21h
至
mov al, 1
mov ah, 3Dh
int 21h
我有一个文件需要从数据段中的 "Buffer" 写入,但是当我尝试使用 DOS 中断 21h 40h 写入文件时,它将进位标志设置为 1,斧头到 05 - 这意味着访问被拒绝,该怎么办
代码段:
proc scanScreen
push offset Buffer
call openFile
mov [fileHandle], ax
mov dx, [BMPX]
mov di, [BMPY]
mov cx, [BMPHeight]
scanScreen_toBuffer:
push cx
mov si, offset graphicBuffer
mov cx, [BMPWidth]
scanScreen_toBuffer_line:
push cx
mov bh, 0
mov cx, dx
push dx
mov dx, di
mov ah, 0Dh
int 10h
mov [si], al
inc si
pop dx
inc dx
pop cx
loop scanScreen_toBuffer_line
mov ah, 40h -
mov cx, [BMPWidth] |
mov dx, offset graphicBuffer |> HERE IS THE PROBLEM
mov bx, [fileHandle] |
int 21h -
pop cx
mov dx, [BMPX]
inc di
loop scanScreen_toBuffer
call closeFile
ret
endp scanScreen
来电者:(我扫描屏幕并立即打印,看它是否保持不变,这意味着它有效)
mov [BMPX],66
mov [BMPY],38
mov [BMPHeight], 5
mov [BMPWidth], 12
call scanScreen
push offset Buffer
call openFile
mov [fileHandle], ax
mov bx, [fileHandle]
call showBMP
call closeFile
数据段:
BMPHeader db HEADER_SIZE dup (RESET)
BMPPalette db AMOUNT_OF_COLORS * COLOR_SIZE dup (RESET)
BMPX dw ?
BMPY dw ?
BMPWidth dw ?
BMPHeight dw ?
BMPMaxLine db MAX_WIDTH dup (RESET)
graphicBuffer db MAX_WIDTH dup (RESET)
Buffer db "buffer.buf", RESET
fileHandle dw ?
变量:
RESET equ 0
MAX_WIDTH equ 320
AMOUNT_OF_COLORS equ 256
HEADER_SIZE equ 54
COLOR_SIZE equ 4
当我打开文件时,我没有打开它进行写入
来自
xor ax, ax
mov ah, 3Dh
int 21h
至
mov al, 1
mov ah, 3Dh
int 21h