ABA


"אסמבלר| כמה שאלות, אשמח לעזרה"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10772 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10772
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   11:30   10.07.12   
אל הפורום  
  אסמבלר| כמה שאלות, אשמח לעזרה  
 
טוב הצטברו לי כמה בעיות שלא הצלחתי לפתור.
1. קיבלתי מC דרך המחסנית LONG INT, הוא תופס 4 בתים, הכנסתי אותו לEAX, איך אני יכול לשלוף רק את הצד השמאלי של EAX, כלומר לא את AX?
2. ההפך, קיבלתי שני INT ואני רוצה להכניס כל אחד מהם לחלק אחר של LONG INT, אז בעצם אני רוצה לעשות את ההפך, להכניס לשני החלקים של EAX, ואז זו אותה בעיה, או שאפשר להחזיר דרך AX עם DX?
3. אני מנסה למצוא כמה מקום פנוי נותר במחסנית שלי, ניסיתי לחסר 256 מBP נוכחי, זה לא עבד כ"כ יש דרך אחרת?
4. כשאני עובר למודל LARGE, באיזה מקרים אני צריך להתייחס לסגמנט כשאני מקבל משתנה ממחסנית? רק כשאני מקבל מצביע, או לכל ערך?
5. במודל LARGE, איך אני קורא לפונקציה שנמצאת בC (שקיבלתי את המיקום שלה כמובן) כלומר, מין הסתם אני צריך להתייחס גם לסגמנט, אבל אני לא מצליח להגיע למצב שזה עובר קומפילציה, אז אני עושה משהו לא נכון..

אשמח לכל עזרה אפילו הכי קטנה.. תודה רבה מראש!


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  פתרונות: CaTz 10.07.12 15:40 1
     תודה רבה, asco88  10.07.12 15:49 2
         אני לא מכיר אז... :| CaTz 10.07.12 15:57 3
             הבנתי, עזרת לי מאוד :) asco88  10.07.12 15:59 4

       
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   15:40   10.07.12   
אל הפורום  
  1. פתרונות:  
בתגובה להודעה מספר 0
 
  

1.shr eax, 16
ויש לך ב
ax
את החלק השמאלי

2. אם הבנתי נכון,
יש לך שני
int
נגיד ב
eax, ebx
אתה רוצה לקחת את החלק הימני של
ebx
ואת החלק השמאלי של
eax

נניח נכניס ל
edx

mov edx, 0
mov dx, bx ; העתיק את החלק הימני
and eax, 0xFFFF0000 ; מנקה את החלק הימני של eax
or edx, eax ; מעתיק את החלק השמאלי

3.
גודל המחסנית שלך קבועה?
נניח, 256
אז פשוט,
X = ebp-esp (כתובות במחסנית הולכות וקטנות עם כל הכנסה)
ולכן המספר הזה מציין כמה תפוס יש לך בבטים!
תעשה
256-X
תקבל מקום מפנוי

4. לא מכיר מה זה מודל
large,
תסביר למה אתה מתכוון, אולי אני מכיר את זה בשם אחר...



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   15:49   10.07.12   
אל הפורום  
  2. תודה רבה,  
בתגובה להודעה מספר 1
 
לגבי 2, אני מגיע מסיטואציה של INT שנמצאים בAX וBX לצורך העניין, אף אחד מהם לא נמצא בחלק השמאלי של אוגר כלשהו, או שלא הבנתי נכון.
לגבי המודל, אני מתכוון אם אתה מחליף את .MODEL SMALL בהתחלה בLARGE, אני לא יודע על עוד שם אחר.

תודה רבה !


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   15:57   10.07.12   
אל הפורום  
  3. אני לא מכיר אז... :|  
בתגובה להודעה מספר 2
 
   לגבי 2,

הפתרון דומה למה שרשמתי לך לפני כן,
יש לך שניint (ד"א זה לא יהיה INT, כי INT מיוצג ע"י 32 ביט, כלומר 4 ביית וAX מכיל רק 16...אבל בכל מקרה)
יש לך בax מספר
וbx מספר

אתה רוצה להעביר את ax לנמוך של edx וbx לגבוה שלו...


mov edx, 0 ; לאפס אותו
mov dx, bx
shl edx,16 ;להזיז לגבוהים
mov dx, ax

פשוט :]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   15:59   10.07.12   
אל הפורום  
  4. הבנתי, עזרת לי מאוד :)  
בתגובה להודעה מספר 3
 
תודה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net