دستور SER RX معادل است با يكي از دستورات زير
SBR Rx,255
LDI RX, 255
هرسه يك پالس مصرف ميكنه
نتيجه فلگ هم همان است
آيا يك دستور كمتر زندگي بهتر ؟
دستور SER RX معادل است با يكي از دستورات زير
SBR Rx,255
LDI RX, 255
هرسه يك پالس مصرف ميكنه
نتيجه فلگ هم همان است
آيا يك دستور كمتر زندگي بهتر ؟
ویرایش توسط aliila : 29-04-2010 در ساعت 11:29
با هم فرق دارن . اگه instruction set رو نگاه کنید میبینید که مثلا فقط sbr فلگ ها رو تغییر میده. یا غیر از اون ldi فرقش با sbr اینه که sbr مقدار رجیستر رو با عدد مورد نظر or میکنه و بعد میریزه تو رجیستر ولی ldi هر عددی باشه رو مستقیم میریزه تو رجیستر.
ser شبیه ldi rx,۲۵۵ عمل می کنه از این لحاظ حق با شماست . دلیلش راحت تر شدن نوشتن کد اسمبلی هست . اگه دقت کنید opcode اونا هم یکی هست و در اصل یه دستور العمل هستن.
کلا تو معماری RISC تا جایی که میشه تعداد دستور العمل ها رو کم میکنن تا هم سرعت رو بتونن افزاریش بدن هم هزینه ساخت و طراحی کمتر بشه .
وجود این دستورات: SEC,SEN,SEZ,SEI,SES,SEV,SET,SEH, و در مقابل اونها CLC,CLN,CLZ,CLI,CLS,CLV,CLT,CLH هم زیاد جالب به نظر نمیرسه، توی pic فقط دوتا دستور BSF و BCF کار همه این دستورات رو میتونند انجام بدن، فکر کنم همون SBI و CBI در AVR هم دقیقا کار همینارو میتونه بکنه، یعنی به جای اینکه تعداد دستورالعمل ها رو کم کنند زیاد کردند!!
علاوه بر اون به نظر من یک مشکل مهم دستورالعملهای AVR این هست که دستورات LDS و STS که برای ارتباط با RAM داخلی هستند دارای آپکود 32 بیتی هستند، یعنی هر بار که برنامه نویس بخواد مستقیما داده از RAM بخوانه یا توی اون بنویسه 4 بایت از حافظه رو از دست میده، در حالی که مثلا در PIC این کار 16 بیت آپکود داره، یعنی 2 بایت، که دقیقا نصف هست، حالا حساب کنید توی برنامه های بزرگ که باید n مرتبه از Ram مستقیم بخوانی و بنویسی سرعت پرشدن حافظه flash چقدر فرق میکنه.