הגדרת משתנים
ניתן להגדיר משתנים בתוך מקטע התוכנית (Code Segment)
או במקטע נפרד, מקטע נתונים (Data Segment).
כאשר אנו שומרים את המשתנים במקטע התוכנית, לרוב אנו שומרים
אותם בסוף המקטע, לאחר התוכנית.
לדוגמא:
STA SEGMENT STACK
DB 100H DUP (0)
STA ENDS
CODE SEGMENT
ASSUME CS:CODE,
DS:CODE, SS:STA
START:
MOV AX, CODE
MOV DS, AX
MOV AH, NUM1
; End the program
MOV AX, 4C00H
INT 21H
; Variables definitions
NUM1 DB 7
CODE ENDS
END START
חשוב לשמור על הפרדה בין פקודות התוכנית לבין הגדרת המשתנים.
אם לא נשמור על הפרדה כזו, המעבד יתייחס לנתונים כאל פקודות לביצוע.
הדרך השניה לשמור משתנים היא במקטע נפרד - מקטע הנתונים.
דרך זו היא הדרך המקובלת לעבודה עם משתנים. בשיטה זו נגדיר
מקטע בו יישמרו הנתונים. למשל:
נגדיר מקטע בשם DATA בו שני משתנים לא מאותחלים:
DATA SEGMENT
INCOME DB ?
SUM DB ?
DATA ENDS
מקטע זה יבוא לרוב לפני מקטע ה-CODE.
כמו כן, נשנה מעט את ההצהרות בתחילת מקטע הקוד: נשנה את ASSUME
ונרשום בו את שם מקטע הנתונים. במקום ההצהרה הבאה:
נכתוב:
בהוראה ASSUME אנו מודיעים לאסמבלר את הכתובת ההתחלתית של התוכנית
ושל הנתונים.
הכוונה נתונים היא לתאי הזיכרון, המשתנים, בהם התוכניתת
משתמשת. כאשר הגדרנו מקטע נתונים נפרד, אנו מודיעים לאסמבלר ש-DS יכיל
את כתובת ההתחלה של מקטע הנתונים.
כמו כן נשנה את ההוראות בתחילת התוכנית. עד כה כתבנו:
נחליף זאת כעת בקוד הבא:
פקודות אלו מציבות באוגר DS את כתובת ההתחלה של הנתונים.
נשים לב: ASSUME רק מודיעה לאסמבלר כיצד עומדים לנהוג, איך איננה
מציבה בפועל באוגרים ערכים באוגרים.
תוכנית כללית תראה כעת כך:
STA SEGMENT STACK
DB 100H DUP (0)
STA ENDS
DATA SEGMENT
; ...
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,
DS:DATA, SS:STA
START:
MOV AX, DATA
MOV DS, AX
; End the program
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
העלמות הזין של יוסי הקוסם
יוסי יקיריאם הזין שלך נעלם בתוך מחסנית קסמים אני מקווה לפחות שאתה לא מתכוון לחבר את המחסנית לרובה דרוך
בשמחה שמעון הטבח