אסמבלר

אסמבלר (באנגלית: Assembler; בעברית: מאסף) היא תוכנית מחשב המתרגמת (או מהדרת) תוכנית שנכתבה בשפת סף (Assembly) לשפת מכונה הניתנת לביצוע על ידי המחשב.

האסמבלר מותאם בדרך כלל לשפת מכונה ספציפית, אם כי אסמבלרים מסוימים יכולים לטפל בתוכניות הכתובות בשפות סף של מעבדים שונים.

==מהות האסמבלר==
מעבד המחשב מבצע את הפקודות המאוחסנות בזיכרון המחשב. פקודות אלה הן פקודות בסיסיות ביותר, כשכל פקודה בנויה מרצף קצר של סיביות, שמשמעותו מובנת למעבד. רצף זה קרוי שפת מכונה. כתיבה ישירה של רצף הביטים שיבצע תוכנית משמעותית היא פעולה מייגעת. כדי לקצר תהליך זה נוצרו שפות התכנות. מרבית שפות התכנות הן שפות עיליות, שבהן יש לפקודות דמיון מסוים לשפה טבעית. כל פקודה בשפה עילית מתורגמת על ידי המהדר לסדרה ארוכה של פקודות בשפת מכונה. לשפות העיליות קדמה שפת אסמבלי, הקרויה גם שפת סף, שבה יש התאמה חד-חד ערכית בין הפקודות שכותב המתכנת ובין הפקודות בשפת המכונה, כלומר כל פקודת אסמבלר מתורגמת לפקודה יחידה בשפת מכונה.

עד לתחילת שנות ה-70 היה התכנות באסמבלר נפוץ למדי ואפילו דומיננטי, עקב משאבי המחשב המוגבלים שעמדו לרשות המתכנתים, והיכולת ליצור קוד חסכוני ביותר (יחסית לזה שנוצר בשפות עיליות) באמצעות האסמבלר. בעקבות התפתחותם של מהדרי שפות עיליות יעילים יותר, אשר יכולים ליצור קוד קצר ומהיר יותר משל מתכנת אסמבלי ממוצע, עברו מרבית המתכנתים לפיתוח תוכנות בשפות עיליות שהוא קל ופשוט יותר, והאסמבלר נותר בעיקר ככלי עזר המשמש מתכנתי מערכות הפעלה וכן בפיתוח חלקי תוכנה הדורשים ביצועים מהירים במיוחד.

לקיצור תהליך התכנות של פעולות נפוצות נוספו לאסמבלר הוראות מכלול (Macro statements) לביצוע פעולות אלה, שכל אחת מהן התפתחה לסדרה של פקודות אסמבלר.

לכל מעבד יש שפת מכונה משלו, ובהתאם לכך אסמבלר משלו.

דוגמה לפקודה באסמבלר: . פקודה זו (באסמבלר של מחשבי IBM מיינפריים) טוענת לאוגר 8 את המלה הנמצאת בזיכרון בכתובת DATA.

==אסמבלר למעבדי אינטל==
===אסמבלרים נפוצים למעבדי אינטל===
* MASM32, פיתוח של האסמבלר של מיקרוסופט, ה-MASM .
* NASM (Netwide Assembler) - אסמבלר קוד פתוח שיתופי, שהוקם בזמנו ביוזמת קבוצת דיון.
* TASM (Turbo Assembler) - אסמבלר ישן, היסטורי מבית בורלנד. פיתוחו הופסק יחד עם כל קו מוצרי ה-Turbo.
* FASM (Flat Assembler) - אסמבלר קוד פתוח, פותח על ידי Tomasz Grysztar שהיה בזמנו סטודנט למתמטיקה.

===פעולות בסיסיות===
{| class="wikitable"
|+ פעולות בסיסיות באסמבלר x86
|-
! הוראת אסמבלי !! משמעותה
|-
| <syntaxhighlight lang="asm"> MOV op1, op2 </syntaxhighlight> || העתקת op2 אל op1
|-
| <syntaxhighlight lang="asm"> ADD op1, op2 </syntaxhighlight> || חיבור op1 עם op2 והשמה ב-op1
|-
| <syntaxhighlight lang="asm"> SUB op1, op2 </syntaxhighlight> || חיסור op1 ב-op2 והשמה ב-op1
|-
| <syntaxhighlight lang="asm"> INC op </syntaxhighlight> || הגדלת op ב-1
|-
| <syntaxhighlight lang="asm"> DEC op </syntaxhighlight> || הקטנת op ב-1
|-
| <syntaxhighlight lang="asm"> CMP op1, op2 </syntaxhighlight> || השוואה בין op1 ל-op2 (פעולת SUB מדומה תוך עדכון אוגר הדגלים אך ללא שינוי האופרנדים)
|-
| <syntaxhighlight lang="asm"> OR op1, op2 </syntaxhighlight> || פעולת OR לוגית בין op1 ל-op2 והשמה ב-op1
|-
| <syntaxhighlight lang="asm"> AND op1, op2 </syntaxhighlight> || פעולת AND לוגית בין op1 ל-op2 והשמה ב-op1
|}

===תוכנית Hello world===
להלן קוד באסמבלי הנועד לאסמבלר MASM היוצר תוכנית DOS המציגה הודעת Hello world:
<syntaxhighlight lang="asm">
.MODEL Small
.STACK 100h
.DATA
 db msg 'Hello, world!$'
.CODE
start: ; code starts here
 mov ah, 09h
 mov dx, offset msg
 int 21h ; function 09: output $-ended string from DS:DX to console
 mov ax, 4C00h
 int 21h ; function 4C: terminate program (termination code in AL)
end start
</syntaxhighlight>

==ראו גם==
* דיסאסמבלר
* שפת סף
* מונחים בתוכנה

== קישורים חיצוניים ==

* [http://www.underwar.co.il/1-Programming/127-האסמבלר-של-8086---חלק-ראשון/ מדריך שפת אסמבלר] באתר UnderWarrior
* [http://webster.cs.ucr.edu Art Of Assembly] - ספר ללימוד אסמבלי 
* [http://www.intel.com/design/pentium4/manuals/index_new.htm IA-32 Intel® Architecture Software Developer's Manuals] 
* [http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739,00.html AMD Technical Documentation] 

==הערות שוליים==

קטגוריה:תכנות
קטגוריה:מונחים בתוכנה

en:Assembly language#Assembler
pt:Assembly#Montador