PDA

View Full Version : تقسیم 32 بیتی با 8086



djnew2009
پنج شنبه 18 خرداد 1391, 22:53 عصر
می خوام عدد تو dxax رو به 10 تقسیم کنم
از راه شیفت میشه ولی باقی مونده رو بهم نمیده
در واقع می خوام رقم یکانی عدد مو رو به دست بیارم
کسی ایده ای نداره ؟
(عدد تو dxax سنگینه با div معمولی سیستم overflow می کنه )
چیکار باید بکنم ؟
مرسی

MostafaMohammadi
جمعه 19 خرداد 1391, 12:12 عصر
تقسیم زیر رو در نظر بگیر:



a ÷ b = c
d

توی این تقسیم


پارامتر a، مقسوم یا dividend است.
پارامتر b، مقسوم علیه یا divisor است.
پارامتر c، خارج قسمت یا quotient است.
پارامتر d، باقیمانده یا remainder است.

حالا این تقسیم رو در نظر بگیر:



DX:AX ÷ b = AX
DX



پارامتر DX:AX، مقسوم یا dividend است.
پارامتر b، مقسوم علیه یا divisor است.*
پارامتر AX، خارج قسمت یا quotient است.
پارامتر DX، باقیمانده یا remainder است.

* توجه داشته باش که پارامتر b حتما باید یا یک خانه حافظه و یا یک ثبات 16 بیتی باشد و شما مستقیما نمی تونی به جای پارامتر b یه عدد بنویسی، به طور مثال: DX:AX ÷ 10 غلط است و DX:AX ÷ CX درست است.

حالا فرض کن می خواهی عدد 4084600 رو بر عدد 100 تقسیم کنی، کد اش به این صورت میشه:


MOV DX, 003Eh
MOV AX, 5378h
MOV CX, 100
DIV CX

نکته 1:برای سادگی کار با اعداد و کم کردن اشتباهات، عدد 4084600 رو تبدیل به معادل هگزادسیمال اش بکن و بعد به کار ببر.
نکته 2: برای تقسیم اعداد علامت دار کافیه دستور DIV رو به دستور IDIV تغییر بدی.