به نام خدا



دستورات زبان اسمبلی :

 


X86 Opcodes or intel instructions


 کدهای عملیاتی پردازنده ی ایکس 86 (پردازنده های خانواده ی 8086 تا پنتیوم و اینتل کور  نسل نهم  و ... )  یا دستورات زبان اسمبلی اینتل ( از ایکس 86  تا Intel Core i9 )  :


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

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


 آزادی کاربر ،  در برنامه نویسی با زبان اسمبلی و فهم باینری و آشتی کردن با زبانهای ماشین و اسمبلی  ؛ بدست می آید :


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


اوپن سورس یعنی دیس اسمبلی . اوپن سورس یعنی برنامه نویسی محض با زبان اسمبلی .


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


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


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


لذا باید حتما زبان اسمبلی را یاد بگیرید تا به  اوپن سورس واقعی و حقیقی برسید .


لیست کامل دستورات زبان برنامه نویسی اسمبلی :


aaa     aas    aam     aad     adc      add    

addpd      addps       addsd      addss     addsubpd     addsubps

and      andnpd      andnps     andpd      andps       arpl

 

bound      bsf    bsr     bswap       bt    BTC    BTR    BTS

 

CALL      CBW     CWD    CWDE     CDQ    CLC    CLD    CLI    CLTS

CLFLUSH    CMC    CMP     CMPccPD    CMPccPS    CMPccSD   CMPccSS   

CMPSB     CMPSW      CMPXCHG      CMPXCHG8B

CMOVcc      COMISD     COMISS      CPUID 

 

CVTDQ2PD     CVTDQ2PS 

CVTPD2DQ      CVTPD2PI      CVTPD2PS      CVTPI2PD      CVTPI2PS   

CVTPS2DQ       CVTPS2PD     CVTPS2PI 

CVTSD2SI      CVTSD2SS       CVTSI2SD      CVTSI2SS  

CVTSS2SD      CVTSS2SI

CVTTPD2DQ     CVTTPD2PI     CVTTPS2DQ     CVTTPS2PI   CVTTSD2SI     CVTTSS2SI 

 

DAA     DAS      DEC      DIV      DIVPD     DIVPS     DIVSD     DIVSS

 

EMMS      ENTER   

 

F2XM1      FABS     FADD      FADDP      FBLD      FBSTP      FCHS    FCLEX 

FCMOVcc      FCOM       FCOMP      FCOMPP      FCOMI     FCOMIP       FCOS 

FDECSTP     FDIV      FDIVP      FDIVR      FDIVRP     FEMMS    FFREE 

FIADD       FICOM      FICOMP      FIDIV      FIDIVR 

FILD      FIST      FISTP      FISTTP      FIMUL      FINCSTP

FINIT      FNINIT     FISUB     FISUBR      FLD      FLDxx      FLDCW    FLDENV 

FMUL      FMULP      FNOP  

FNSAVE     FNSTCW     FNSTENV     FPATAN      FPTAN      FPREM         FPREM1 

FRNDINT     FRSTOR     FSAVE       FSCALE      FSETPM      FSIN       FSINCOS  

FSQRT     FST      FSTP      FSTCW       FSTENV      FSTSW   

FSUB       FSUBP     FSUBR      FSUBRP      FTST      FUCOMxx       FWAIT 

FXAM     FXCH      FXRSTOR     FXSAVE     FXTRACT     FYL2X       FYL2XP1    

 

HADDPD      HADDPS     HSUBPD      HSUBPS      HLT 

 

IDIV     IMUL      INC     IN     INSB     INSD     INSW     

INT       INT01      INT1      INT3     ICEBP      INTO      INVD     INVLPG 

IRET     IRETW     IRETD 

 

Jcc     JCXZ      JECXZ       JMP 

 

LAHF      LAR      LDDQU      LDMXCSR     LDS      LES      LFS      LGS     LSS   

 LEA      LEAVE      LFENCE      LGDT     LIDT      LLDT     LMSW   

    LODSB      LODSW      LODSD      LOCK  

    LOOP      LOOPE      LOOPZ     LOOPNE     LOOPNZ     LSL      LTR 

 

MASKMOVDQU       MASKMOVQ      MAXPD      MAXPS       MAXSD        MAXSS       MFENCE      

MINPD        MINPS      MINSD      MINSS      MONITOR 

MOV     MOVAPD     MOVAPS     MOVD      MOVDDUP      MOVDQ2Q      MOVDQA    MOVDQU  

MOVHLPS      MOVHPD     MOVHPS       MOVLHPS      MOVLPD       MOVLPS   

MOVMSKPD      MOVMSKPS      MOVNTDQ      MOVNTI      MOVNTPD MOVNTPS      MOVNTQ 

MOVQ       MOVQ2DQ      MOVSB      MOVSD       MOVSHDUP      MOVSLDUP      MOVSW     

MOVSS      MOVSX       MOVUPD       MOVUPS       MOVZX

MUL        MULPD       MULPS      MULSD       MULSS        MWAIT 

 

NEG       NOT        NOP       NOPE 

 

OR      ORPD        ORPS      OUT       OUTSB      OUTSW     OUTSD

 

PACKSSDW      PACKSSWB       PACKUSWB      PADDB    PADDW      PADDD       PADDQ  

PADDSB       PADDSW      PADDUSB       PADDUSW     PAND     PANDN     

PAUSE      PAVGB       PAVGW       PAVGUSB  

  PCMPxxx       PEXTRW 

PF2ID       PF2IW       PFACC      PFADD       PFCMPxx       PFMAX    PFMIN 

PFMUL        PFNACC       PFPNACC       PFRCP     

 PFRCPIT1       PFRCPIT2       PFRSQIT1       PFRSQRT

PFSUB         PFSUBR      PI2FD       PI2FW

PINSRW        PMADDWD        PMAXSW        PMAXUB      PMINSW         PMINUB     

PMOVMSKB       PMULHRWA       PMULHUW       PMULHW      PMULLW       PMULUDQ   

  POP       POPA        POPAD        POPF       POR 

  PREFETCH       PREFETCHh  

  PSADBW        PSHUFD       PSHUFHW      PSHUFLW      PSHUFW

   PSLLDQ        PSLLx        PSRAx      PSRLDQ       PSRLx   

   PSUBx        PSUBxx       PSWAPD       PUNPCKhxx   

  PUSH        PUSHA       PUSHAD       PUSHF       PXOR

 

RCL       RCR      RCPPS      RCPSS      RDMSR       RDPMC        RDTSC    

REP         RET         RETF           RETN         ROL         ROR 

  RSDC        RSLDT      RSM       RSQRTPS       RSQRTSS      RSTS

 

  SAHF        SAL      SAR       SBB       SCASB       SCASW      SCASD     SETcc    

   SFENCE        SGDT       SIDT       SLDT

   SHL       SHR       SHLD       SHRD       SHUFPD      SHUFPS        SMSW

SQRTPD       SQRTPS      SQRTSD      SQRTSS       STC      STD      STI    

STMXCSR        STOSB       STOSW       STOSD      STR

SUB        SUBPD        SUBPS        SUBSD        SUBSS

   SYSCALL        SYSENTER        SYSEXIT        SYSRET  

 

   TEST     

 

  UCOMISD        UCOMISS        UD0        UD1      UD2    

  UNPCKHPD       UNPCKHPS        UNPCKLPD        UNPCKLPS 

 

VERR       VERW 

 

  WAIT        WBINVD       WRMSR   

XADD        XCHG      XLATB       XOR      XORPD      XORPS

 

 

 



به نام خدا


دستورات زبان برنامه نویسی  اسمبلی اینتل :


کاربران عزیز . سلام  . می دانم که بسیاری از شما از مطالعه ی پست قبلی مبنی بر بی نیازی زبان اسمبلی از کتابخانه های زبانهای سطح بالا ، شگفت زده  هستید !


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




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



یک زبان قدرتمند و همه منظوره  ( اسمبلی )  بهتر از  هزاران زبان ضعیف و مکار و ریاکار ( زبانهای سطح بالا )   می باشد .


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


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



نگران کلمات  عجیب این دستورات نباشید چون از پست بعدی تک تک این دستورات را برایتان تشریح می کنم و برای تک تک این دستورات طبق گرامر اسمبلر RosAsm  برایتان  مثال و نمونه ی برنامه می آورم .


همچنین آنها را بصورت یک درمیان ، رنگی کردم تا بهتر بتوانید انها را بخوانید و از هم تشخیص دهید .



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


یعنی پست بعدی عنوان اش اینست :  AAA 


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

مثلا به محض کلیک روی  کلمه ی  AAA  مستقیما به پست مربوطه وارد شوید .


و البته شما می توانید با کلیک روی یک کلمه ی کلیدی که در تمام پستهای آینده نوشته می شود مجددا به این صفحه  ( همین صفحه که شامل تمام دستورات زبان اسمبلی اینتل می باشد )  وارد شوید و یک مرور کلی به تمامی دستورات زبان اسمبلی اینتل داشته باشید .


این کلمه ی کلیدی اینست :


Assembly is real open source


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




شما می توانید از این دستورات زبان اسمبلی اینتل ، در اسمبلرهای Fasm و Masm32  و البته  Goasm  نیز استفاده کنید .

حتی اگر بتوانید با  Nasm   کار کنید این دستورات  ، آنجا نیز کاربرد خواهند داشت .


به هرحال اینها دستورات زبان اسمبلی اینتل می باشند که در هر مدلی اعم از 8 بیت ، 16 بیت ، 32 بیت و 64 بیت ، کاربرد دارند .


این دستورات به هیچ سیستم عامل وابسته نیستند و لذا شما می توانید در تمام سیستم عاملهای دنیا از این دستورات برای برنامه نویسی با زبان اسمبلی اینتل ، استفاده نمایید .

فرقی نمی کند که کاربر داس باشید یا ویندوز یا یونیکس یا مولتیکس یا لینوکس یا بی اس دی یا  اندروید ایکس 86 یا    ....


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


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


خب ! از پست بعد تک تک این دستورات را به شما معرفی کرده و با ذکر یک نمونه برنامه  ، کاربرد دقیق این دستورات را به شما آموزش خواهم داد . انشاء ا...

+

فراموش نکنید : عنوان پست بعدی این وبلاگ (وبلاگ وحیدمی) ،  AAA و عنوان پست بعد از آن ، AAS  و عنوان پست بعدی ،  AAM  می باشد و الی اخر .....   یعنی هر پست ،  فقط یک دستور زبان اسمبلی را تشریح کرده و توضیح می دهد .  بنابراین برای هر دستور زبان اسمبلی ، یک پست جداگانه می سازم و منتشر می نمایم .

+


نکته ی مهم :

بسیاری از این دستورات زبان اسمبلی که در این پست ، لیست کرده ام بر روی تمام پردازنده های خانواده ی اینتل از پردازنده ی اینتل 8086  گرفته تا پردازنده ی اینتل کور نسل نهم    یعنی  Core i9    براحتی اجرا می شوند .


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


بنابراین یادگیری این دستورات بر تمام کاربرانی که پردازنده ی اینتل دارند واجب است .

+


اخطار :

من در پست قبلی یک برنامه ی اسمبلی نوشتم که در آن از دستور push استفاده کردم ولی چون این برنامه را خیلی سریع و فی البداهه نوشتم فراموش کردم که روتین را با استفاده از دستور  pop  از حافظه  خارج نمایم .


یادتان باشد که برخی از دستورات زبان اسمبلی بصورت جفت و زوج  با هم بکار می روند .  مثلا هر وقت از دستور push  استفاده کردید و کارتان تمام شد حتما باید در  پایان کد از دستور  pop استفاده نمایید تا برنامه از حافظه ی کامپیوتر خارج شود و شما با  خطاهای خطرناک دچار نشوید  .


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


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


برای برنامه نویسی با زبان اسمبلی به یک محیط خلوت و ساکت و آرام نیاز دارید تا تمرکزتان بهم نخورد و  ناخواسته دچار اشتباه نشوید .


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




بروزرسانی :


 من بعد از مدتها جستجو موفق شدم نسخه ی اصلی و اوریجینال اسمبلر RosAsm  را پیدا و دانلود نمایم . این نسخه قدیمی است اما به درستی کار می کند مخصوصا که دیباگر (debugger) این نسخه  بخوبی و بطور صحیح نمایش داده می شود . شما می توانید نسخه ی اصلی و اوریجینال اسمبلر RosAsm را از آدرسهای  زیر دانلود نمایید :




++++++++

https://vahidmy.blog.ir

https://spasm.blog.ir

https://Assembler.blog.ir

+++++++++


Vahid Mohammady (vahidmy)

Original Site:  https://vahidmy.blog.ir




لینک دانلود نسخه ی اوریجینال اسمبلر RosAsm :


https://bayanbox.ir/download/150927488221190666/OriginalRosAsm.zip


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


ترجیحا فایل  OriginalRosAsm.zip را از لینک بالا ، دانلود نمایید .




+

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