PDA

View Full Version : چهار عمل اصلی در اسمبلی



Metaldevil
یک شنبه 29 بهمن 1385, 20:18 عصر
سلام دوستان راستشو بخواین من باید یه پروژه تو زبان اسمبلی برا دانشگاهمون بنویسم که فقط چهار عمل اصلی رو انجام بده. فعلا دو عمل جمع و تفریق رو نوشتم ولی یه خورده ایراد داره ازتون می خام یه کمی باهاش ور برین و کمکم کنین ممنون می شم:خجالت: soheilmamdouhi2003@gmail.com:متفکر:

Younes
دوشنبه 30 بهمن 1385, 09:04 صبح
سلام
مشکل شما در رعایت نکردن قوانین زبان اسمبلی است. در خطوط 88 و 90 دو حافظه را باهم مقایسه کرده اید در حالی که در اسمبلی هردو آپرند باهم نمیتوانند حافظه باشند. یا مثلا خط 108 یک بایت را در یک کلمه میخواهید بریزید ( هر دو آپرند باید هم طول باشند) . این اشکلات نحوی را از بین ببرید تا بتوانید اجرای برنامه را ببینید.
درمورد اشکالات منطقی : اولا که برای خواندن یک رشته از ورودی باید همیشه طول را یکی بیشتر تعیین کنید زیرا وقفه مربوطه همیشه در انتهای رشته یک 0DH اضافه می کند.
نکته دیگری که باید رعایت کنید گرفتن عدد از ورودی است . در اسمبلی ما هر چه از ورودی می گیریم بصورت کاراکتر است و خود باید آنرا به عدد تبدیل کنیم یا از دستورات جمع و تفریق اسکی اسفاده نمایید .

Younes
دوشنبه 30 بهمن 1385, 14:42 عصر
شما باید مثلا برای تبدیل '3' به 3 (حرف 3 به عدد 3) از کد مربوطه 30H کم کنید (یا 48 دسیمال) اما اگر عدد بیش از یک رقم داشته باشد مثلا عدد 123 شماباید بعد از تبدیل یک آنرا جایی نگه دارید و بعد از اینکه 2 را تبدیل کردید 1 را در 10 ضرب کرده با 2 جمع کنید و بعد از تبدیل '3' به عدد 3باید عدد قبلی (یعنی 12) را در 10ضرب کرده و با 3 جمع کنید تا به عدد 123 (درمقابل رشته '123' ) برسید.
درمورد دستورات اسکی می توانید به کتابها رجوع کنید زیرا من در برنامه ها هیچوقت استفاده نکرده ام .

Younes
سه شنبه 01 اسفند 1385, 09:25 صبح
با سلام
اولا خواهش میکنم پیغامها را با فونت فارسی بنویس. ثانیا مشکل اعدادشما همان مشکل بافر است شما اعدادرا بصورت کاراکتری در بافر خوانده اید و باید آنها را به عدد تبدیل کرده و در متغیرهای مربوطه قرار دهید. مسئله ای که درمورد علامت '+' عنوان کردید به همین دلیل است که این یک کاراکتر است و شما توانسته ای که آنرا درست تشخیص بدهید اما اعدادرا نمیتوانید .

dostmohammady
چهارشنبه 02 اسفند 1385, 12:49 عصر
سلام من هم برنامه ی شما را دارم.من جمع وضرب را انجام داده ام ولی توی تفریق وتقسیم
مشکل دارم بیا اطلاعاتمون رو با هم ترکیب کنیم وبرنامه رو بنویسیم.

Metaldevil
جمعه 04 اسفند 1385, 09:12 صبح
دوست عزیز من آقا Younes با تشکر از راهنمایی که کردی سعی می کنم این موردی که شما فرمودین رو روی برنامم پیاده کنم.
خانوم دوست محمدی من خوشهال میشم اطلاعاتمون رو با هم به اشتراک بزاریم.:چشمک:

dostmohammady
سه شنبه 08 اسفند 1385, 12:00 عصر
عمل ضرب
mov al,x
mov bl,y
imul bl
mov ah,0
add ax,30h
mov dh,0
mov dx,ax
mov ah,02h
int 21
در ضمن باید مثل جمع عدد ورودی را 30hکم کنید.همان x,y
امیدوارم بدرداتان بخورد.حالا شما عمل تفریق وتقسیم رو بگین.

Younes
یک شنبه 13 اسفند 1385, 09:00 صبح
باسلام
خانم دوست محمدی برنامه شما درصورتی جواب درست رانمایش می دهد که حاصلضرب شما یک رقمی باشد. یعنی نهایتا 3*3 .

Smart User
جمعه 18 اسفند 1385, 23:03 عصر
سلام.
این برنامه چهار عما اصلی رو روی دو عدد دو رقمی انجام می ده .

اعداد رو به صورت دو رقمی وارد کنید یعنی 01 یا 18 و نه عدد 1 یا 4 .

ابتدا عدد اول را وارد کرده و enter را بزنید
بعد علامت + - * / و enter را بزنید
بعد عدد دوم را وارد کنید و enter بزنید

درضمن این برنامه فلگ های z , p , c رو هم بعد از اجرای برنامه نشون می ده.
تقسیم رو هم فقط خارج قسمت رو نشون می ده...

Smart User
جمعه 18 اسفند 1385, 23:05 عصر
یه چیزی رو هم یادم رفت بگم !! اعداد باید بدون علامت باشن و اگه جواب منفی بشه به صورت مکمل دو نشون می ده

dostmohammady
شنبه 26 اسفند 1385, 08:11 صبح
سلام برای این که اعداد را در ارقام بالاتر دریافت کنیم نباید از بافر استفاده کنیم؟
می شه در مورد عمل تفریق منو راهنمایی کنید ممنون می شم.

Smart User
دوشنبه 28 اسفند 1385, 22:37 عصر
با سلام و تبریک پیشاپیش عید نوروز..

چرا باید حتما بافر بگیرید و بعد اعداد وارد شده که به حالت متنی هستند رو به هگز یا باینری تبدیل کنید... روش تبدیل عدد از نوع متنی به عدد نوع هگز هم در همه کتاب های اسمبلی هست. تو همین تایپیک یک برنامه گذاشتم که توش یه تابع با نام ASC_TO_DEC هست. با صدازدن متوالی این تابع می تونید عددتون رو به هگز تبدیل کنید.( عدد رو از آخر به اول و دو بایتی به تابع پاس بدید )


کدوم قسمت تفریق براتون سوال برانگیزه؟ مطلب خاصی مد نظره یا توضیح کلی میخوای؟

mehdi5106
دوشنبه 07 خرداد 1386, 04:47 صبح
اینم سورس برنامه ماشین حساب به زبان اسمبلی با چهار عمل اصلی:
اگه مشکلی داشت برام پیغام بزارین تا براتون اصلاح کنم.

dash feri
پنج شنبه 17 مرداد 1387, 13:18 عصر
narmafzar asembeli ro mikham lotfan
ki dare
bede be man mamnoonam

eL2rado
جمعه 18 مرداد 1387, 14:34 عصر
narmafzar asembeli ro mikham lotfan
ki dare
bede be man mamnoonam
نرم افزار Emu8086 (کامپایلر اسمبلی) رو میتونی از این وبلاگ دانلود کنی:
http://assemblylanguge.blogfa.com (http://assemblylanguge.blogfa.com/)

eL2rado
یک شنبه 20 مرداد 1387, 03:25 صبح
از بچه ها کسی میتونه این کد رو برام توضیح بده؟...یه دنیا تشکر.. مربوط میشه به جمع دو عدد
مخصوصا دستورات (mul dx و sub bl,'0')
;--------------------------------------------------
asctobin proc
push bx
mov ax,0
continuee:
mov bl,[si]
cmp bl,0dh
jz exit
mov dx,10
mul dx

sub bl,'0'
mov bh,0
add ax,bx
inc si

jmp continuee
exit:
pop bx
ret
asctobin endp
;-------------------
bintoasc proc
add si,4
mov bx,10
continue:
mov dx,0
div bx
add dl,'0'
mov [si],dl
or ax,ax
jz ex
dec si
jmp continue
ex:
ret
bintoasc endp
;------------------------------
که قبلش به این صورته
lea si,numa
call asctobin
mov bx,ax
همچنین برای numb
و در نهایت
lea si,numc
call bintoasc

mohsenrahx
سه شنبه 26 آذر 1387, 12:16 عصر
اینم سورس برنامه ماشین حساب به زبان اسمبلی با چهار عمل اصلی:
اگه مشکلی داشت برام پیغام بزارین تا براتون اصلاح کنم.




چطور میشه کامپایلش کرد؟ :متفکر:

MORTEZA66
چهارشنبه 18 دی 1387, 23:55 عصر
سلام به همه دوستان
من دقيقا برنامه اي رو كه اين دوسمون ميخواستند به عنوان پروژه درسي نوشته بودم گفته بد نيست كار اين دوسمون رو هم راه بندازم
ساده ولي مفيده

setare12
چهارشنبه 27 خرداد 1388, 00:03 صبح
امیدوارم بتونه جواب بده

mazy007
دوشنبه 21 آذر 1390, 14:10 عصر
سلام ببخشید من یه برنامه اسمبلی میخواستم که ۴ عمل اصلی رو داشته باشه و تا ۲۰ رقم بتونه کار کنه ... هیچکدوم از برنامه های صفحه های قبل میتونه بهم کمک کنه؟
ممنون

xman_1365_x
سه شنبه 22 آذر 1390, 11:52 صبح
سلام ببخشید من یه برنامه اسمبلی میخواستم که ۴ عمل اصلی رو داشته باشه و تا ۲۰ رقم بتونه کار کنه ... هیچکدوم از برنامه های صفحه های قبل میتونه بهم کمک کنه؟
ممنون
خیر نمیتونه کمکی کنه
میتونید به صورت بیت های پشت سر هم و یا روش ساده تر هر رقم به صورت یک کاراکتر در نظر بگیرید،نمونه ضرب و جمع قبلا گفته شده
موفق باشید