שאלה באסמבלי :)

mynickname1

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

שלום,
משהו יודע איך אני נגשת לתא במחרוזת?
כלומר נגיד שאני אמורה לשלוח לפונקציה מחרוזת...ובתוך הפונקציה ( אחרי שדחפתי את ה OFFSET של המחרוזת ל STACK) אני רוצה לגשת לתא הראשון במחרוזת..
משהו יודע איך עושים כזה דבר?

תודה לעונים(:)
 

פרסאוס

New member
זה תלוי באסמבלר ובמעבד

אני אניח שאת מדברת על מעבדי אינטל מהסדרה 8086,
שהם המעבדים הכי נפוצים למחשוב שרתים/תחנות.

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

linux gas:
mov $output,%eax
mov (%eax),%bl

MS MASM
lea eax,output
mov bl,[eax]

מה שהקוד הנ"ל עושה הוא להעביר את כתובת המערך Output לאוגר EAX.
ואת תוכן הבית הראשון שמוצבע ע"י eax לתוך BL.
אחר כך אפשר לשנות את התוכן של BL ואז להחזיר אותו באופן הפוך למערך.
חשוב לזכור כי אין אפשרות (נכון להיום) לשלוח מידע בין הזיכרון לזיכרון וחייבים לעבור "דרך" אוגר.

אם את מתחילה ללמוד, יתכן ומלמדים אותך אסמבלי "של פעם" שם לא מתייחסים לאוגרים כמו EAX.
אפשר לכתוב במקום רק AX.

אין שום שימוש לאסמבלי ישן במערכות ההפעלה של היום. לא לינוקס מק או חלונות.
במערכות 32 ביט, שמות האוגרים AX,BX,CX וכו מתחילים ב E כדי לציין שמדובר ב32 ביט.
גם שיטת המיעון שונה (אבל זה כבר עניין לספר).
במערכות 64 ביט, שהן הרוב היום, האוגרים הכללים מתחילים בR ולא בE.
בנוסף אינטל הוסיפו הרבה מאוד אוגרים חדשים מה ששינה את הצורה שבה פונקציות נקראות.
 
למעלה