1 / 74

تهیه وتنظیم: سید مصطفی موسوی

برنامه نویسی به زبان اسمبلی. فصل هفتم: دستورات ریاضی و منطقی و عملیات BCD. تهیه وتنظیم: سید مصطفی موسوی. رجیستر پرچم. رجیستر پرچم شامل پرچم هایی است که پس از انجام دستورات ریاضی و منطقی تحت تاثیر قرار میگیرند. شامل سه نوع بیت است: پرچم های شرایطی (که با رنگ سیاه مشخص شده اند)

kevina
Download Presentation

تهیه وتنظیم: سید مصطفی موسوی

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. برنامه نویسی به زبان اسمبلی فصل هفتم: دستورات ریاضی و منطقی و عملیات BCD تهیه وتنظیم: سید مصطفی موسوی

  2. رجیستر پرچم • رجیستر پرچم شامل پرچم هایی است که پس از انجام دستورات ریاضی و منطقی تحت تاثیر قرار میگیرند. • شامل سه نوع بیت است: • پرچم های شرایطی (که با رنگ سیاه مشخص شده اند) • پرچم هایی که باید توسط دستورات خاص صفر و یک گردند. (که با رنگ قهوه ای مشخص شده اند) • بیت های بلا استفاده که با عبارت U (Undefined) مشخص شده اند.

  3. رجیستر پرچم • پرچم های شرایطی پرچم هایی هستند که پس از انجام اعمال ریاضی و منطقی 0 و 1 می شوند و ایجاد شرایط خاصی را در برنامه اطلاع می دهند.

  4. پرچم نقلی Carry • پرچم نقلی (CF): • در دستور ADD چنانچه از رقم پرارزش رقم نقلی خارج شود یک می گردد و در غیر اینصورت صفر است. + CF

  5. پرچم نقلی Carry • در دستور SUBچنانچه نیاز به رقم قرضی باشد یک می گردد و در غیر اینصورت صفر است. CF -

  6. پرچم نقلی Carry • برای دستور زیر با شرط AL=2EH و BL=50H بعد از اجرای دستور مقدار AL و CF را مشخص نمایید. ADD AL, BL AL=7EH CF=0

  7. پرچم نقلی Carry • برای دستور زیر با شرط AL=60H و BL=B0H بعد از اجرای دستور مقدار AL و CF را مشخص نمایید. ADD AL, BL AL = 10H CF = 1

  8. پرچم توازن (Parity) • پرچم توازن(PF): • پرچم PF به همراه بایتی که عمل روی آن انجام شده تشکیل توازن فرد می دهند یعنی تعداد 1 ها در این مجموعه باید فرد باشد. • اگر پس از اجرای دستور تعداد 1 ها زوج باشد PF یک می شود و در غیر اینصورت 0 می شود. PF PF

  9. پرچم توازن (Parity) • برای دستور زیر با شرط AL=05H بعد از اجرای دستور مقدار AL و PF را مشخص نمایید. ADD AL, 30H AL = 35H = 00110101B PF = 1

  10. پرچم توازن (Parity) • برای دستور زیر با شرط AL=04H بعد از اجرای دستور مقدار AL و PF را مشخص نمایید. ADD AL, 30H AL = 34H = 00110100B PF = 0

  11. پرچم نقلی کمکی(Auxiliary) • پرچم نقلی کمکی(AF): • اگر در جمع دو مقدار بایتی از بیت سوم رقم نقلی خارج شود مقدار آن 1 می شود و در غیر اینصورت 0 است. + AF

  12. پرچم نقلی کمکی(Auxiliary) • پرچم نقلی کمکی(AF): + AF

  13. پرچم نقلی کمکی(Auxiliary) • برای دستور زیر با شرط AL=07H بعد از اجرای دستور، مقدار AL و AF را مشخص نمایید. ADD AL, 19H AL=20H AF=1

  14. پرچم نقلی کمکی(Auxiliary) • در دستور SUBچنانچه در بیت سوم نیاز به رقم قرضی باشد یک می گردد و در غیر اینصورت صفر است. AF - AF -

  15. پرچم صفر (Zero) • پرچم صفر(ZF): • چنانچه نتیجه اجرای یک دستور ریاضی یا منطقی صفر باشد مقدار ZF یک و در غیر اینصورت 0 می گردد. • مثال: برای دستور زیر با شرط AL=07H و BL=07H بعد از اجرای دستور، مقدار AL و ZF را مشخص نمایید. SUB AL, BL AL=0H ZF=1

  16. پرچم علامت(Sign) • پرچم علامت(SF): • در اعداد دودوئی، اگر بیت پرارزش برابر 1 باشد نشان دهنده اینست که آن عدد منفی است و در غیر اینصورت عدد مثبت است. • مثال: عدد منفی عدد مثبت

  17. پرچم علامت(Sign) • پرچم علامت(SF): • چنانچه در نتیجه حاصل از اجرای یک دستور ریاضی یا منطقی، بیت پرارزش صفر باشد(عدد مثبت) مقدار آن صفر و اگر یک باشد (عدد مثبت) مقدار آن یک می شود یعنی علامت حاصل از نتیجه عمل را نشان می دهد. • مثال: برای دستور زیر با شرط AL=5FH بعد از اجرای دستور، مقدار AL و SF را مشخص نمایید. ADD AL, 7DH AL=DCH SF=1 • یعنی عدد منفی است

  18. پرچم علامت(Sign) • مثال: برای دستور زیر با شرط AL=5FH بعد از اجرای دستور، مقدار AL و SF را مشخص نمایید. ADD AL, 12H AL=71H SF=0 • یعنی عدد مثبت است

  19. پرچم سرریز(Overflow) • پرچم سرریز(OF): • چنانچه نتیجه حاصل از اجرای یک دستور ریاضی یا منطقی، برای عملیات بایتی بزرگتر از یک بایت و برای دستورات کلمه ای بزرگتر از یک کلمه باشد، آنگاه پرچم OF یک می شود. • کاربرد آن در بحث اعداد علامت دار است.

  20. پرچم سرریز(Overflow) • مثال: برای دستور زیر با شرط AL=50H و BL=80 بعد از اجرای دستور، مقدار AL و OF را مشخص نمایید. ADD AL, BL AL=D0H • حاصل جمع D0H است که بیت پرارزش آن 1 است (1101) و اگر عدد علامت دار باشد، یک عدد منفی است. بنابراین جمع دو عدد مثبت یک عدد منفی شده است و پرچم سرریز 1 می شود. OF=1

  21. دستورات ریاضی • شامل دستورات زیر است • جمع ADD و ADC • تفریق SUB و SBB • افزایش یک واحد INC • کاهش یک واحد DEC • ضرب MUL • تقسیم DIV

  22. دستورات ریاضی • مشخصات دستورات ریاضی • به صورت بایتی و کلمه ای قابل اجرا هستند • ADD AL, 03H • ADD AX, 30E3H • برای رجیستر های سگمنت قابل اجرا نمی باشد. دستور زیر نا معتبر است: • ADD DS,12H • دستوراتی که در این فصل معرفی می شود برای داده های بدون علامت می باشد

  23. دستور جمع • دستور جمع به شکل زیر می باشد: • ADD AX, 02H • ADD AX, [02H] • ADD AX, BX • مشخصات دستورالعمل جمع: • منبع می تواند یک عدد، یا مکان حافظه و یا محتوی یک رجیستر باشد. • مقصد می تواند مکان حافظه و یا محتوی یک رجیستر باشد. • منبع و مقصد نمی توانند همزمان مکانهای حافظه باشند.

  24. دستور جمع • پرچم هایی که تحت تاثیر قرار می گیرند: • CF • AF • OF • PF • SF • ZF • برای اجرای این دستور میکروپروسسور اعداد را بدون علامت در نظر می گیرد و بیت علامت برای آن مفهومی ندارد.

  25. دستور جمع با در نظر گرفتن پرچم نقلی • دستور جمع با در نظر گرفتن رقم نقلی به شکل زیر است. • ADC BX, 02H ;BX = BX + 02H + CF • ADC AL, DL ;AL = AL + DL + CF

  26. دستور تفریق • دستور تفریق به شکل زیر می باشد: • SUB AX, 02H • SUB AX, [02H] • SUB AX, BX • مشخصات دستورالعمل تفریق: • منبع می تواند یک عدد، یا مکان حافظه و یا محتوی یک رجیستر باشد. • مقصد می تواند مکان حافظه و یا محتوی یک رجیستر باشد. • منبع و مقصد نمی توانند همزمان مکانهای حافظه باشند.

  27. دستور تفریق • پرچم هایی که تحت تاثیر قرار می گیرند: • CF • AF • OF • PF • SF • ZF • برای اجرای این دستور میکروپروسسور اعداد را بدون علامت در نظر می گیرد و بیت علامت برای آن مفهومی ندارد.

  28. دستور تفریق با در نظر گرفتن بیت قرضی • دستور تفریق با در نظر گرفتن بیت قرضی به شکل زیر است. • SBB BX, 02H ;BX = BX - 02H - CF • SBB AL, DL ;AL = AL – DL - CF

  29. دستور تفریق • مثال: برای دستور زیر با شرط CL=9CH و BL=37H بعد از اجرای دستور، مقدار CL و CF را مشخص نمایید. SUB CL, BL • جواب: CL=10011100 BL=00110111 CL(Result)=01100101 CF=0

  30. دستور تفریق • مثال: برای دستور زیر با شرط CL=2EH و BL=4AH بعد از اجرای دستور، مقدار CL و CF را مشخص نمایید. SUB CL, BL • جواب: CL=00101110 BL=01001010 CL(Result)=11100100 CF=1 SF=1

  31. دستور تفریق • مثال: برای دستور زیر با شرط CL=21H و BL=4CH بعد از اجرای دستور، مقدار CL و CF را مشخص نمایید. SUB CL, BL • جواب: CL=00100001 BL=01001100 CL(Result)=11010101 CF=1 SF=1

  32. مثالهای مربوط به دستورات جمع و تفریق • مثال: برنامه ای بنویسید که دو بایت تعریف شده در سگمنت داده با مقادیر 3EH و 40H را با همدیگر جمع و نتیجه را در بایت حافظه با نام Result قرار دهد. DataSeg SEGMENT Num1 DB 3EH Num2 DB 40H Result DB ? DataSeg ENDS

  33. مثالهای مربوط به دستورات جمع و تفریق CodeSeg SEGMENT ASSUME CS:CodeSeg, DS:DataSeg MOV AX, DataSeg MOV DS, AX MOV AL, Num1 ADD AL, Num2 MOV result, AL MOV AX,4C00H INT 21H CodeSeg ENDS END

  34. مثالهای مربوط به دستورات جمع و تفریق • مثال: برنامه ای بنویسید که دو مقدار دو کلمه ای تعریف شده در سگمنت داده با مقادیر 1021 و 37952EB4H را با همدیگر جمع و نتیجه را در بایت حافظه با نام result قرار دهد. DataSeg SEGMENT Num1 DD 1021 Num2 DD 37952EB4H Result DD ? DataSeg ENDS

  35. مثالهای مربوط به دستورات جمع و تفریق CodeSeg SEGMENT ASSUME CS:CodeSeg, DS:DataSeg MOV AX, Num1 ADD AX, Num2 MOV result, AX MOV AX, Num1+2 ADC AX, Num2+2 MOV result+2, AX MOV AX,4C00H INT 21H CodeSeg ENDS END

  36. مثالهای مربوط به دستورات جمع و تفریق CodeSeg SEGMENT ASSUME CS:CodeSeg, DS:DataSeg MOV AX, Num1 ADD AX, Num2 MOV result, AX MOV AX, Num1+2 ADC AX, Num2+2 MOV result+2, AX MOV AX,4C00H INT 21H CodeSeg ENDS END

  37. دستور INC • دستور افزایش، یک واحد به مقدار محتوی مقصد مشخص شده در دستور می افزاید. • دستور افزایش، به شکل زیر می باشد: • INC AX • INC [02H] • INC [BX] • مشخصات دستورالعمل افزایش: • مقصد می تواند یک رجیستر یا یک مکان از حافظه باشد.

  38. دستور INC • پرچم هایی که تحت تاثیر قرار می گیرند: • AF • OF • PF • ZF • SF • پرچم نقلی یا CF تحت تاثیر قرار نمی گیرد. یعنی اگر محتوی مقصد بایتی برابر FF باشد با اجرای دستور INC مقدار آن 00 می شود اما پرچم CF تحت تاثیر قرار نمی گیرد.

  39. دستور INC • مثال: برای دستور زیر اگر BX برابر 40 باشد و محتوی بایت با آدرس 40 برابر 34H باشد مقدار [40] چند است؟ • INC BYTE PTR [BX] • [40] = 35H

  40. دستور DEC • دستور کاهش، یک واحد از مقدار محتوی مقصد مشخص شده در دستور می کاهد. • دستور کاهش، به شکل زیر می باشد: • DEC AX • DEC [02H] • DEC [BX] • مشخصات دستورالعمل کاهش: • مقصد می تواند یک رجیستر یا یک مکان از حافظه باشد.

  41. دستور DEC • پرچم هایی که تحت تاثیر قرار می گیرند: • AF • OF • PF • ZF • SF • پرچم نقلی یا CF تحت تاثیر قرار نمی گیرد. یعنی اگر محتوی مقصد بایتی برابر 00 باشد با اجرای دستور DEC مقدار آن FF می شود اما پرچم CF تحت تاثیر قرار نمی گیرد.

  42. دستور DEC • مثال: برای دستور زیر اگر BX برابر 45 باشد و محتوی بایت با آدرس 45 برابر 00H و محتوی بایت با آدرس 46 برابر 21H باشند آنگاه مقدار این مکانهای حافظه بعد از اجرای دستور العمل چند است؟ • DEC WORD PTR [BX] • [46] = 20H • [45] = FFH

  43. دستور DEC • مثال: برای دستور زیر اگر DATA1 بیان کننده یک داده کلمه ای با مقدار 6830H باشد آنگاه مقدار DATA1 پس از اجرای دستور العمل چند است؟ • DEC DATA1 • DATA1 = 682FH

  44. دستور MUL • دستور ضرب بدون علامت، یک بایت بدون علامت از منبع را در بایت بدون علامت موجود در رجیستر AL ضرب می کند. • MUL BL ;AX = AL * BL • MUL BYTE PTR [BX] ;AX = AL * [BX] • یعنی یک پایه دستورالعمل ضرب، رجیستر AL می باشد. نتیجه ضرب به شکل یک عدد دو بایتی در رجیستر AX قرار می گیرد. • در دستورات دو بایتی، یک کلمه بدون علامت از منبع را در کلمه بدون علامت موجود در رجیستر AX ضرب می کند. • MUL BX ;DX|AX = AX * BX • MUL WORD PTR [BX] ;DX|AX = AX * [BX] • یعنی یک پایه دستورالعمل ضرب کلمه ای، رجیستر AX می باشد. نتیجه ضرب به شکل یک عدد دو کلمه ای در رجیسترهای AX و DX قرار می گیرد.

  45. دستور MUL • دستور ضرب کلمه ای: • MUL منبع • دستور ضرب بایتی: • MULمنبع

  46. دستور MUL • مثال: • MUL BH ;AX = AL * BH • MUL CX ;DX|AX = AX * CX • MUL BYTE PTR [BX] ;AX = AL * [BX] • MUL factor[BX] ;AX = AL * factor[BX]

  47. دستور MUL • مثال: برنامه بنویسید که یک بایت از حافظه به نام MULBYTE را در یک کلمه از حافظه به نام MULWORD ضرب کند. MOV AX, MULWORD MOV CL, MULBYTE MOV CH,00H MUL CX

  48. دستور DIV • دستور تقسیم بدون علامت، مقدار رجیستر AX را بر مقدار موجود در منبع تقسیم می کند. خارج قسمت در رجیستر AL و باقیمانده در رجیستر AH قرار می گیرد. • DIV BL ;AL = AX / BL AH=AX % BL • DIV BYTE PTR [BX] ;AL = AX / [BX] AH = AX % [BX] • یا یک عدد دوکلمه ای شامل رجیسترهای DX و AX را بر مقدار منبع تقسیم می کند. خارج قسمت در رجیستر AX و باقیمانده در رجیستر DX قرار می گیرد. • DIV BX ; AX = (DX|AX) / BX AX = (DX|AX) % BX • DIV WORD PTR [BX] ; AX = (DX|AX) / [BX] AX = (DX|AX) % [BX]

  49. دستور DIV • دستور تقسیم کلمه ای: • دستور تقسیم بایتی:

  50. دستور DIV • مثال: • DIVBH ;AL = AX / BH AL = AX % BH • DIVCX ;AL = AX / CX AL = AX % CX • DIV BYTE PTR [BX] ;AL = AX / [BX] AL = AX % [BX] • DIV factor[BX] ;AL = AX / factor[BX] AL = AX / factor[BX]

More Related