שאלה באסמבלי

WolfHead

New member
שאלה באסמבלי

מה ההבדל בין הקוד הזה:
LEA BX, var MOV [BX], 10h​
לבין הקוד הבא:
LEA BX, var MOV BYTE PTR [BX], 10h​
כי התוצאה יוצאת אותו דבר, אם כן, אז למה משתמשים ב BYTE PTR?
 

voguemaster

New member
תלוי בכמה גורמים

הרעיון של שימוש ב-BYTE PTR או WORD PTR וכד' הוא כדי להגיד לאסמבלר על איזה סוג של טיפוס אנחנו מצביעים. לדוגמא הקוד הבא:
MOV DWORD PTR [EBX], 0​
יכניס 0 לתוך משתנה בגודל DWORD, כלומר ארבעה בתים של 0. באותו אופן אפשר גם להגיד שרוצים להצביע על משתנה בגודל של BYTE אחד. תמיד רצוי להגיד איזה גודל של טיפוס זה אחרת האסמבלר מבצע ניחוש בהתאם לגודל הטיפוס שאתה כותב (במקרה זה הוא מניח שזה BYTE). גם יש הבדלים בגישה בין TASM ל-MASM בהקשר הזה. אני לא בטוח איזה מבין השניים היה מניח שבגלל שאנחנו כותבים בעזרת BX אנחנו כותבים משתנה בגודל WORD. כתוב בזהירות!
 

voguemaster

New member
זה אוגר

כמו שיש לך את BX שהוא אוגר של 16 סיביות, יש את EBX שהוא האוגר השלם של 32 סיביות. רק לידע כללי, BX הוא החלק התחתון של EBX.
 
למעלה