לדלג לתוכן

1.1 פתיחה תרגול

בתרגול זה נסביר לכם על הקובץ אסמבלי הבסיסי שהעובר אליכם (base.asm) כדי שבהמשך תוכלו לכתוב קוד אסמבלי בעצמכם.

IDEAL
MODEL small
STACK 100h
DATASEG
; --------------------------
; Your variables here
; --------------------------
CODESEG
start:
    mov ax, @data
    mov ds, ax
; --------------------------
; Your code here
; --------------------------

exit:
    mov ax, 4c00h
    int 21h
END start

זהו קובץ אסמבלי בסיסי מאוד.
הוא הבסיס שעליו כותבים תוכניות בשפת אסמבלי (assembly) בסביבת DOS (למשל עם DOSBox).
אפשר לחשוב עליו כמו "שלד" של תוכנית — אתה רק צריך למלא את הגוף.

הסבר שורה־שורה:

IDEAL

💡 זו הנחיה לאסמבלר (TASM) להשתמש במצב IDEAL — מצב כתיבה קל יותר לקריאה ונוח יותר ללימוד.
במילים פשוטות: "תשתמש בגרסה הפשוטה של השפה".

MODEL small

💡 מודל זיכרון = איך מחלקים את הזיכרון לקוד ונתונים.
הsmall אומר: כל הקוד והנתונים נמצאים בסגמנט אחד כל אחד (Segment אחד ל־CODE ואחד ל־DATA).
מתאים לתוכניות פשוטות כמו שלנו.

STACK 100h

💡 מגדיר מחסנית (Stack) בגודל 100h בתים = 256 בתים.
המחסנית משמשת את המעבד לקרוא לפונקציות, לשמור ערכים זמניים וכו'.
לא חייבים להבין את זה עכשיו — אבל חייב להגדיר מחסנית.

DATASEG
; --------------------------
; Your variables here
; --------------------------

💡 DATASEG פותח את אזור המשתנים שלך — המקום בו תוכל להגדיר טקסטים, מספרים, מערכים ועוד.

CODESEG
start:

הCODESEG פותח את הקוד האמיתי — איפה שהתוכנית באמת רצה.
הstart: הוא תווית (label), נקודת התחלה. (נדבר בהמשך על המשמעות של label-ים)
כשתוכנית תתחיל לרוץ, היא תתחיל מהשורה הזו.


mov ax, @data
mov ds, ax

שורה מאוד חשובה — היא מכינה את הסגמנט של הנתונים (DATA).

  • ה@data היא הכתובת של אזור המשתנים שלך (הDATA segment).
  • הds זה רגיסטר מיוחד שאחראי על ה־Data Segment.
    אז בעצם אתה אומר: "שים את הכתובת של המשתנים בתוך הרגיסטר שאחראי על גישה למשתנים".

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

exit:
    mov ax, 4c00h
    int 21h

זהו הקוד שיוצא מהתוכנית.
הקוד הזה אומר למערכת ההפעלה DOS שהוא רוצה לסיים את התוכנית, (נדבר בהמשך כיצד הפקודה int עובדת)

זה שווה ל:

return 0;

בשפות תכנות מתקדמות יותר


END start

אומר לאסמבלר: “סיימתי לכתוב. כשהתוכנית תתחיל — תתחיל מ־start:”.