PDA

View Full Version : سوال: خواندن از ديسك



MJVMJV
چهارشنبه 10 آذر 1389, 22:51 عصر
برنامه زير روي يه USB ديسك قرار داده شده براي خواندن هرسكتوري در يسك
اين برنامه بعد از اجرا اعداد را كه وارد مي كنيم آن سكتور را كامل نشون مي ده
مشكل اينجاست كه تو خط آخر كه JMP MAIN سري دوم كه مي خواد اجرا بشه اجرا نمي شه
و فقط به وقفه 13 گير مي ده
اين برنامه روي BIOS اجرا مي شود
مي خواستم بدونم مشكل از كجاست
با تشكر

call c1
c1:JMP m1
BUF DB 512 DUP(0)
m1:
pop bx
add bx,3
MAIN:
mov al,30h
mov ah,0EH ;write key
int 10h
reset:
mov ax, 0 ;
mov dl, 0 ; Drive=0 (=A)
int 13h ;
jc reset
mov si,0

mov ah,0 ;read key
int 16h
mov ah,0EH ;write key
int 10h
sub al,0x30h
mov cl,al

mov ah,0 ;read key
int 16h
mov ah,0EH ;write key
int 10h
sub al,0x30h
mov ch,al

mov ah,0 ;read key
int 16h
mov ah,0EH ;write key
int 10h
sub al,0x30h
mov dh,al

mov ah,0 ;read key
int 16h
mov ah,0EH ;write key
int 10h
sub al,0x30h
mov dl,al

MOV AX,DS
MOV ES,AX
MOV AX,0201H
INT 13H
mov si,bx
mov cx,0
MOV AH,0EH ; WRITE CHAR.
PRINT:
INT 10H
lodsb
inc cx
CMP cX,513
JNZ PRINT
jmp MAIN

xman_1365_x
پنج شنبه 11 آذر 1389, 13:29 عصر
این لینک رو مطالعه کنید
http://en.wikipedia.org/wiki/INT_13

MJVMJV
جمعه 12 آذر 1389, 11:06 صبح
دوست عزيز من اين مطالب را مطالعه كردم
حتي خودم System Programming Basics را دارم
اما نمي دونم چرا هنگام اجراي وقفه 13 بر هر تابعي در همان برنامه روي بايوس سيستم هنگ مي كند
اگه كسي تجربه اي دارد يا نمونه برنامه اي كمكم كنه ممنون مي شم
با تشكر

xman_1365_x
شنبه 13 آذر 1389, 01:46 صبح
من فعلا وقت ندارم تجزييه كنم چي نوشتي
اما شما روي چي اجراش كردي كه اون وقفه به مشكل خورد؟
اين قسمت بايد به همين تعداد بالا گردش كنه؟ من با 13 بار گردش تست كردم مشكلي نداشت! 4 بار برگشت از اول اجرا شد
PRINT:
INT 10H
lodsb
inc cx
CMP cX,513
JNZ PRINT

MJVMJV
یک شنبه 14 آذر 1389, 16:27 عصر
دوست عزيز ممنون و متشكر
اين كد روي BIOS سيستم من اجرا مي شد
و در پرش آخر (پرش به اول برنامه)در emu8086 هيچ مشكلي نداشت اما هنگامي كه رو Boot Sector فراخواني مي كرد در int13 هنگ مي كرد
من تونستم حل كنم اما نمي دونم روش توضيح ام درسته يا نه
تو يه سايتي در باره توضيحات boot loader ,kernel يه توضيحاتي خواندم
فهم من از آن اين بود كه قبل از اين برنامه بايد يه برنامه boot loaderاجرا بشه و برنامه من به عنوان kernel كار كنه
يه كارايي دست و پا شكسته انجام دادم و ديگه مشكلي نداشت
اما اين برنامه فقط براي تست خواندن سكتور از ديسك بود همين
با تشكر از شما دوست عزيز

xman_1365_x
یک شنبه 14 آذر 1389, 21:31 عصر
دوست عزيز ممنون و متشكر
اين كد روي BIOS سيستم من اجرا مي شد
و در پرش آخر (پرش به اول برنامه)در emu8086 هيچ مشكلي نداشت اما هنگامي كه رو Boot Sector فراخواني مي كرد در int13 هنگ مي كرد

در توضیح بالا که گفتم منم روی emu8086 اجراش کردم مشکلی نداشت جز همون چرخش زیاد که کم کردم متاسفانه هنوزم وقت ندارم خط بخط بخونم
اما اینو بگم اگر شما روی داس و ویندوز بخوای اجرا کنی مشکلی نداری مشکل وقتی هست که بخوای خودت بدون بوت اجراش کنی
پس اول باید بوت لودر بسازی و بعد بیای فقط با استفاده از وقفه های بایوس انجامش بدی!!! بوت لودر هم جریانش فرق داره چون خیلی محدود هست بعد باید ‍رش بدی تا از محدودیت خارج شی بعد این برنامت و ادامشو اجرا کنی
توی فروم در مورد بوت لودر یک چیزایی هست ببین

MJVMJV
سه شنبه 23 آذر 1389, 22:16 عصر
دوست عزيز ممنون كه جوابم را داديد
:تشویق:
من يه لودر ساده نوشتم مشكلم حل شد
يه سوال ديگه دارم
repe cmpsb
اين كد آيا اجراي آن در ويندوز و بايوس تفاوت دارد؟
چون من در ويندوز و داس جواب مي گيرم اما تو بايوس خير
:متفکر:
من در ويندوز مقايسه را انجام ميده هيچ مشكلي هم نداره
اما در بايوس اجرا مي شه اما مقايسه اشتباه در مياد

xman_1365_x
چهارشنبه 24 آذر 1389, 00:35 صبح
اين مطلب متفاوت iست بايد تاپيك ديگه ميزدين!

من يه لودر ساده نوشتم مشكلم حل شدخوشحالم سورسشو بزارين ديگران هم استفاده كنند.:لبخندساده:

اين كد آيا اجراي آن در ويندوز و بايوس تفاوت دارد؟نخير تفاوتي ندارد تاپيك مجزا باز كنيد و سورسشو بزارين اين ايستراكشن پردازنده هست مشكلي نيست.
http://home.comcast.net/~fbui/intel_r.html#rep (http://home.comcast.net/%7Efbui/intel_r.html#rep)

MJVMJV
چهارشنبه 24 آذر 1389, 00:57 صبح
چشم كامل تر شد حتما ميزارم