הגדרת משתנים

ניתן להגדיר משתנים בתוך מקטע התוכנית (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 CS:CODE, DS:CODE

נכתוב:

     ASSUME CS:CODE, DS:DATA

בהוראה ASSUME אנו מודיעים לאסמבלר את הכתובת ההתחלתית של התוכנית ושל הנתונים.

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

כמו כן נשנה את ההוראות בתחילת התוכנית. עד כה כתבנו:

     MOV AX, CODE
     MOV DS, AX

נחליף זאת כעת בקוד הבא:

     MOV AX, DATA
     MOV DS, AX

פקודות אלו מציבות באוגר 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

מאת: שמעון הטבח

העלמות הזין של יוסי הקוסם

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

בשמחה שמעון הטבח
מאת: הילה

si

היי, איך הכנסתם ערך כלשהו למערך? כשעשיתם MOV ARR2[SI], AL. למה si נמצא בסוגריים? מה הוא אומר?
מאת: יוסי הקוסם

העלמות זין

נעלם לי הזין מקסם שהשתבש (דחפתי את הזין למחסנית קסם וניראה לי שלא העברתי את הזין לטיפוס מילה הזיו שלי ללא ברית מילה אז זה השתבש)
תעזרו בבקשה!!!
שיתוף:
| עוד