Assembly is real open source .





and


دستور  and 

Usage: AND dest,src Modifies flags: CF OF PF SF ZF (AF undefined)


کاربرد : از چپ به راست : دستور and ، عملوند مقصد (dest) ، عملوند مبدا (src)


دستور and بجز  پرچم AF سایر پرچمها را اصلاح می کند .

دستور and جزو دستورات منطقی ( لاجیکال )  است که می توان از ان برای ماسک گذاری روی بیتها استفاده نمود و مستقیما با تک تک بیتهای 0 و 1 کار کرد .





Performs a logical AND of the two operands replacing the destination with the result.

دستور and یک عملیات and منطقی دو عملوند را با جایگزینی مقصد با نتیجه ، اجرا می نماید .


Bitwise AND

 دستور and  منطقی (عقلانی ) .


در مورد عبارات زیر در اولین فرصت توضیح خواهم داد :

البته در پست adc توضیحات مختصری در مورد عبارات مشابه با اینها،  به زبان انگلیسی نوشته ام . می توانید علی الحساب به پست adc مراجعه فرمایید :



بروزرسانی :


برای کشف دقیق مفهوم این عبارات  به پست  add  مراجعه فرمایید  . در پست add به میزان 99 درصد توانستم این چیزهای نامفهوم را رمزگشایی نمایم .


همچنین در پست add   یکسری نکات جالب را در برخی زمینه ها  و یکسری ایده های غیرمستقیم همراه با یکسری انتقادات تند و شدید را نوشته ام  .


پست add  را حتما بخوانید تا هم به رمزگشایی 99 درصدی دست یابید و هم با ایده ها و انتقادات و پیشنهادات ام آشنا شوید .







AND r/m8,reg8 ; 20 /r [8086]

AND r/m16,reg16 ; o16 21 /r [8086]

AND r/m32,reg32 ; o32 21 /r [386]

 

AND reg8,r/m8 ; 22 /r [8086]

AND reg16,r/m16 ; o16 23 /r [8086]

AND reg32,r/m32 ; o32 23 /r [386]

 

AND r/m8,imm8 ; 80 /4 ib [8086]

AND r/m16,imm16 ; o16 81 /4 iw [8086]

AND r/m32,imm32 ; o32 81 /4 id [386]

 

AND r/m16,imm8 ; o16 83 /4 ib [8086]

AND r/m32,imm8 ; o32 83 /4 ib [386]

 

AND AL,imm8 ; 24 ib [8086]

AND AX,imm16 ; o16 25 iw [8086]

AND EAX,imm32 ; o32 25 id [386]

 

AND performs a bitwise AND operation between its two operands (i.e. each bit of the result is 1 if and only if the corresponding bits of the two inputs were both 1), and stores the result in the destination (first) operand. The destination operand can be a register or a memory location. The source operand can be a register, a memory location or an immediate value.

دستور and اجرا می کند یک عملیات ( حرف ربط ) " و"   بیتی ( منطقی ) بین دو عملونداش . ( هر بیت نتیجه برابر با 1 خواهد بود اگر و تنها اگر بیتهای نظیر به نظیر دو ورودی هردو برابر با 1 باشند . ) ، و نگه می دارد نتیجه را در عملوند مقصد (عملوند اول از سمت چپ  ) . عملوند مقصد می تواند یک رجیستر یا مکان حافظه باشد . عملوند مبدا می تواند یک رجیستر ، یک مکان حافظه یا یک مقدار فوری ( عدد ) باشد .

 

The MMX instruction PAND performs the same operation on the 64-bit MMX registers.

دستورالعمل PAND ( از خانواده ی MMX ) همان عملیات را روی رجیسترهای 64 بیتی MMX  اجرا می نماید .

+

+

سورس برنامه ی نمونه برای  اسمبلر RosAsm :


نکته : عباراتی همچون  Do  و On و Do_Loop   ماکرو می باشند و هیچکدامشان دستور زبان اسمبلی نیستند .


اسمبلر RosAsm یک اسمبلر کاملا خالص است و هیچ ماکرویی را از قبل در بدنه ی خود ندارد و شما باید خودتان برای عباراتی این چنینی ماکرو بسازید . هرچند طراح این اسمبلر تعدادی ماکرو ساخته است اما کارکردن با ماکرو در اسمبلر RosAsm  بسیار سخت و خسته کننده است لذا من خودم شخصا همیشه از دستورات خالص اسمبلی سطح پایین عمودی استفاده می کنم تا به ماکرو محتاج نباشم   و نیازی به تعریف ماکرو بصورت دستی یا سرو کله زدن با ماکروهای ناقص نداشته باشم  و البته از زبان اسمبلی دور نشوم .

در اسمبلر RosASm شما می توانید به روشهای مختلف ، دستورات را بنویسید مثل روش افقی که در اینجا ملاحظه می فرمایید .

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




 

main:

std       ; set direction flag

Do

mov al bl | and al 0F | add al '0'

On al > '9', add al 7

stosb | shr ebx 4

Do_Loop

cld          ; clear  direction flag


ret


متاسفانه بدلیل عدم وجود عناصر لازم که برای ساخت ماکرو ضروری می باشند  ، نتوانستم این کد را به اسمبلی خالص سطح پایین ترجمه  نمایم .


این کد فعلا در اسمبلر ، قابل اجرا نیست زیرا  عناصر سازنده ی ماکروها را باید در ابتدای سورس برنامه بنویسیم که من به این عناصر دسترسی ندارم . اما شاید بتوانم با دیس اسمبلی ، این مشکل را برطرف نموده و سورس خالص و تمیز اسمبلی را بدون هیچ مشکلی کامپایل و بیلد نمایم .


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



+


من برای اینکه از برنامه ام جلو بیفتم هر روز تعداد 10 پست را بصورت خام و بدون ترجمه منتشر می کنم و بعد در اولین فرصت و البته به تدریج ، تک تک پستها را ویرایش و ترجمه خواهم کرد .  بهرحال من از پشتکار بالایی در کار با کامپیوتر  برخوردار هستم و  خسته نمی شوم و به امید خدا شاخ غول اسمبلی را می شکنم . انشاء ا....

+

+

وحید محمدی - وبلاگ وحیدمی .