PDA

View Full Version : نوشتن برنامه باemu8086که نام یه درایو رو بگیره



mehdi74
سه شنبه 19 اردیبهشت 1391, 00:01 صبح
سلام کسی نمی تونه با برنامه emu8086 یک برنامه بنویسه که نام یک درایو رو بگیره حجمش و تعداد سکتور ها وشیارشو نشون بده ممنون میشم اگه کسی جواب بده عجله دارم بی جواب نمونه خواهشا .:گریه:

xman_1365_x
سه شنبه 19 اردیبهشت 1391, 15:57 عصر
نگاهی به وقفه 13 بندازین همینطور help امولاتور
http://en.wikipedia.org/wiki/INT_13H
http://www.oldlinux.org/Linux.old/docs/interrupts/int-html/int-13.htm
بعد از گرفتن تعداد سکتور با فرمول زیر سایز رو بر اساس بایت محاسبه کنید
Disk storage-capacity (in bytes) = (total number of sectors) x (512 bytes/sector)

موفق باشید

mehdi74
جمعه 22 اردیبهشت 1391, 13:34 عصر
باتسکر فراوان از شما ولی من خیلی برنامه نویسیم ضعیفه نمی تونید برنامه شو برام بنویسید

xman_1365_x
شنبه 23 اردیبهشت 1391, 13:43 عصر
من خیلی برنامه نویسیم ضعیفه نمی تونید برنامه شو برام بنویسید
نه دوست عزیز این تمرین شما هست سعی کنید منم بتونم راهنمایی میکنم
موفق باشی

mehdi74
چهارشنبه 27 اردیبهشت 1391, 18:23 عصر
نه دوست عزیز این تمرین شما هست سعی کنید منم بتونم راهنمایی میکنم
موفق باشی
این برنامه هستش که روی یک کتاب نوشتم اما با برنامهmasm611باید اجرا بشه که اجرا نمیشه نمی دونم مشکلش چیه و اگر شما تونستید مشکلشو بفهمید بعدش اگه می تونید خط به خط برام بنویسد که هر خط چکار می کنه با تشکر فقط چون اینجا بد نوشته شده فایلو ضمیممه کردم87129

title free and total disk space
extrn cls:far,disp_message:far,mov_cursor:far
.model small
.stack
.data
msg db "total disk spaceing is:$"
msg1 db "free disk spaceing is:$"
string db 10 dup(''),"$"
string1 db 10 dup(''),"$"
cluster_p_d dw ?
sign db ?
counter db 0
dddx dw 0
rowcol dw ?
.code
.386
main proc far
mov ax,@data
mov ds,ax
mov dl,1
mov dh,36h
int 21h
;*******************************
mov cluster_p_d,dx
mul cx
push ax
mul bx
push ax
movzx eax,dx
shl eax,16
mov ebx,0
pop ax
movzx ebx,ax
or eax,ebx
lea bx,string
call writelong
call cls
mov byte ptr rowcol+1,10
mov byte ptr rowcol,10
push rowcol
call move_cursor
push offset msg1
call disp_message
push offset string
call disp_message
pop ax
mul cluster_p_d
push ax
mov eax,0
movzx eax,dx
shl eax,16
pop ax
movzx ebx ,ax
mov ebx,0
or eax,ebx
lea bx,string1
call writelong
call cls
mov byte ptr rowcol+1,11
mov byte ptr rowcol,10
push rowcol
call move_cursor
push offset msg
call disp_message
call disp_message
mov ax,4c00h
int 21h
main endp
;********************************
writelong proc
add bx,9
mov sign,''
cmp eax,0
jge setup
mov sign,'-'
neg eax
steup: mov ecx,10
divloop: mov edx,0
div ecx
add dl,30h
mov [bx],dl
dec bx
cmp eax,0
jne divloop
mov cl,sign
mov [bx],cl
ret
writelong endp
end main

xman_1365_x
چهارشنبه 27 اردیبهشت 1391, 22:12 عصر
این برنامه هستش که روی یک کتاب نوشتم اما با برنامهmasm611باید اجرا بشه که اجرا نمیشه نمی دونم مشکلش چیه
اول برنامه extrn کرده که این توابع در فایل دیگه هست باید همه رو بعد از ساخت آبجکت بهم لینک کنید

دوم خطا هاشو گرفتم



title free and total disk space

.386

extrn cls:far
extrn disp_message:far
extrn move_cursor:far

.model small

.stack 128

.data
msg db "total disk spaceing is:$"
msg1 db "free disk spaceing is:$"
string db 10 dup(' '),"$"
string1 db 10 dup(' '),"$"
cluster_p_d dw ?
sign db ?
counter db 0
dddx dw 0
rowcol dw ?

.code

main proc far
mov ax,@data
mov ds,ax

mov dl,1
mov dh,36h
int 21h
;*******************************
mov cluster_p_d,dx
mul cx
push ax
mul bx
push ax
movzx eax,dx
shl eax,16
mov ebx,0
pop ax
movzx ebx,ax
or eax,ebx
lea bx,string
call writelong
call cls
mov byte ptr rowcol+1,10
mov byte ptr rowcol,10
push rowcol
call move_cursor
push offset msg1
call disp_message
push offset string
call disp_message
pop ax
mul cluster_p_d
push ax
mov eax,0
movzx eax,dx
shl eax,16
pop ax
movzx ebx ,ax
mov ebx,0
or eax,ebx
lea bx,string1
call writelong
call cls
mov byte ptr rowcol+1,11
mov byte ptr rowcol,10
push rowcol
call move_cursor
push offset msg
call disp_message
call disp_message

mov ax,4c00h
int 21h
main endp

;********************************

writelong proc
add bx,9
mov sign,' '
cmp eax,0
jge setup
mov sign,'-'
neg eax
setup: mov ecx,10
divloop: mov edx,0
div ecx
add dl,30h
mov [bx],dl
dec bx
cmp eax,0
jne divloop
mov cl,sign
mov [bx],cl

ret
writelong endp

end main

mehdi74
چهارشنبه 27 اردیبهشت 1391, 23:57 عصر
اول برنامه extrn کرده که این توابع در فایل دیگه هست باید همه رو بعد از ساخت آبجکت بهم لینک کنید

دوم خطا هاشو گرفتم

خیلی ممنون از زحماتتون ولی اگه میشه یکم واضحتر توضیح بدید مثلا منظورازextrnکردن نمی دونم چیه چون من با برنامهmasm611هیچ وقت کار نکرده بودم والان تازه یه چیزای دارم می فهمم اگه میشه یک توضیح واضح بدید مرحله به مرحله و اگه خط به خط کدهارو کارشونو به فارسی برام بنویسید که خیلی عالی میشه چون اکثر کدهاش ناآشناست مثلeax,movzxو... و یه سوال هم داشتم که خودتون همین کد را اجرا کردید که ببینید جواب میده یا نه؟

xman_1365_x
یک شنبه 31 اردیبهشت 1391, 18:04 عصر
خیلی ممنون از زحماتتون ولی اگه میشه یکم واضحتر توضیح بدید مثلا منظورازextrnکردن نمی دونم چیه چون من با برنامهmasm611هیچ وقت کار نکرده بودم والان تازه یه چیزای دارم می فهمم اگه میشه یک توضیح واضح بدید مرحله به مرحله و اگه خط به خط کدهارو کارشونو به فارسی برام بنویسید که خیلی عالی میشه چون اکثر کدهاش ناآشناست مثلeax,movzxو...
ببین دوست عزیز وقتی برنامه ها بزرگ میشه برای ساده سازی و کوتاه کردن فایل و یا استفاده از توابع اشتراکی (public) فایلی که میخوای برنامه های دیگه بتونند از توابعش استفاده کنند از نوع public تعریف میکنی و بعد در فایلی که میخوای استفاده کنی ازشبه دستور EXTRN استفاده میکنی
این شبه دستورات به اسمبلر میگه که توابعی عمومی هستن و یا در فایل دیگه ای تعریف شده!

اگر هدف شما در حد پروژه دانشگاهتون هست نیازی به این دستورات(movzx,eax,...) ندارید چرا که اینها دستورات و ثبات های پردازنده 80386 به بعد هست،با این حال کار این دو دستور:
دستورات انتقال (http://en.wikipedia.org/wiki/MOV_(x86_instruction))
eax,ebx,ecx,edx و ... هم ثبات های همه منظوره 32 بیتی میباشد

یه سوال هم داشتم که خودتون همین کد را اجرا کردید که ببینید جواب میده یا نه؟
خیر بنده فقط اسمبلش کردم و توابعی که extrn شده شبیه سازی نکردم

موفق باشید

mehdi74
سه شنبه 02 خرداد 1391, 08:22 صبح
ببين دوست عزيز وقتي برنامه ها بزرگ ميشه براي ساده سازي و کوتاه کردن فايل و يا استفاده از توابع اشتراکي (public) فايلي که ميخواي برنامه هاي ديگه بتونند از توابعش استفاده کنند از نوع public تعريف ميکني و بعد در فايلي که ميخواي استفاده کني ازشبه دستور EXTRN استفاده ميکني
اين شبه دستورات به اسمبلر ميگه که توابعي عمومي هستن و يا در فايل ديگه اي تعريف شده!

اگر هدف شما در حد پروژه دانشگاهتون هست نيازي به اين دستورات(movzx,eax,...) نداريد چرا که اينها دستورات و ثبات هاي پردازنده 80386 به بعد هست،با اين حال کار اين دو دستور:
دستورات انتقال (http://en.wikipedia.org/wiki/MOV_(x86_instruction))
eax,ebx,ecx,edx و ... هم ثبات هاي همه منظوره 32 بيتي ميباشد

خير بنده فقط اسمبلش کردم و توابعي که extrn شده شبيه سازي نکردم

موفق باشيد
واقعا نمی دونم چطور تشکر کنم اولین انجمنی هست که به این سرعت جواب می دهند اما خواهش مي کنم برنامه شو برام بنويسيد که قابل اجرا باشه و جمع و جور باشه با برنامه masm یا امولاتور چون پروژه م هستش و وقت هم ندارم و تا پنجم بيشتر وقت ندارم کمکم کنيد:ناراحت::افسرده::گريه: