עבור לתוכן

[ASM]מעבר מסגמנט יחיד לכמה סגמנטים מבחינת מחסנית

Featured Replies

פורסם

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

השאלה שלי נוגעת לגישה לפרמטר כשהוא מצביע כפול (לערך), במודל קטן הקוד הוא -


mov si,[bp+XX]
mov si,[si]
mov reg,[si]

במודל גדול -


mov es,[bp+XXX+2]
mov si,[bp+XXX]
mov si,es:[si]
mov reg,es:[si]

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

פורסם
  • מחבר

הצלחתי להבין איפה הייתה הבעיה:

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


mov es,[bp+XXX+2]
mov si,[bp+XXX]
mov si,es:[si]
mob es,es:[OLD si]
mov reg,es:[si]

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים