PDA

View Full Version : رانمايي براي تصحيح كد زير



soonami
جمعه 01 دی 1391, 14:36 عصر
دوستان مي خواهم كدي بنويسم كه اعداد 20 21 50 10 با هم جمع كنه و ميانگينش بدست بياره

اگر مقدوره نگاه كنيد و بگيد كجاش مشكل داره



result dw ?
result 2 dw ?
data db 5,20,21,10
mov bx,offset data
mov cx ,04
mov ax,00
l1 : add ax,[bx]
inc bx
dec cx
jnz l
mov result,ax
mov bx , 4
cwp
div bx
mov result2,ax



يه سوال ديگه ميشود يه نمونه هم مثال بزنيد كي و كجا بايد از دستور Adc و idiv ‌استفاده كنم اطفا با مثال

soonami
یک شنبه 03 دی 1391, 17:57 عصر
كسي نيست كمك كنه

rayarasool
یک شنبه 03 دی 1391, 19:14 عصر
دقیقا بگید تو کجاش مشکل داره ؟؟

یعنی چی رو حساب نمیکنه؟؟

دقیقا همین کد رو نوشتید؟؟

soonami
دوشنبه 04 دی 1391, 05:31 صبح
سلام گفتم كه چي ميخوام ميخوا اين اعداد جمع كنه و ميانگينش بدست بياره اينم كدي كه گذاشتم مي خواستم ببينم جاييش مشكل داره يا نه

xman_1365_x
دوشنبه 04 دی 1391, 12:47 عصر
مشکل در تعریف حافظه به صورت بایت و استفاده به صورت جمع کلمه بود ،همینطور نوشتن دستورالعمل ها به صورت اشتباه


jmp l1
result dw ?
result2 dw ?
data dw 5,20,21,10
l1:


mov bx,offset data
mov cx ,04
mov ax,00
l2:
add ax,[bx]
add bx,2
dec cx
jnz l2
mov result,ax
mov bx , 4
cwd
div bx
mov result2,ax



یا


jmp l1
result dw ?
result2 dw ?
data db 5,20,21,10
l1:


mov bx,offset data
mov cx ,04
mov ax,00
l2:
add al,byte ptr[bx]
inc bx
dec cx
jnz l2
mov result,ax
mov bx , 4
cwd
div bx
mov result2,ax



موفق باشید

soonami
دوشنبه 04 دی 1391, 14:23 عصر
پس يعني كلا استباه بود :دي

يه سوال توي تيكه كد بالاتون چرا به bx اضافه كرديد 2 ؟؟؟؟؟؟؟؟

و اين كار دفعه اولمه ميبينم ميشه يكم توضيح بديد



jmp l1result dw ?result2 dw ?data dw 5,20,21,10l1:



بالا باشه براي چي هست ؟

و نبايد براي جمع از adc استفاده كنم ؟؟؟؟؟؟

soonami
دوشنبه 04 دی 1391, 14:38 عصر
بي زحمت اگر مقدور هست بعد از اينكه سوالات بالامو جواب داديد اين تيكه كدم برسي كنيد ميخوام بدونم از اعداد وارد شده چند تا ز چند تا ف هستند



jmp l1
result dw ?
result2 dw ?
data dw 5,20,21,10
l1:

mov ax,offset data
mov cx ,04
mov bx,2
l2:
div bx
cmp ah,0
je l22
jpm l3
l22:
inc dl
loop l2
l3:
inc bl
loop l2

xman_1365_x
سه شنبه 05 دی 1391, 19:24 عصر
يه سوال توي تيكه كد بالاتون چرا به bx اضافه كرديد 2 ؟؟؟؟؟؟؟؟
برای اینکه نوع حافظه ای که در نظر گرفتم کلمه بود باید 2 بایت 2بایت پویش کنیم حافظه رو

jmp l1result dw ?result2 dw ?data dw 5,20,21,10l1:
چون من برنامه رو به صورت COM نوشتم و سگمنت داده تعریف نکردم باید از روی این دستورات پرش میکردم تا برنامه کرش نکنه ،چون تبدیل به دستوارتی میشه که دستورالعمل های اشتباه هست یا ناشناخته برای پردازنده

بالا باشه براي چي هست ؟
منظورتون رو متوجه نشدم چی بالا باشه ؟

و نبايد براي جمع از adc استفاده كنم ؟؟؟؟؟؟
مجموع اعداد شما از بازه خارج نمیشه اما اگر بخواین بدترین حالتو در نظر بگیرید بله باید کری هم در نظر بگیرید

بي زحمت اگر مقدور هست بعد از اينكه سوالات بالامو جواب داديد اين تيكه كدم برسي كنيد ميخوام بدونم از اعداد وارد شده چند تا ز چند تا ف هستند
اگر منظورتون حروف ز و ف هست به این سادگی نیست و کدتونم اشتباه است و برای سوالات جدید باید تاپیک جدید ایجاد کنید
موفق باشید

soonami
جمعه 08 دی 1391, 12:14 عصر
نه منظورم تعداد اعداد زوج و فرد در برنامه هست :دي

بعد نوشتم با همين اعداد حالا چي درسته ؟؟؟؟؟؟؟؟

مجدد تاپيك براي همين سوالم مطرح كنم ؟؟

xman_1365_x
شنبه 09 دی 1391, 09:15 صبح
نه منظورم تعداد اعداد زوج و فرد در برنامه هست :دي

بعد نوشتم با همين اعداد حالا چي درسته ؟؟؟؟؟؟؟؟
خیر اشتباه است چون شما آدرس رو تقسیم کردین نه مقدار حافظه را و نیازی به تقسیم برای چک کردن نیست میتونید به سادگی بیت اول رو مقایسه کنید اگر صفر بود عدد زوج میباشد در غیر اینصورت فرد

موفق باشی

soonami
شنبه 09 دی 1391, 17:46 عصر
حقيقتش نفهميدم منظورتون رو