موضوع الملفات في الأسمبلي ؟
من عنده فكرة عن كيفية فتح ملف أوانشاء ملف جديد ،rename file, delete file .......
عندي الكود لكن هناك بعض الأخطاء المخزنرقمها قي ax ولا أستطيع فهمها
من عنده فكرة ولو قليلة عن الموضوع ؟أرجو المساعدة
: :blink:
موضوع الملفات في الأسمبلي ؟
من عنده فكرة عن كيفية فتح ملف أوانشاء ملف جديد ،rename file, delete file .......
عندي الكود لكن هناك بعض الأخطاء المخزنرقمها قي ax ولا أستطيع فهمها
من عنده فكرة ولو قليلة عن الموضوع ؟أرجو المساعدة
: :blink:
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
الامر يتم بواسطة المقاطعات وغالبا ما نستخدم المقاطعة 21h لتنفيذ هذا الامر.. خذ مثلا عى سبيل المثال:
mov dx, offset fileNM mov al, 2 ; access mode (read and write) mov ah, 3Dh ; AH:3D (open the file) int 21h ; execute
يمكنك هنا التاكد من عدم وجود مشاكل بالسطر:
jc noOpen ; goto noOpen on error ; ومن ثم حفظ مقبض الملف mov handle,ax ; save value of handle
وللقراءة:
mov dx, offset Buffer mov bx, handle mov cx, BufSze mov ah, 3Fh ; AH:3F (read file) int 21h ; execute jc noRead ; error reading file
ويمكنك مراجعة http://spike.scu.edu.au/~barry/interrupts.html للبقية
وهذا رابط جميل يقدم بعض المعلومات الموسعة: http://www.ilook.fsnet.co.uk/x86/x86file.htm
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
بالمناسبة.. هناك حزمة يوجد بها كافة المقاطعات البرمجية في ييئة 16bit تجدها في هذا الموقع: http://www.cs.cmu.edu/~ralf/files.html
وقد قمت بتعديل عنوان الموضوع لاني لم افهم ما الذي يعنيه :blink:
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا لتعاونك معي
أكيد رح أستفيد كتير من الموقعين
جزاك الله كل الخير
:rolleyes:
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
هلأ أنا كتيت كود بسيط لفتح ملف وهذا لملف موجود ،الملف من نوع نص وكتبت الأمتداد كما هو لازم لكنه وضع خطأ قيمته 3 في المسجل ax وأعطاني رسالة تقول أن الملف غير موجود
org 100h mov ah,3dh mov al,0 mov dx,offset file1 int 21h hlt file1 db 'ruba.txt'
على فكرة انا بشتغل على emu8086
تم تعديل هذه المشاركة بواسطة Xacker في 28 أكتوبر 2005 في 20:02
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
ان كنت قد حفظت البرنامج او عملت emulate له وهو في نفس المسار الذي يوجد به الملف النصي فليس من المفترض ان يحصل اي خطا.. بالتالي افحص التالي:
1- قم بحفظ ملف الاسمبلي في نفس المجلد الذي به الملف النصي.
2- قم بتجميع الملف المصدري الى تنفيذي وضعه في نفس المجلد..
3- ان قمت باستخدام jc لتحديد ان كان الملف موجودا ام لا فاذن الـ CF لن تحمل قيمة والذي يعني فتح الملف بنجاح والا سيتم تنفيذ الـ JC وتظهر رسالة الخطا..
ان استمر الخطا بالظهور زودني بصورة او بتفاصيل اكثر.. بالمناسبة، يمكنك الاستعاضة عن mov ah, 03dh / mov al, 0h بـ mov ax, 3d00h
تحياتي
تم تعديل هذه المشاركة بواسطة Xacker في 28 أكتوبر 2005 في 20:18
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
قي الحقيقة ما زال الخطأ موجود مع اني وضعت الملف المراد فتحه وملف الكود في فولدر واحد داخل بناء emulator وكانت الرسالة التي تظهر على الشكل التالي :
file does not exist:
C:\emu8086\MyBuild\ruba.txtô
interrupt error: 21h/3Dh : cannot open file.
شكرا للتعاون .
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
لحظة شوي.. انت عم تستخدمي السطر التالي؟
file1 db 'ruba.txt'
كافة السلاسل في الاسمبلي يجب ان تنتهي بمؤشر يدل على نهاية السلسلة.. في emu8086 يتم استخدام $ في نهاية السلسلة النصية.. اما في هذا المثال فاستخدمي الدليل التالي
file1 db 'ruba.txt', 0
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
اكتشفت اني نسيت اكتب الصفر :o لما أضفته تغيرت الرسالة لكن بقي في خطأ مخزن في ax
the emulator is halted. هذه الرسالة تظهر وعي تظهر عادة عند الأنتهاء من تنفيذ اي برنامج بنجاح لكن قيمة الخطأ المخزن في المسجل هي 5 ويعني access denied ويعني كما أظن ان عملية المعالجة غير مسموح بها :wacko:
على فكرة قمت بانشاء ملف create file وتمت العملية بنجاح :D لكن فتح الملف مش عارفة ليش معلق ؟
والسلام
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
org 100h; set location counter to 100h mov ah,3ch mov dx,offset file1 mov cx,00000000b; read and write file int 21h jc l3 jmp l1 l3: mov dx,offset m mov ah,9h int 21h l1:mov filehandle,ax mov ah,00 int 16h cmp al,0 je l1 cmp al,27 je l2 mov si,offset outbuffer mov [si],al mov ah,40h mov bx,filehandle mov cx,10 mov dx,offset outbuffer int 21h jmp l1 l2:mov ah,3eh;Close file int 21h hlt m db 'there is an error $' file1 db 'ruba3.txt',0 filehandle dw ? outbuffer db ? ; the program ended successfully
delta Aziz هذا هو الكود اللي عملته قمت باغلاق الملف كما أشرت أخ
كان النتيجة ان أنشأ الملف وكتبت داخله ولكن عندما فتحته من خارج البرنامج كان الكلام غير مفهوم فهل أحد يستطيع مساعدتي
أما موضوع فتح ملف فما زال معلق ؟؟؟
تم تعديل هذه المشاركة بواسطة Xacker في 31 أكتوبر 2005 في 02:30
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
انا لا اعلم لم تقومين باستخدام emu8086 لكتابة تطبيقاتك.. حتى ولو كانت بسيطة.. برايي حتى وان كانت كتابة هذه التطبيقات ببيئة 32bit وباستخدام تعليمات محصورة في العادة ببيئة 16bit كالمقاطعات وغيرها من المسجلات التي لا يمكن الزيادة في طولها حتى 32 بت.. والحجم الذي يضاف الى الحجم الاصلي للكود المكتوب (512 بايت للترويسة) فان هذا لا يمنع من ان تقومي بالانتقال فورا الى بيئة 32bit والاحتفاط بالستايل القديم لبرنامجك في التعامل مع المقاطعات مبدئيا..
او يمكنك استخدام masm16 .. لكن في حال كنت تعملين على بيئة XP.. و 2k? استخدمي emu8086 لان المقاطعة 21h ليست مدعومة بالشكل المطلوب مما يسبب الكثير من الاخطاء اثناء التنفيذ..
باي حال، في المرفقات نص الكود لانشاء ملف، الكتابة فيه، اغلاقه.. بالنسبة للحذف واعادة التسمية.. اعتقد الموضوع لن يكون صعبا..
والسلام خير الختام B)
;===================================== ; copyright 2005 (c) ArabTeam2000 ;===================================== .model small .data ; required for the stupid emu8086 ; can not include data here! o_O .code org 100h start: jmp main; jump past data *usually appears in VX pointing to the decryption routine :p* file1 db "ruba.txt", 0 m db "there is an error", 0 filehandle dw ? outbufferpar label byte ; * file record set maxlen db 27 ; * actlen db ? ; * outbuffer db 27 dup (?); * ;--------------------------------------------- main proc near ;======= ; CREATE FILE ;======= mov ah, 3Ch ; create file request mov cx, 0 ; file attributes lea dx, file1 ; file ascii name int 21h ; execute interrupt ; limited under XP for asm16bit jc error ; error creating file? mov filehandle, ax ; no, store file handle in 'filehandle' ;======= ; RECIEVE INPUTS ;======= mov ah, 0Ah ; input request lea dx, outbufferpar; load effective addr of 'outbufferpar' into dx int 21h ; execute ; now the program waits for bytes to be entered ; this input request determines the maxlen ; of the string to be entered and notifies ; the user with a beep sound when reachs the maxlen ;======= ; WRITE FILE ;======= mov ah, 40h ; write file request mov bx, filehandle ; move filehandle into bx mov cl, maxlen ; num of bytes written lea dx, outbuffer ; load addr of the buffer int 21h ; execute ;======= ; CLOSE FILE ;======= close_file: mov ah, 3Eh ; close file request mov bx, filehandle ; move file handle to bx int 21h ; execute interrupt ret ;======= ; ERROR ;======= error: mov ah, 40h ; display request mov bx, 1 ; handle mov cx, 17 ; length of message lea dx, m ; load effective addr into dx int 21h ; execute ret ; return to DOS main endp ;--------------------------------------------- end start
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا للمساعدة لقد تم انشاء الملف والكتابة فيه بنجاح لكن بقيت مشكلة فتح الملف مازال الخطأ رقم 5 المخزن في ax يظهر ؟
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
كيف تقومين باستخدام المقاطعة يعني ماذا اضفت على الكود السابق؟ للاسف حاليا لست اعمل على منصتي وبالتالي لن استطيع افادتك بمعلومات دقيقة فلست املك مجمعا ولا منقحا ولا ولا.. اريني كيف قمت باستخدام المقاطعة وسنرى ان كان هناك اي خطا..
تحياتي
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
org 100h; set location counter to 100h main proc near Mov ah,3dh Mov al,02 ; open file for reading and writing mov dx,offset File1 Int 21h Jnz L1 ; if carry flag=1 then there is an error jump to hlt(end the prigram) mov filehandle, ax ; no, store file handle in 'filehandle' ;display amessage Mov ah,9 Lea dx,m Int 21h ;======= ; RECIEVE INPUTS ;======= mov ah, 0Ah ; input request lea dx, outbufferpar; load effective addr of 'outbufferpar' into dx int 21h ; execute ; now the program waits for bytes to be entered ; this input request determines the maxlen ; of the string to be entered and notifies ; the user with a beep sound when reachs the maxlen ;======= ; WRITE FILE ;======= mov ah, 40h ; write file request mov bx, filehandle ; move filehandle into bx mov cl, maxlen ; num of bytes written lea dx, outbuffer ; load addr of the buffer int 21h ; execute ;======= ; CLOSE FILE ;======= close_file: mov ah, 3Eh ; close file request mov bx, filehandle ; move file handle to bx int 21h ; execute interrupt ret ;======= ; ERROR ;======= l1: mov ah, 40h ; display request mov bx, 1 ; handle mov cx, 17 ; length of message lea dx, m ; load effective addr into dx int 21h ; execute ret ; return to DOS main endp ;--------------------------------------------- hlt file1 db "ruba.txt", 0 m db "there is an error", 0 filehandle dw ? outbufferpar label byte ; * file record set maxlen db 27 ; * actlen db ? ; * outbuffer db 27 dup (?); *
هي كتبت الكود متل ما بدك من شان ما تتغلب
طبعا هذا الملف File1 تم انشاؤه سابقا متل مل كتبت انت الكود والذي تم تنفيذه بنجاح
طبعا هدا الكود ما عم يتنفذ عم تتطلع الرسالة الي بتقول انه في خطأ يعني يقفز الى l1 بسبب عدم النجاح في فتح الملف
عفكرة في اشي غريب لو وضعت jc المفروض يقفز لو كان هناك حمل في الflag RG وذلك يعني وجود خطأ بس عند التنفيذ ما بيقفزالا إذا وضعتjnc مع العلم بوجود حمل في Ax اللي بدل طبعا على وجود حمل في flag RG
وبالنسبة للتغيير عن emu8086 فهي بدأت أتعلم الmasm ان شاء الله يجيب نتيجة.
Computer Engineer
2007
"اللهم يا مثبت القلوب ثبت قلبي على دينك "
ولدتك امك باكيا والناس حولك يضحكون سرورا
فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا
حسنا ساعود بالرد بعد قليل او بكرة بالكتير.. مستعجل هلأ لازم روح اقرا شوية من محاضراتي.. حرام الكلية الها علي حق :P
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
السلام عليكم ورحمة الله وبراكاتة
أخى الفاضل Xacker
البرنامج الموجود فى المشاركة 12 لايشتغل مع الكمبايلر Tasm فما السبب ؟؟
ولك منى جزيل الشكر
لاني اعمل على masm, للاسف لا اعمل على tasm, هناك حاجة لبعض التعديلات ليعمل.. فقط في بعض التوجيهات وما شابه
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
هذا الموضوع مغلق.