רגיסטרים
הפרמטרים יוצבו ברגיסטרים.
השיגרה מקבלת פרמטר ברגיסטר מסוים ומחזירה ברגיסטר כלשהו.
יתרונות השיטה:
חסרונות השיטה:
- לא ניתן להעביר הרבה פרמטרים
בעזרת שיטה זו.
- השיטה גורמת ל"בזבוז"
של אוגרים.
הפונקציה שהדגמנו קודם, PUTCHAR, משתמשת ברגיסטר DL
כפרמטר.
העברת
פרמטרים על ידי מחסנית
ניתן להעביר לשגרה נתונים באמצעות המחסנית. דרך זו היא הדרך
המקובלת ביותר על ידי שפות עיליות להעברת פרמטרים לפונקציות.
לפני שקוראים לשגרה, התוכנית דוחפת הפרמטרים שלה על
המחסנית, ורק לאחר מכן נעשית הקריאה לשגרה.
יתרונות השיטה:
- מודולריות.
- תמיכה ברקורסיה.
חסרונות השיטה:
- איטית ביחס לעבודה עם רגיסטרים.
דוגמא 1:
נשכתב את הדוגמא שהצגנו קודם, ונגרום שהפעם הפרמטר עבור PUTCHAR
יעבור דרך המחסנית ולא כרגיסטר.
STA SEGMENT STACK
DB 20 DUP (0)
STA ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:STA
START:
MOV AX, 'A'
PUSH AX
CALL PUTCHAR
MOV AX, 'B'
PUSH AX
CALL PUTCHAR
MOV AX, 'C'
PUSH AX
CALL PUTCHAR
; End the program
MOV AX, 4C00H
INT 21H
PUTCHAR:
POP BX
POP DX
MOV AH, 2
INT 21H
PUSH BX
RET
CODE ENDS
END START
דוגמא 2:
התוכנית הבאה כוללת פונקציה בשם PUTS אשר מקבלת מצביע אל מחרוזת
דרך המחסנית, ומדפיסה אותו על המסך.
DATA SEGMENT
STR1 DB 'Hello, World$'
DATA ENDS
STA SEGMENT STACK
DB 100H DUP (0)
STA ENDS
CODE SEGMENT
ASSUME CS:CODE,
DS:DATA, SS:STA
START:
MOV AX, DATA
MOV DS, AX
MOV CX, OFFSET STR1
PUSH CX
CALL PUTS
; End the program
MOV AX, 4C00H
INT 21H
PUTS:
POP BX
POP DX
MOV AH, 9
INT 21H
PUSH BX
RET
CODE ENDS
END START
העלמות הזין של יוסי הקוסם
יוסי יקיריאם הזין שלך נעלם בתוך מחסנית קסמים אני מקווה לפחות שאתה לא מתכוון לחבר את המחסנית לרובה דרוך
בשמחה שמעון הטבח