ورود

View Full Version : سوال: محاسبه 10 عنصر اول سری فیبوناچی



hojatmohammadi
سه شنبه 01 آذر 1390, 18:14 عصر
یه توضیح مختصر یا شبه کد واسه برنامه 10 عدد سری فیبوناچی رو چاپ بکند و در آرایه 10 تایی نشان دهد !

xman_1365_x
سه شنبه 01 آذر 1390, 18:40 عصر
قبل از تاپیک زدن جستجو بکنید!
توضیح (http://fa.wikipedia.org/wiki/%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF_%D9%81%DB%8C%D8%A8% D9%88%D9%86%D8%A7%DA%86%DB%8C)

فیبوناچی (http://barnamenevis.org/showthread.php?313718-%DA%A9%D8%A7%D8%B1-%D8%A7%DB%8C%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F&p=1377456&viewfull=1#post1377456)
کد رو ببینید البته مشکل کوچیکی داره سعی کنید بفهمین چی کار میکنه اگر متوجه نشدین تصحیحش میکنم و اینکه این برنامه در بازه بایت محاسبه میکنه با کمی تغییر بازه رو در اندازه کلمه تغییر بدین
موفق باشی

hojatmohammadi
سه شنبه 01 آذر 1390, 18:57 عصر
قبل از تاپیک زدن جستجو بکنید!
توضیح (http://fa.wikipedia.org/wiki/%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF_%D9%81%DB%8C%D8%A8% D9%88%D9%86%D8%A7%DA%86%DB%8C)

فیبوناچی (http://barnamenevis.org/showthread.php?313718-%DA%A9%D8%A7%D8%B1-%D8%A7%DB%8C%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%DA%86%DB%8C%D8%B3%D8%AA%D8%9F&p=1377456&viewfull=1#post1377456)
کد رو ببینید البته مشکل کوچیکی داره سعی کنید بفهمین چی کار میکنه اگر متوجه نشدین تصحیحش میکنم و اینکه این برنامه در بازه بایت محاسبه میکنه با کمی تغییر بازه رو در اندازه کلمه تغییر بدین
موفق باشی

لینک ویکی رو خودم سرچ زدم و فهمیدم یه چیزایی میخوام تو اسمبلی وارد کنم نمیدونم باید از کجا شروع کنم !

xman_1365_x
سه شنبه 01 آذر 1390, 19:29 عصر
لینک ویکی رو خودم سرچ زدم و فهمیدم یه چیزایی میخوام تو اسمبلی وارد کنم نمیدونم باید از کجا شروع کنم !
لینک دوم سورس برنامه بود که انگار ندیدین
ضمنا توی ویکی الگوی بازگشتی هم بود!

hojatmohammadi
سه شنبه 01 آذر 1390, 22:29 عصر
لینک دوم سورس برنامه بود که انگار ندیدین
ضمنا توی ویکی الگوی بازگشتی هم بود!

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

xman_1365_x
چهارشنبه 02 آذر 1390, 00:26 صبح
ممنون ...... منتها یه مشکلی که داره این برنامه میوفته تو حلقه و بیرون هم نمیاد ....
برنامه توقف داشت اما بنده خدا بایت تعریف کرده و 70 هم شرط توقف و آرایه ای با همین طول داده و اینکه بعد در برنامه دو تا هم حساب کرده یادش رفته -2 کنه ، در صورتی که وقتی من ورد و برنامه رو هم کمی تغییر دادم فقط 24 عدد از سری رو درست حساب میکنه (برای بیشتر باید 32 بیت یا بیشتر در نظر گرفت)


STSEG SEGMENT STACK
Dw 64 DUP (0)
STSEG ENDS
;=================
DTSEG SEGMENT
DATA Dw 24 dup(0)
DTSEG ENDS
;=================
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG,DS:DTSEG,SS:STSEG
MOV AX,DTSEG
MOV DS,AX
;-----------
MOV SI,OFFSET DATA
MOV DX,0H
MOV CX,22
;-----------
MOV AX,0H ;IMPORT TWO NUMBER
MOV BX,1H
MOV [SI],AX
add si,2
MOV [SI],BX
add si,2
;-----------
L1: ;LOOP OF FIB
MOV DX,0H
ADD DX,BX
ADD DX,AX
MOV AX,BX
MOV BX,DX
MOV [SI],DX
add si,2
LOOP L1
;=================
MOV AH,4CH
INT 21H
MAIN ENDP
CDSEG ENDS
END MAIN

hojatmohammadi
چهارشنبه 02 آذر 1390, 10:16 صبح
باز هم برنامه رو که اجرا میکنم با پیغام خطایه PROGRAM HAS RETURNED CONTROL
TO THE OPERATING SYSTEM رو به رو میشم !!!!!!!!!!!!!!!!!! مطمئن هستین برنامه درست است ؟

xman_1365_x
چهارشنبه 02 آذر 1390, 12:01 عصر
باز هم برنامه رو که اجرا میکنم با پیغام خطایه PROGRAM HAS RETURNED CONTROL
TO THE OPERATING SYSTEM رو به رو میشم !!!!!!!!!!!!!!!!!! مطمئن هستین برنامه درست است ؟
فکر میکنید دستور زیر کارش چیه ؟

MOV AH,4CH
INT 21H
وقتی برنامه به این وقفه برسه کنترل رو به سیستم عامل بر میگردونه
شما برنامه رو در emu8086 اجرا کردین ، حالا بعد از اتمام برنامه و نمایش اون پیغام روی var کلیک کنید و در قسمت عنصر 24 را وارد کنید و هگز را به unsigned تغییر بدین
حالا که حاصل رو دیدین زیر برنامه ای بنویسید که حاصل رو در صفحه ،نمایش بده (قبلا جواب داده شده جستجو کنید)
موفق باشی

hojatmohammadi
چهارشنبه 02 آذر 1390, 13:29 عصر
فک کنم بای از وقفه 21h استفاده کنم به این شکل


mov ah,02
int 21h

xman_1365_x
چهارشنبه 02 آذر 1390, 13:48 عصر
فک کنم بای از وقفه 21h استفاده کنم به این شکل

mov ah,02
int 21h
فکر هاتون رو اینجا بیان نکنید برین روی کد اعمال کنید نتیجه گرفتین بگین نگرفتین ببینید چرا ،بهش فکر کنید!!!
در این مورد اشتباه میکنید به همین سادگی نیست، چون داده های ما عددی هست شما برای نمایش در صفحه باید تبدیل به کاراکتر کنید
که نیاز به تقسیم متوالی دارین که اعداد رو جدا کنید و بعدش تبدیل به اسکی کنید و در صفحه نمایش بدین
همونطور که گفتم قبلا جواب دادم ، حداقل جستجو کنید!!!
کارهایی که روی ورودی انجام میشه
تبدیل کارکتر به عدد = برای محاسبه کردن
تبدیل عدد به کاراکتر = برای نمایش دادن

sayyad
چهارشنبه 02 آذر 1390, 21:25 عصر
با سلام،
برنامه ی کامل رو می تونید دانلود کنید! ورودی تعداد عناصر و خروجی سری فیبوناچیه!

xman_1365_x
چهارشنبه 02 آذر 1390, 22:27 عصر
برنامه ی کامل رو می تونید دانلود کنید! ورودی تعداد عناصر و خروجی سری فیبوناچیه!
فقط صفر رو فراموش کردین نمایش بدین و ورودی نمی تونه بیشتر از 24 باشه چون محاسبه اشتباه میشه

hojatmohammadi
پنج شنبه 03 آذر 1390, 23:15 عصر
اگر خواسته باشیم سری فیبوناچی رو تو یه آرایه نشان دهیم باید چی کار کنیم ؟

xman_1365_x
پنج شنبه 03 آذر 1390, 23:45 عصر
اگر خواسته باشیم سری فیبوناچی رو تو یه آرایه نشان دهیم باید چی کار کنیم ؟
برنامه ای که من گذاشتم در حافظه به صورت آرایه ذخیره میشه و برنامه دوم به صورت آرایه نمایش میده الان مشکل چیه ؟

sayyad
جمعه 04 آذر 1390, 20:58 عصر
فقط صفر رو فراموش کردین نمایش بدین و ورودی نمی تونه بیشتر از 24 باشه چون محاسبه اشتباه میشه
ولی اغلب صفر رو جزو عناصرش به حساب نمیارن و فقط تو محاسبه میاد!

kamihyper
سه شنبه 22 اردیبهشت 1394, 10:42 صبح
سلام، کافیه مقدار رجیستر cx رو در برنامه ای که گذاشتم تغییر بدید، تا جمع تعداد عنصر مورد نظر رو محاسبه کنه

name "Fibonacci-sum"

org 100h

mov BH,1
mov DH,1
mov CX,9
fib:
add AL,DL
mov DL,DH
mov DH,BH
add BH,DL
loop fib

call print_al ; print (AL) result in decimal:

; wait for any key press:
mov ah, 0
int 16h

ret









print_al proc
cmp al, 0
jne print_al_r
push ax
mov al, '0'
mov ah, 0eh
int 10h
pop ax
ret
print_al_r:
pusha
mov ah, 0
cmp ax, 0
je pn_done
mov dl, 10
div dl
call print_al_r
mov al, ah
add al, 30h
mov ah, 0eh
int 10h
jmp pn_done
pn_done:
popa
ret
endp