2017-01-07 9 views
5

विन्यास:3Dh कारणों का प्रयोग केवल वापसी के लिए बीच में "अस्वीकृत acces"

MS-DOS 16 बिट (एक .asm फ़ाइल लेखन में, फिर उन्हें TASM और TLINK साथ संकलन)

विंडोज 7 x64

मैंने असेंबली में एक साधारण कार्यक्रम बनाया है जिसे केवल एक फ़ाइल खोलनी चाहिए और उसे एक टेक्स्ट लिखना चाहिए।

assume cs:code, ds:data 
data segment 
    fileName db "input.txt", 0 ; We assure it is an ASCIIZ(ero) file. 
    toWrite db "Hello World!", "$" 
data ends 

code segment 
    writeToFile: 
    ; pentru functia 3Dh 
    mov AH, 3Dh 
    mov AL, 0h 
    mov dx, offset fileName 
    int 21h 
    ret 


    start_program: 
    mov ax, data 
    mov ds, ax 
    CALL writeToFile 
    mov ax, 4c00h 
    int 21h 
code ends 

end start_program 

मैं TurboDebugger इस्तेमाल किया देखने के लिए कि क्या होता है:
यहाँ यह करने के लिए कोड है। अजीब है, यह हमेशा AX मूल्य 0005 अर्थ Access Denied

सब कुछ मैं ASSEMBLY access denied open file खोज के लिए इंटरनेट पर मिल सकता है DLL के बारे में की थी और उस मदद नहीं की में डालता है।

मैंने कुछ भी करने की कोशिश की है, मेरे प्रोग्राम को "व्यवस्थापक के रूप में" डॉसबॉक्स खोलने के लिए पुनरारंभ करने से। अफसोस की बात है, कुछ भी काम नहीं किया और मैं विचारों से बाहर हूं।
यह भी अजीब बात यह है कि मेरे एक दोस्त ने कहा कि अपनी खिड़कियां 10 सक्रिय करने के बाद, सबकुछ ठीक काम करता है।

केवल "पहुंच से वंचित" होने का कारण क्या है? मैं उल्लेख करता हूं कि मैं फ़ाइलों को बनाने, हटाने और बंद करने में सक्षम था, लेकिन मैं उन्हें नहीं खोल सकता।

+3

'एएक्स'' 5' होने का मतलब यह नहीं है कि पहुंच स्वयं ही अस्वीकार कर दी गई है, केवल तभी जब 'सीएफ' त्रुटि को इंगित करने के लिए सेट किया गया हो। अन्यथा यह सिर्फ आपकी फाइल हैंडल है। तो, क्या आपने 'सीएफ' के मूल्य की जांच की है? – Jester

+0

नहीं, क्योंकि अब तक मैंने उन कार्यों के साथ काम किया जिनके लिए 'सीएफ' की आवश्यकता नहीं थी और इसके बारे में भूल गए। हां आप सही हैं! 'सीएफ' 0 है। धन्यवाद। मैं इस पोस्ट को हटा दूंगा। – SnuKies

+0

हालांकि यह एक अच्छी तरह से पूछा गया प्रश्न था (हम बहुत से नहीं देखते हैं), बहुत बुरा यह एक छोटा जवाब है :) – Jester

उत्तर

2

समुचित संचालन के अपने writeToFile प्रक्रिया

  • करने की जरूरत है कि बाद के लेखन
  • जांच सीएफ डॉस द्वारा दिया देखने के लिए अगर सब कुछ ठीक चला गया की अनुमति देता है एक पहुँच मोड के साथ फ़ाइल को खोलने के लिए

मैंने जो देखा वह यह है कि आप इस फ़ाइल में "$" के साथ लिखने वाले पाठ को समाप्त कर देंगे। मुझे आश्चर्य है कि क्या आप जानते हैं कि वास्तव में फ़ाइल लिखने के लिए डॉस फ़ंक्शन केवल CX में निर्दिष्ट लंबाई के साथ काम करता है और किसी भी प्रकार के डिलीमीटर के साथ नहीं। आपके पास इस "$" चरित्र के लिए अन्य वैध कारण हो सकते हैं -;

writeToFile: 
    mov ax, 3D01h ; 01h=WriteAccess 
    mov dx, offset fileName 
    int 21h 
    jc NOK 
    mov bx, ax  ; Handle 
    mov dx, offset toWrite 
    mov cx, 12  ; Length of "Hello World!" 
    mov ah, 40h 
    int 21h 
    jc NOK 
    cmp ax, cx 
    jne NOK 
NOK: 
    ret 

आप कहाँ NOK लेबल और क्या तुम वहाँ क्या पूरी तरह से कितना प्रयास आप डॉस द्वारा दिया त्रुटियों से निपटने में खर्च करना चाहते हैं पर निर्भर करता है जगह। यहां इस बहुत ही सरल कार्यक्रम में, आप बस call से वापस आ सकते हैं और प्रोग्राम समाप्त कर सकते हैं।

संबंधित मुद्दे