מבוא

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

שימוש ב-GUI

בעת פתיחת האסמבלר מוצג בפניך חלון חדש כפי שמוצג להלן:

assembler

ה-GUI מורכב משלושה מרכיבים:

  1. סרגל הכלים שנמצא בחלק העליון של אזור העריכה.
  2. שורת חיווי הקו עם מחווני שגיאה משמאל לאזור העריכה.
  3. אזור העריכה.

סרגל הכלים

סרגל הכלים מספק את הפונקציות העיקריות של האסמבלר באמצעות מספר אייקונים:

load סמל זה מפעיל את הטעינה של קובץ assembly לתוך אזור העריכה. ניתן להפעיל את פונקציית הטעינה גם על ידי קיצור המקלדת (Ctrl-L).

save סמל זה מפעיל את שמירת התוכן הנוכחי באזור העריכה. ניתן להפעיל את פונקציית השמירה גם על ידי קיצור מקשים (Ctrl-S).

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

assemble סמל זה מפעיל את פונקציית הרכבה של התוכן הנוכחי באזור העריכה. פונקציית ההרכבה cal גם להיות מופעלת על ידי קיצור המקשים (ALT-A).

שגיאה קודמת סמל זה קופץ לשגיאה שזוהתה לפני מיקום הסמן הנוכחי. פונקציה זו זמינה גם על ידי המקלדת קיצור דרך (Ctrl-P).

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

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

help סמל זה מציג מסך עזרה זה.

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

סרגל חיווי הקו

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

אזור העריכה

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

שימוש בחישובים

האסמבלר תומך בשני סוגי חישובים:

  1. חישובים יחסיים של מונה תוכניות (PC).
  2. חישובים מוחלטים

תוכנית נגד חישובים יחסיים

במקרה שנדרשת כתובת ביחס למונה התוכנית הנוכחית ניתן לבצע חישובים אלו על ידי באמצעות הפנקס השמור pc. כמו כן, השימוש בתוויות וקבועים מותר בחישובים אלה.

דוגמאות: pc+8 , pc-0x40, mylabel-pc וכו'.

חישובים מוחלטים

בחישובים מוחלטים מחושב ערך קבוע. לביצוע חישובים מוחלטים תוויות וקבועים מורשים.

סוגי חישוב

סוגי החישוב הבאים נתמכים:

הערה: כרגע אין תמיכה בסוגריים.

סדר חישוב

חשוב: כרגע החישובים מבוצעים משמאל לימין ללא תלות ב היררכיה של המפעיל!

זה אומר:

5+10*2 מחושב כ-(5+10)*2 = 30

10*2+5 מחושב כ-(10*2)+5 = 25

זה ברשימת המשימות כדי לשפר את תמיכת החישוב הגרועה הזו.

שימוש בפקודות מאקרו

ה-Build-in assembler תומך בפקודות מאקרו. התחביר עבור מאקרו הוא:

.macro <name> <nr_of_variables>

<BODY>

.endm

הגדרת מאקרו צריכה שני פרמטרים:

  1. <name> פרמטר זה הוא שם המאקרו שיש להשתמש בו בשאר התוכנית שלך.
  2. <nr_of_variables> פרמטר זה מציין את מספר המשתנים המשמשים בתוך מאקרו. פרמטר זה צריך להיות ערך שלם חיובי (למשל 0,1,2,....)

מבנים מותרים בתוך מאקרו

בתוך מאקרו אתה יכול להשתמש רק בהוראות, תוויות, חישובים וקריאות לפקודות מאקרו אחרות. זה חשוב לשים לב שתוויות המוגדרות בתוך <BODY> של מאקרו הם מקומיים למאקרו ולא ניתן להתייחס אליהם מחוץ למאקרו.

שימוש במשתנים בתוך מאקרו

אם הפרמטר <nr_of_variables> הוא מספר גדול מ-0, יש לקרוא למאקרו עם זה מספר ערכים. ניתן להפנות לכל אחד מהערכים הללו בתוך מאקרו עם המחוון @<x> כאשר <x> הוא מספר. מכאן ש-@1 מתייחס לפרמטר 1, לפרמטר @2 2 וכו'.

שימוש בקריאות מאקרו בתוך מאקרו

פקודות מאקרו מאפשרות להתקשר לפקודות מאקרו אחרות, אולם קיימות שתי הגבלות:

  1. מאקרו אינו יכול לקרוא לעצמו; פקודות מאקרו רקורסיביות אינן נתמכות.
  2. שתי פקודות מאקרו אינן יכולות לקרוא זו לזו; שיחות מעגליות אינן נתמכות.

הנחיות אסמבלר

קיימות מספר הנחיות הנתמכות כמתואר להלן.

תוויות

ניתן להשתמש בתוויות על ידי התחביר <name>: ה<name> חייב להתחיל עם אות ויכול להכיל אותיות (a..z;A..Z), מספרים (0..9) וקווים תחתונים (_). שימו לב שתוויות המצוינים בתוך מאקרו הם מקומיים למאקרו. כל שאר התוויות הן גלובליות (לכן תווית גלובלית יכולה להיות הפניה בתוך מאקרו).

קבועים בשם

ניתן להגדיר קבועים בעלי שם על ידי התחביר .equ <name> <value>. הפרמטר <name> חייב להתחיל באות ויכול להכיל אותיות (a..z;A..Z), מספרים (0..9), וקווים תחתונים (_). השדה <value> יכול להכיל מספר או חישוב.

מקטעים

אתה יכול לחלק את התוכנית שלך למקטעים באמצעות .section <name>. ה<name> הפרמטר חייב להתחיל באות ויכול להכיל אותיות (a..z;A..Z), מספרים (0..9) וקווים תחתונים (_). ישנם ארבעה שמות מקטעים מוגדרים מראש שהם .text, .data, .rodata, .bss. אלה אינם דורשים את מילת המפתח .section ב מולם.

הערות

הערות נתמכות על ידי הצבת # לפניהן ומתארכות עד סוף השורה. ניתן לממש הערות מרובות שורות על ידי הצבת ה# לפני כל שורה.

מחרוזות

ניתן לציין מחרוזות על ידי .string "<str>", .ascii"<str>", או .asciz"<str>". ה-<str> יכול להכיל כל תוכן ויכול להיות מספר שורות. ניתן להשתמש בקודי בריחה הבאים:

  1. \n -> הוסף תו שורה חדשה.
  2. \" -> הוסף מרכאות כפולות.
  3. \t -> הכנס תו טאב.
  4. \r -> הכנס תו החזרת עגלה.
  5. \f -> הוסף הזנת טופס.
  6. \\ -> הכנס לוכסן אחורי.

גם .string וגם .asciz יוסיפו אוטומטית תו אפס בסוף של המחרוזת.

כתובות זיכרון

כברירת מחדל, האסמבלר יתחיל בכתובת הזיכרון 0x00000000. כדי להיות מסוגל לשנות את הזיכרון הנוכחי כתובת בהנחיה .org ניתן להשתמש ב<address>, כאשר <address> הוא ערך בתוך מרחב כתובות של 32 סיביות. הערה: רק חפיפה בין מקטעים ייבדק על ידי ההרכב. אם בתוך קטע צוינה כתובת שכבר תפוסה, הערכים מוחלפים.

קבועים

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

  1. .byte <value1>[,<value2>,...] הוראה זו מאחסנת את הערכים מתפרשים כבייטים בזה אחר זה לזיכרון.
  2. .half <value1>[,<value2>,...]
    .2byte < ;value1>[,<value2>,...]
    .short <value1>[,<value2>,...] הנחיות אלו מאחסנות את הערכים מתפרשים כערכים של 16 סיביות בזה אחר זה לזיכרון.
  3. .word <value1>[,<value2>,...]
    .4byte <value1> [,<value2>,...]
    .long <value1>[,<value2>,...] הנחיות אלו מאחסנות את הערכים מתפרשים כערכים של 32 סיביות בזה אחר זה לתוך הזיכרון.
  4. .dword <value1>[,<value2>,...]
    .8byte <value1> [,<value2>,...]
    .quad <value1>[,<value2>,...] הנחיות אלו מאחסנות את הערכים מתפרשים כערכים של 64 סיביות בזה אחר זה לתוך הזיכרון.