وو

وحید آنلاین . آرشیو وبلاگ وحیدمی دات آی آر . شرکت بیان. vahidmy.blog.ir

وو

وحید آنلاین . آرشیو وبلاگ وحیدمی دات آی آر . شرکت بیان. vahidmy.blog.ir

ANDPD


Assembly is real open source .



andpd

 



Usage:ANDPD Modifies flags:CF OF PF SF ZF (AF undefined)




Performs a bitwise logical AND of the two packed double-precision floating-point values from the 'src' operand and the 'dest' operand, and stores the result in the 'dest' operand.



Bitwise Logical AND For Single FP



 



ANDPD xmm1,xmm2/mem128 ; 66 0F 54 /r [WILLAMETTE,SSE2]




 



ANDPD performs a bitwise logical AND of the two double-precision floating point values in the source and destination operand, and stores the result in the destination register.



 


dst[0-63] := src[0-63] AND dst[0-63],


dst[64-127] := src[64-127] AND dst[64-127].




 



The destination is an XMM register. The source operand can be either an XMM register or a 128-bit memory location.



 


main:



andnpd xmm1 label


ret


ANDNPS




Assembly is real open source .




andnps


دستور ANDNPS


Usage: ANDPS dest.src Modifies flags: None

دستور ANDNPS  روی هیچکدام از رجیسترهای پرچم تاثیر ندارد .




Inverts the bits of the four packed single-precision floating-point values in the 'dest', performs a bitwise logical AND of the four packed single-precision floating-point values in the 'src' and the temporary inverted result, and stores the result in the 'dest' operand.

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



Bitwise Logical AND NOT of Packed Single-Precision FP Values



 



ANDNPS xmm1,xmm2/mem128 ; 0F 55 /r [KATMAI,SSE]




 



ANDNPS inverts the bits of the four single-precision floating-point values in the destination register, and then performs a logical AND between the four single-precision floating-point values in the source operand and the temporary inverted result, storing the result in the destination register.

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





 


dst[0-31] := src[0-31] AND NOT dst[0-31],


dst[32-63] := src[32-63] AND NOT dst[32-63],


dst[64-95] := src[64-95] AND NOT dst[64-95],


dst[96-127] := src[96-127] AND NOT dst[96-127].




 



The destination is an XMM register. The source operand can be either an XMM register or a 128-bit memory location.

مقصد ، یک رجیستر XMM می باشد . عملوند مبدا می تواند  یا یک رجیستر XMM باشد یا یک آدرس حافظه ی 128 بیتی .



 

SIMD Floating-Point Exceptions

بدون هرگونه استنثنا . 


None.




main:



andnps   xmm1  label


ret


+

+

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


ANDNPD


Assembly is real open source .



andnpd


دستور ANDNPD



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


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


Inverts the bits of the two packed double-precision floating-point values in the 'dest', performs a bitwise logical AND of the two packed double-precision floating-point values in the 'src' and the temporary inverted result, and stores the result in the 'dest' operand.

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



Bitwise Logical AND NOT of Packed Double-Precision FP Values



 



ANDNPD xmm1,xmm2/mem128 ; 66 0F 55 /r [WILLAMETTE,SSE2]




 



ANDNPD inverts the bits of the two double-precision floating-point values in the destination register, and then performs a logical AND between the two double-precision floating-point values in the source operand and the temporary inverted result, storing the result in the destination register.

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



 


dst[0-63] := src[0-63] AND NOT dst[0-63],


dst[64-127] := src[64-127] AND NOT dst[64-127].




 



The destination is an XMM register. The source operand can be either an XMM register or a 128-bit memory location.

مقصد یک رجیستر XMM می باشد . عملوند مبدا می تواند یا یک رجیستر XMM باشد یا یک آدرس حافظه ی 128 بیتی .




 


SIMD Floating-Point Exceptions


بدون استثنائات ممیز شناور . 



None.




 



Example:


main:


andnpd   xmm1   label


ret


+

+

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



AND



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 پست را بصورت خام و بدون ترجمه منتشر می کنم و بعد در اولین فرصت و البته به تدریج ، تک تک پستها را ویرایش و ترجمه خواهم کرد .  بهرحال من از پشتکار بالایی در کار با کامپیوتر  برخوردار هستم و  خسته نمی شوم و به امید خدا شاخ غول اسمبلی را می شکنم . انشاء ا....

+

+

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


ADDSUBPS


Assembly is real open source.



addsubps


دستور ADDSUBPS


Usage: ADDSUBPS dest,src Modifies flags: None


دستور ADDSUBPS روی هیچکدام از رجیسترهای پرچم تاثیر ندارد .




Add/Subtract packed SP FP numbers from 'src' to 'dest'.

جمع یا تفریق اعداد ممیز شناور بسته ای از  مبدا به مقصد . 



Packed Single-FP Add/Subtract

 جمع یا تفریق  اعداد ممیز شناور ساده ی بسته ای .

ADDSUBPS xmm1, xmm2/mem128 ; F2 0F D0 /r [Pent4]


قابل اجرا روی اینتل پنتیوم 4 

 

Adds odd-numbered single-precision floating-point values of the 'src' operand (second operand) with the corresponding single-precision floating-point values from the 'dest' operand (first operand); stores the result in the odd-numbered values of the 'dest' operand. Subtracts the even-numbered single-precision floating-point values in the 'src' operand from the corresponding single-precision floating values in the 'dest' operand; stores the result into the even-numbered values of the 'dest' operand.

دستور ADDSUBPS مقادیر ممیز شناور دقت منفرد فرد درون  عملوند مبدا ( عملوند دوم از سمت چپ ) را با مقادیر ممیز شناور دقت منفرد نظیر به نظیر از عملوند مقصد ( عملوند اول از سمت چپ ) را با یکدیگر جمع می کند ؛ سپس نتیجه را در مقادیر فرد عملوند مقصد ، ذخیره می نماید . این دستور همچنین تقریق می کند مقادیر ممیز شناور دقت منفرد فرد موجود در عملوند مقصد را از مقادیر مشابه در عملوند  مقصد ؛ نگه می دارد نتیجه را  به درون مقادیر منفرد عملوند مقصد .


 

When the source operand is a memory operand, it must be aligned on a 16-byte boundary or a general-protection exception (#GP) will be generated.

هنگامیکه عملوند مبدا یک عملوند حافظه است ، باید روی یک مرز 16 بایتی تنظیم شده باشد وگرنه یک استثنای چند حفاظتی رخ خواهد داد .


xmm1[31-0] = xmm1[31-0] - xmm2/m128[31-0];

xmm1[63-32] = xmm1[63-32] + xmm2/m128[63-32];

xmm1[95-64] = xmm1[95-64] - xmm2/m128[95-64];

xmm1[127-96] = xmm1[127-96] + xmm2/m128[127-96]



مثال :


main:

addsubps     xmm1   Label


ret


+

+

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


ADDSUBPD


Assembly is real open source.


addsubpd 

دستور  ADDSUBPD


Usage: ADDSUBPD dest,src Modifies flags: None


دستور ADDSUBPD  روی هیچکدام از رجیسترهای پرچم تاثیر ندارد .



Add/Subtract packed DP FP numbers from 'src' to 'dest'.

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

Packed Double-FP Add/Subtract

 جمع یا تفریق اعداد ممیز شناور دابل بسته ای


ADDSUBPD xmm1, xmm2/mem128 ; 66 0F 00 /r [Pent4]

 این دستور روی پردازنده ی پنتیوم 4 اجرا می شود .


Adds the double-precision floating-point values in the high quadword of the 'src' and 'dest' operands and stores the result in the high quadword of the 'dest' operand. Subtracts the double-precision floating-point value in the low quadword of the 'src' operand from the low quadword of the 'dest'  operand and stores the result in the low quadword of the 'dest' operand.

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

 

When the source operand is a memory operand, it must be aligned on a 16-byte boundary or a general-protection exception (#GP) will be generated.

هنگامیکه عملوند مبدا  یک عملوند حافظه می باشد ، باید روی یک مرز 16 بایتی تنظیم شود وگرنه یک استنثای  چند حفاظتی ایجاد  خواهد شد .



xmm1[63-0] = xmm1[63-0] - xmm2/m128[63-0];

xmm1[127-64] = xmm1[127-64] + xmm2/m128[127-64]

 

مثال :


main:

addsubpd    xmm1  xmm2


ret


+

+

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


ADDSS

Assembly is real open source.



addss 

دستور ADDSS

Usage: ADDSS dest,src Modifies flags: None

این دستور روی هیچکدام از  رجیسترهای  پرچم تاثیر ندارد .


Adds the low single-precision floating-point values from the 'src' and the 'dest', and stores the single-precision floating-point result in the 'dest' operand.

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



دستور ADDSS مخفف عبارت زیر می باشد :

ADD Scalar Single-Precision FP Values

 


الگوی کلی دستورالعمل :

خانواده ی SSE2

ADDSS xmm1,xmm2/mem32 ; F3 0F 58 /r [WILLAMETTE,SSE2]

 

ADDSS adds the low single-precision FP values from the source and destination operands and stores the single-precision FP result in the destination operand.

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

 

dst[0-31] := dst[0-31] + src[0-31],

dst[32-127] remains unchanged.

 

The destination is an XMM register. The source operand can be either an XMM register or a 32-bit memory location. The three high-order doublewords of the 'dest' operand remain unchanged.

مقصد ، یک رجیستر XMM می باشد .  عملوند مبدا می تواند یک رجیستر XMM را یک آدرس حافظه ی 32 بیتی باشد . 3 دابل ورد بالایی حافظه عملوند مقصد ، بصورت دست نخورده باقی می ماند .


مثال :



main:

adds    xmm1  label


ret


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


ADDSD

Assembly is real open source.


addsd

 


دستور ADDSD

Usage: ADDSD dest,src Modifies flags: None


 این دستور روی هیچکدام از رجیسترهای پرچم تاثیر ندارد .


Adds the low double-precision floating-point values from the 'src' operand and the 'dest' operand, and stores the double-precision floating-point result in the 'dest' operand. The 'src' operand can be an XMM register or a 64-bit memory location. operand remains unchanged.

دستور ADDSD   مقادیر ممیز شناور با دقت مضاعف پایین را از عملوندهای مبدا و مقصد با هم جمع می کند و نتیجه ی ممیز شناور دقت مضاعف را در عملوند  مقصد نگهداری می نماید .

عملوند مبدا می تواند یک رجیستر XMM  یا یک مکان حافظه ی 64 بیتی باشد .

عملوند بدون تغییر باقی می ماند .




دستور ADDSD مخفف عبارت زیر است :

ADD Scalar Double-Precision FP Values

 


الگوی کلی دستور:

ADDSD xmm1,xmm2/mem64 ; F2 0F 58 /r [KATMAI,SSE]

 


ADDSD adds the low double-precision FP values from the source and destination operands and stores the double-precision FP result in the destination operand.

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

 



dst[0-63] := dst[0-63] + src[0-63],

dst[64-127) remains unchanged.

 

The destination is an XMM register. The source operand can be either an XMM register or a 64-bit memory location.

مقصد یک رجیستر XMM می باشد ( یعنی مقصد این دستور خود رجیستر XMM می باشد نه یک عملوند . ) . عملوند مبدا می تواند می تواند یا یک رجیستر XMM باشد یا یک آدرس حافظه ی 64 بیتی .


 

SIMD Floating-Point Exceptions

استثنائات :


Overflow, Underflow, Invalid, Precision, Denormal.

سرریز ، پاریز ، بی اعتبار ، دقت ، غیرطبیعی


مثال :

 

Main:


addsd    xmm1   label


ret



+

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


ADDPS

Assembly is real open source.



addps 

دستور ADDPS


Usage: ADDPs dest,src Modifies flags: None


این دستور روی هیچکدام از رجیسترهای پرچم تاثیر ندارد . 




Performs an SIMD add of the four packed single-precision floating-point values from the 'src' operand and the 'dest' operand , and stores the packed single-precision floating-point results in the 'dest' .

دستور ADDPS یک عملیات جمع SIMD را روی چهار مقدار ممیز شناور با دقت ساده از عملوند مبدا و عملوند مقصد اجرا می کند ، و نتایج ممیز شناور با دقت ساده ی بسته ای را در عملوند مقصد ، ذخیره می نماید .


دستور ADDPS مخفف عبارت زیر می باشد :


ADD Packed Single-Precision FP Values

 

ADDPS xmm1,xmm2/mem128 ; 0F 58 /r [KATMAI,SSE]

 این دستورالعمل از استاندارد SSE پشتیبانی می نماید .


ADDPS performs addition on each of four packed single-precision FP value pairs

دستور ADDPS عملیات جمع را روی هرکدام از چهار رقم بسته ای با دقت ساده ی ممیز شناور را اجرا می نماید .

 

dst[0-31] := dst[0-31] + src[0-31],

dst[32-63] := dst[32-63] + src[32-63],

dst[64-95] := dst[64-95] + src[64-95],

dst[96-127] := dst[96-127] + src[96-127].

 

The destination is an XMM register. The source operand can be either an XMM register or a 128-bit memory location.

 مقصد ، یک رجیستر XMM می باشد ( این یک دستور تخصصی مربوط به خود پردازنده است و عملا رجیستر خود پردازنده نقش عملوند را بازی می کند ) . عملوند مبدا می تواند یا یک رجیستر XMM باشد یا یک  آدرس حافظه ی 128 بیتی .


استثنائات ممیز شناور SIMD :


 

SIMD Floating-Point Exceptions


Overflow, Underflow, Invalid, Precision, Denormal.

سرریز ، پاریز ، بی اعتبار ، دقت ، غیرطبیعی


+

مثال :

 


main:


addps    xmm1   label


ret


+

+

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



ADDPD

Assembly is real open source.




addpd

دستور addpd






Usage: ADDPD dest,src Modifies flags:None

روش بکارگیری : از چپ به راست  دستور addpd  ، عملوند مقصد ، عملوند مبدا



Performs an SIMD add of the two packed double-precision floating-point values from the 'src' and the 'dest' operand and stores the packed double-precision floating-point results in the 'dest' operand. The 'src' operand can be an XMM register or a 128-bit memory location. The 'dest' operand is an XMM register.

دستور ADDPD  یک عملیات جمع  SIMD روی دو مقدار ممیز شناور با دقت مضاعف بسته ای روی عملوند مبدا و مقصد اجرا می کند و  نتایج ممیز شناور با دقت مضاعف بسته ای را در عملوند مقصد ذخیره می کند  .  عملوند مبدا می تواند یک رجیستر XMM یا یک مکان 128 بیتی آدرس باشد . عملوند مقصد یک رجیستر XMM می باشد .


دستور ADDPD مخفف عبارت زیر است :


ADD Packed Double-Precision FP Values

 



 



ADDPD xmm1,xmm2/mem128 ; 66 0F 58 /r [WILLAMETTE,SSE2]


در فرمول بالا ، بعد از دستور ADDPD ، عملوند مقصد می تواند یک رجیستر XMM باشد مثلا xmm1  و عملوند مبدا ( عملوند سمت راست ) می تواند یا یک رجیستر xmm  باشد ( مثلا xmm2 ) یا یک آدرس 128 بیتی حافظه باشد .


کاراکتر  /  به  معنای  یا  می باشد . دستور ADDPD در این حالت به کد 660F58 تبدیل می شود . r  در اینجا می تواند به معنای register باشد . SSE2 یک استاندارد جدید است که از تعدادی دستورالعمل جدید پردازنده ی اینتل پشتیبانی می نماید .


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


بنابراین پردازنده هایی که از استاندارد SSE2 استفاده می کنند در حال حاضر دارای بیشترین دستورات زبان اسمبلی می باشند  و به برنامه نویس زبان اسمبلی قدرت  و آزادی بیشتری اعطا می نمایند .

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


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


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




ADDPD performs addition on each of two packed double-precision FP value pairs.

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



 


dst[0-63] := dst[0-63] + src[0-63],


dst[64-127] := dst[64-127] + src[64-127].




 



The destination is an XMM register. The source operand can be either an XMM register or a 128-bit memory location.

  مقصد ؛ یک رجیستر XMM می باشد ( که در نقش یک عملوند ظاهر می شود زیرا این دستور مربوط به خود پردازنده است ) . عملوند مبدا می تواند یا یک رجیستر XMM  یا یک ادرس  از حافظه ی 128 بیتی باشد .



 


SIMD Floating-Point Exceptions

استثنائات ممیز  شناور SIMD  می تواند در مورد مسائل زیر باشد:



Overflow, Underflow, Invalid, Precision, Denormal.

سرریز ، پاریز ، بی اعتبار ، دقت ، غیرطبیعی



+

الگوی مفهومی  کاربرد این دستور  در RosAsm :


به جای xmm1   و  Label باید  عبارت مناسبی را بنویسیم تا برنامه اجرا شود .


نکته : با توجه به  عملکرد تخصصی این دستور که مستقیما به معماری پردازنده ی اینتل  مربوط می شود امکان دارد که این برنامه هرگز روی کامپیوتر شما اجرا نشود و یا اجرا کردن اش با خطرات غیرقابل پیش بینی  همراه باشد .


ابتدا مطمئن شوید که پردازنده ی کامپیوترتان از استانداردهای تخصصی  XMM و  SSE2 و مجموعه ی دستورالعملهای جدید  ، پشتیبانی می کند .






main:



addpd   xmm1  label


ret


+

+

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