View Full Version : سوال: استفاده از اعداد اعشاري
m_baranmr
دوشنبه 09 دی 1392, 22:14 عصر
سلام دوستان
من يك پروژه براي محاسبه سينوس و كسينوس با بسط تيلور دارم ولي نميدونم جمع و ضرب اعداد اعشاري چطوره و يك عدد باينري اعشاري و بايد چطوري به رشته تبديل كرد براي نمايش اون ...ممنون ميشم اگه كسي كمكم كنه
Delphi Coder
سه شنبه 10 دی 1392, 01:42 صبح
کلا انجام این کار با زبان اسمبلی یکم مشکل هست. خود 8086 این دستورات رو نداره باید از دستورات (FPU(8087 برای این محاسبات استفاده کرد. لینکهای زیر رو ببینید شاید براتون مفید باشه.
ضرب-عدد-اعشاری-اسمبلی (http://barnamenevis.org/showthread.php?168819-%D8%B6%D8%B1%D8%A8-%D8%B9%D8%AF%D8%AF-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1%DB%8C-%D8%A7%D8%B3%D9%85%D8%A8%D9%84%DB%8C)
Floating Point Processing (http://www.csee.umbc.edu/courses/undergraduate/CMSC313/fall07/burt/CMSC313_lectures/Floating%20Point/floatingPoint.html)
IEEE floating point (http://en.wikipedia.org/wiki/IEEE_754)
x87_floating-point_instructions (http://en.wikipedia.org/wiki/X86_instruction_listings#x87_floating-point_instructions)
اینجـــــــــــــــــــــ ـــــــا (http://www.ray.masmcode.com/fpu.html) هم منبع خوبی هست هم آموزشی و هم یک کتابخانه FPU
m_baranmr
چهارشنبه 11 دی 1392, 16:19 عصر
يه سوال ديگه . ميشه جمع و ضرب و تقسيم رو از fpu استفاده كرد ولي براي شارش حلقه ها از هخون ثبات هاط 8086 استغاده كرد ؟؟
و اين كه رشته اي گه گاربر وارد ميكه به عدد تيديل كرده و بعد روي آن كار كنم يا حتما ياسد باينري باشه؟؟؟
Delphi Coder
چهارشنبه 11 دی 1392, 20:35 عصر
بله میشه. رشته ای که کاربر وارد میکنه اگر عدد صحیح هست باید به عدد صحیح تبدیل بشه و اگر اعشاری هست به عدد اعشاری. باید ببینید ورودی تون چی هست.
m_baranmr
پنج شنبه 12 دی 1392, 13:44 عصر
من اين قطعه كد رو براي تبديل رشته ورودي به عدد نوشتم . ميشه بگين درسته يا نه
lea bx, buffer
while_blank: cmp byte ptr [bx], ' ' ; skip leading blank
jne end_while_blank ; exit while
inc bx
jmp while_blank
end_while_blank:
mov sign, 1 ;default sign multiplier
cmp byte ptr [bx], '+' ;leadin + ?
je skip_sign ;if so skip over
cmp byte ptr [bx], '-' ;leading - ?
jne save_sign ;if not save default +
mov sign, -1 ;-1 for minus sign
skip_sign: inc bx ;past sign
save_sign: mov ax, 0 ;number being accumulated
mov count, 0 ;count of digits so far
while_digit: cmp byte ptr [bx], '0' ;compare next car to '0'
jl end_while_digit ;if not a digit exit
cmp byte ptr [bx], '9' ;compare to '9'
jg end_while_digit ;not a digit if bigger than '9'
mov cx, 10 ;multiplier
mul cx ;multiply old number by 10
; jo overflow ;exit if product is too large
mov cl, [bx] ;mov ascii char to bl
and cx, 000fh ;convert to single digit integer
add ax, cx ;add to sum
; jc overflow ;exit if sum too large
inc count ;increment digit count
inc bx ;increment character pointer
jmp while_digit ;go next char
end_while_digit:
; cmp count, 0 ;no digit ?
; jz overflow ;if so, set overflow error flag
imul sign
mov x,ax
Delphi Coder
پنج شنبه 12 دی 1392, 19:43 عصر
خودتون که ننوشتید. copy/paste کردید اینجا.
در مورد درست یا نادرست بودن میتونید خودتون تست کنید ولی به هر حال این کدی که برای گرفتن عدد Integer نوشته شده مشکل داره و طبیعتا نتیجه دلخواه رو نمیده.
m_baranmr
پنج شنبه 12 دی 1392, 22:54 عصر
من خيلي از اسمبلي سر در نميارم فقط ميتونم قطعه كد هاي كوچيك بنويسم ميشه كمكم كنيد لطفا؟؟؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.