PDA

View Full Version : دستور AAA



Safa2
سه شنبه 22 آذر 1384, 19:51 عصر
با سلام
ضرب و جمع دو عدد 40 رقمی با دستور AAA

aakh1361
چهارشنبه 23 آذر 1384, 01:41 صبح
ورودت رو به سایت برنامه نویس تبریک میگم http://asefsoft.com/qsimages/72.gif
می تونی یک تویض کامل در موردش بدی
اگر با مثال باشه که عالیه

amin joon
چهارشنبه 23 آذر 1384, 18:05 عصر
با سلام
برای جمع یا ضرب اعداد 40 رقمی شما باید تک تک رقم ها رو با هم ضرب یا جمع کنی . به عنوان مثال میتونی به صورت زیر عمل کنی.
1- چهل کاراکتر گرفته شده از کاربر رو به رقم متناظر تبدیل کن و در همان آرایه ذخیره کن
برای تبدیل کاراکتر '6' با کد 00110110به عدد 6 با کد 00000110 کافیست عدد را با 0fh وand کنیم
2- زقم جاری زا با زقم متناظز ضرب یا جمع کن و با رقم CARRY قبلی جمع کن(مقدار CARRY در ابتدا صفر است) .
3- پس از این عمل عدد به دست آمده را در AL ذخیره کرده و دستور aam را اجرا میکنیم
این دستور عدد ذخیره شده در al ( که کمتر از 100 است) زا به دو رقم جدا از هم تبدیل میکند.و یکان را در AL و دهگان را در AH ذخیره میکند........ در اینجا عددی که در AH ذخیره شده حکم کری (ده بر یک) را دارد.
4- AL را در آرایه ی ذیگری دخیره میکنیم
5-مراحل 2و3و4 زا تکرار میکنیم
6-آرایه نهایی را به کاراکتر تبدیل میکنیم.
برای تبدیل یک رقم به کاراکتر متناظر کافی است آن رقم را با 30H وOR کنیم

موفق باشی

aakh1361
پنج شنبه 24 آذر 1384, 02:40 صبح
ممنون http://asefsoft.com/qsimages/72.gif

Safa2
پنج شنبه 24 آذر 1384, 15:24 عصر
از راهنماییتون خیلی خیلی ممنونم :لبخندساده :تشویق:
موفق باشین

Younes
سه شنبه 29 آذر 1384, 10:45 صبح
با سلام آنچه که من از دستور aaa می دانم این است که نیازی نیست ارقام را از شکل کاراکتری به شکل عددی در اورد و پس از جمع میتوان آن را اصلاح کرد.بعنوان مثال برای جمع 6و 9 :
کد اسکی 6 ; mov al,36h
اضافه کردن کد اسکی 9 ;add al,39h
اصلاح حاصل جمع aaa
حاصل بصورت al=5 و cf=1 (بدلیل وجود رقم دهگان) خواهد شد.

B4Digit
پنج شنبه 04 شهریور 1389, 03:19 صبح
در موقعی که دو عدد به صورت کد اسکی را با هم جمع ،تفریق ،ضرب و یا تقسیم میکنیم
نتیجه به صورت صحیح نخواهد بود . به عنوان مثال : جمع دو عدد 1 و 2 در کد اسکی به
صورت زیر است :

کد اسکی 1 = 31H کد اسکی 2 = 32H

جمع دو عدد بالا => 31H + 32H = 63H

که نتیجه جمع در کد اسکی یا BCD اشتباه میباشد و باید اصلاح گردد . به این ترتیب دستوراتی

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

میباشند :

دستور اصلاح جمع اسکی : (ASCII Adjust After Addition (AAA

دستور اصلاح تفریق اسکی : (ASCII Adjust After Subtraction (AAS

دستور اصلاح ضرب اسکی : (ASCII Adjust After Multiplication (AAM

دستور اصلاح تقسیم اسکی : (ASCII Adjust After Division (AAD

بیش از این وارد جزئیات نمیشم مگر اینکه دوستان علاقه داشته باشند ، فقط

این نکته رو باید عرض کنم که اگر در مورد اعداد علامتدار عمل ضرب یا تقسیم

بخواد انجام بشه بایستی از دستور IMUL و یا IDIV استفاده کرد و ثبات AH

حتما صفر شود مثلا توسط این دستور Mov Ah,0 و یا Sub Ah,Ah در غیر اینصورت

مقدار Ah ممکنه اعدادی رو از قبل در حافظه نگه داشته باشه که موجب خطا خواهد شد .

پیروز باشید .

hush_hush
یک شنبه 25 دی 1390, 11:33 صبح
در موقعی که دو عدد به صورت کد اسکی را با هم جمع ،تفریق ،ضرب و یا تقسیم میکنیم
نتیجه به صورت صحیح نخواهد بود . به عنوان مثال : جمع دو عدد 1 و 2 در کد اسکی به
صورت زیر است :

کد اسکی 1 = 31H کد اسکی 2 = 32H

جمع دو عدد بالا => 31H + 32H = 63H

که نتیجه جمع در کد اسکی یا BCD اشتباه میباشد و باید اصلاح گردد . به این ترتیب دستوراتی

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

میباشند :

دستور اصلاح جمع اسکی : (ASCII Adjust After Addition (AAA

دستور اصلاح تفریق اسکی : (ASCII Adjust After Subtraction (AAS

دستور اصلاح ضرب اسکی : (ASCII Adjust After Multiplication (AAM

دستور اصلاح تقسیم اسکی : (ASCII Adjust After Division (AAD

بیش از این وارد جزئیات نمیشم مگر اینکه دوستان علاقه داشته باشند ، فقط

این نکته رو باید عرض کنم که اگر در مورد اعداد علامتدار عمل ضرب یا تقسیم

بخواد انجام بشه بایستی از دستور IMUL و یا IDIV استفاده کرد و ثبات AH

حتما صفر شود مثلا توسط این دستور Mov Ah,0 و یا Sub Ah,Ah در غیر اینصورت

مقدار Ah ممکنه اعدادی رو از قبل در حافظه نگه داشته باشه که موجب خطا خواهد شد .

پیروز باشید .


سلام من یه سوال داشتم و اونم اینه الگوریتم aaa چطوری مثلا در بالا یکی از دوستان گفته بود به دلیل رقم نقلی دهگان cf برابر یک می شه حالا سوال من اینه Ahو al چطور به دست می آن؟

xman_1365_x
دوشنبه 26 دی 1390, 03:41 صبح
AAA No operands ASCII Adjust after Addition.
Corrects result in AH and AL after addition when working with BCD values.

It works according to the following Algorithm:

if low nibble of AL > 9 or AF = 1 then:


AL = AL + 6
AH = AH + 1
AF = 1
CF = 1

else

AF = 0
CF = 0

in both cases:
clear the high nibble of AL.

Example:MOV AX, 15 ; AH = 00, AL = 0Fh AAA ; AH = 01, AL = 05 RET C Z S O P A r ? ? ? ? r
موفق باشي