【问题标题】:Assembly - trying to write to file but access denied [duplicate]程序集 - 尝试写入文件但访问被拒绝 [重复]
【发布时间】:2019-08-17 14:07:55
【问题描述】:

我有一个需要从数据段中的“缓冲区”写入的文件,但是当我尝试使用 DOS 中断 21h 40h 写入文件时,它会将进位标志设置为 1,并将 ax 设置为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

【问题讨论】:

  • openFile 的代码在哪里?你是用写权限打开文件,还是只读的?
  • @1201ProgramAlarm 哇,我太笨了,我觉得它是什么,我被毁了):

标签: assembly x86 dos tasm dosbox


【解决方案1】:

当我打开文件时,我没有打开它来写

来自

        xor ax, ax
        mov ah, 3Dh
        int 21h

        mov al, 1
        mov ah, 3Dh
        int 21h

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 2015-03-06
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多