PDA

View Full Version : مشکل در ایجاد فایل با وقفه ها



baranbahari1320
پنج شنبه 22 تیر 1391, 23:17 عصر
سلام و وقت بخیر من میخوام با Emulator یه فایل ایجاد کنم و توش بنویسم با استفاده از وقفه ها.وقتی که تعریف میکنم و بهش مسیر میدم اجراش میکنم و به مسیر مورد نظر میرم هیچ فایلی رو مشاهده نمیکنم مثلا تو درایوی مثل e لطفا منو راهنمایی کنید.



یه سوال دیگه من میخوام جمع و تفریق و ضرب اعداد بزرگ حداکثر 100 رقم رو بنویسم به نظرتون از آرایه باید استفاده کرد یا یه ورش دیگه؟

با تشکر

xman_1365_x
جمعه 23 تیر 1391, 02:28 صبح
سلام و وقت بخیر من میخوام با Emulator یه فایل ایجاد کنم و توش بنویسم با استفاده از وقفه ها.وقتی که تعریف میکنم و بهش مسیر میدم اجراش میکنم و به مسیر مورد نظر میرم هیچ فایلی رو مشاهده نمیکنم مثلا تو درایوی مثل e لطفا منو راهنمایی کنید.
این شبیه ساز در مسیر زیر فایل رو ایجاد میکنه،بعد از اسمبل کردن در درایور مورد نظرتون ساخته میشه
C:\emu8086\vdrive

یه سوال دیگه من میخوام جمع و تفریق و ضرب اعداد بزرگ حداکثر 100 رقم رو بنویسم به نظرتون از آرایه باید استفاده کرد یا یه ورش دیگه؟
قبلا در این باره تاپیک ایجاد شده ، در تالار جستجو کنید پیدا میکنید.

موفق باشی

baranbahari1320
شنبه 24 تیر 1391, 17:45 عصر
ممنون از پاسختون یعنی من وقتی میخوام فایل ایجاد کنم بنویسم c:\emu8086\vdrive\filename؟

xman_1365_x
شنبه 24 تیر 1391, 21:42 عصر
ممنون از پاسختون یعنی من وقتی میخوام فایل ایجاد کنم بنویسم c:\emu8086\vdrive\filename؟

خیر،وقتی شما با امولاتور برنامه رو اجرا کنید مسیر ذخیره سازی فایل در مسیر مذکور میباشد(شبیه سازی درایو) اما هنگامی که با شبیه ساز ویندوز ntvdm اجرا میشه در مسیری که حقیقی(فیزیکی)ساخته میشه.
موفق باشی

baranbahari1320
یک شنبه 25 تیر 1391, 10:50 صبح
خوب من این کار رو کردم اما هیچ فایلی که ایجاد بشه تو اون مسیر مشاهده نمی کنم حتی برای امتحان مثال خود emu رو هم تست کردم اما وقتی به مسیری که فرمودین میرم هیچ فایل جدید یا حتی پوشه جدید نمی بینم.
کد مثالم براتون میذارم.
jmp start

dir1 db "c:\test1", 0
dir2 db "test2", 0
dir3 db "newname", 0
file1 db "c:\test1\file1.txt", 0
file2 db "c:\test1\newfile.txt", 0
file3 db "t1.txt", 0
handle dw ?

text db "lazy dog jumps over red fox."
text_size = $ - offset text
text2 db "hi!"
text2_size = $ - offset text2

start:
mov ax, cs
mov dx, ax
mov es, ax


; create c:\emu8086\vdrive\C\test1
mov dx, offset dir1
mov ah, 39h
int 21h

; create c:\emu8086\MyBuild\test2
mov dx, offset dir2
mov ah, 39h
int 21h

; rename directory: c:\emu8086\MyBuild\test2 to c:\emu8086\MyBuild\newname
mov ah, 56h
mov dx, offset dir2 ; existing.
mov di, offset dir3 ; new.
int 21h



; create and open file: c:\emu8086\vdrive\C\test1\file1.txt
mov ah, 3ch
mov cx, 0
mov dx, offset file1
int 21h
jc err
mov handle, ax
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text
mov cx, text_size
int 21h
; close c:\emu8086\vdrive\C\test1\file1.txt
mov ah, 3eh
mov bx, handle
int 21h
err:
nop


; rename fileL c:\emu8086\vdrive\C\test1\file1.txt to c:\test1\newfile.txt
mov ah, 56h
mov dx, offset file1 ; existing.
mov di, offset file2 ; new.
int 21h


; delete file c:\emu8086\vdrive\C\test1\newfile.txt
mov ah, 41h
mov dx, offset file2
int 21h


; delete directory: c:\emu8086\vdrive\C\test1
mov ah, 3ah
mov dx, offset dir1
int 21h






; create and open file: c:\emu8086\MyBuild\t1.txt
mov ah, 3ch
mov cx, 0
mov dx, offset file3
int 21h
jc err2
mov handle, ax
; seek:
mov ah, 42h
mov bx, handle
mov al, 0
mov cx, 0
mov dx, 10
int 21h
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text
mov cx, text_size
int 21h
; seek:
mov ah, 42h
mov bx, handle
mov al, 0
mov cx, 0
mov dx, 2
int 21h
; write to file:
mov ah, 40h
mov bx, handle
mov dx, offset text2
mov cx, text2_size
int 21h
; close c:\emu8086\MyBuild\t1.txt
mov ah, 3eh
mov bx, handle
int 21h
err2:
nop



; delete file c:\emu8086\MyBuild\t1.txt
mov ah, 41h
mov dx, offset file3
int 21h




; delete directory: c:\emu8086\MyBuild\newname
mov ah, 3ah
mov dx, offset dir3
int 21h


ret

باید خود فایل وقتی ایجاد میشه قابل رویت باشه مثل vb و دیگر زبانهای برنامه نویسی؟

ssbostan
یک شنبه 25 تیر 1391, 11:52 صبح
با سلام؛
به مثال های زیر توجه کنید:


file1 db "c:\test.txt", 00h
file2 db "test.txt", 00h


نوع اول تعریف باعث میشه که فایل test.txt در درایو مجازی emu8086 ایجاد بشه اما تعریف دوم باعث میشه فایل test.txt در کنار برنامه یعنی پوشه mybuild ایجاد بشه.

موفق باشید.

xman_1365_x
یک شنبه 25 تیر 1391, 12:00 عصر
خوب من این کار رو کردم اما هیچ فایلی که ایجاد بشه تو اون مسیر مشاهده نمی کنم حتی برای امتحان مثال خود emu رو هم تست کردم اما وقتی به مسیری که فرمودین میرم هیچ فایل جدید یا حتی پوشه جدید نمی بینم.
فایل شما در مسیر "C:\emu8086\vdrive\C\test1" ایجاد میشه بعد توی کدتون پاکش میکنید!
*نام درایو رو با حروف درشت بنویسید
*اول برنامه dx رو مقدار دهی کردین بجای ds
*وقتی فولدر رو ایجاد میکنید دفعه بعد نباید ایجاد کرد!
*اگر نام درایو رو ذکر نکنید در مسیری که فایل اجرایی هست فایل ایجاد میشه!

باید خود فایل وقتی ایجاد میشه قابل رویت باشه مثل vb و دیگر زبانهای برنامه نویسی؟
بله قابل مشاهده هست.

در ارتباط با فایل ها قبلا بارها سوال شده میتونید در تالار جستجو کنید.
موفق باشی

baranbahari1320
یک شنبه 25 تیر 1391, 16:08 عصر
ممنون از راهنمایی های خوبتون.من فکر میکردم که وقتی مینویسیم c:\ یا d:\ منظور درایو c یا d هستش بنابراین اونجا دنبالش میگشتم ولی فهمیدم که این ها فولدرهایی است که تو مسیر vdrive قرار دارند.


ببخشید از word ptr یا byte ptr برای چی استفاده میکنیم چرا مستقیما نمینویسیم array[bp] و از byte ptr array[bp]استفاده می کنیم؟

xman_1365_x
دوشنبه 26 تیر 1391, 02:41 صبح
ببخشید از word ptr یا byte ptr برای چی استفاده میکنیم چرا مستقیما نمینویسیم array[bp] و از byte ptr array[bp]استفاده می کنیم؟
کاربرد این شبه دستورات برای اسمبلر هست که هنگامی که میخواد اسمبل کنه بدونه چند بایت از حافظه باید بخونه یا تغییر بده
قبل از پرسیدن سوال در تالار جستجو کنید.

موفق باشی

xman_1365_x
دوشنبه 26 تیر 1391, 02:42 صبح
ببخشید از word ptr یا byte ptr برای چی استفاده میکنیم چرا مستقیما نمینویسیم array[bp] و از byte ptr array[bp]استفاده می کنیم؟
کاربرد این شبه دستورات برای اسمبلر هست که هنگامی که میخواد اسمبل کنه بدونه چند بایت از حافظه باید بخونه یا تغییر بده
قبل از پرسیدن سوال در تالار جستجو کنید.

موفق باشی

baranbahari1320
دوشنبه 26 تیر 1391, 16:23 عصر
ببخشید من میخوام اعداد بزرگ رو بعد از گرفتنشون تو فایل ذخیره کنم بعد روشون عمل جمع،ضرب،تفریق انجام بدم.اعداد رو کاراکتر کاراکتر میگیرم حالا میخوام وقتی اولین عدد یا اعداد رو وارد کردم نتیجه یا عدد بعدی خط بعد تو فایل چاپ شه باید چه جوری این کار رو بکنم؟

ssbostan
دوشنبه 26 تیر 1391, 21:27 عصر
با سلام؛
برای اینکه اشاره گر فایلتون به خط بعد انتقال پیدا کنه باید این دو بایت رو هم در فایل در محل مورد نظرتون بنویسید.



newline db 0dh, 0ah


موفق باشید.