פקודות הזזה SHL ו SHR באסמבלי - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

פקודות הזזה SHL ו SHR באסמבלי


bdoron

Recommended Posts

אני לומד קצת את הנושא הזה והייתי רוצה לוודא שאני הבנתי נכון, הפקודות עובדות רק על byte וכאשר אנחנו מזיזים את הביטים הביט האחרון שיוצא החוצה עובד לדגל הנשא

זאת אומרת אם יש לי byte כזה : 10000000 ועשיתי SHL של אחד אז בעצם תוכן הbyte הוא אפס ודגל הקרי קיבל את ערך הביט האחרון ולכן הוא אחד

צורת הפקודות הבנתי שהיא כזאת SHL D,CL זה אומר שכל אופרנד יעד שאני בוחר צריך להיות בגודל byte ואם אני רוצה להזיז צעד אחד אני רושם SHL D,1 אם אני רוצה להזיז יותר מביט אחד אני צריך להשתמש באופרנד CL , הבנתי שאני יכול להשתמש רק באופרנד CL ולא באופרנד אחר, שימוש באופרנד אחר יגרום לשגיאת קומפילציה.

קישור לתוכן
שתף באתרים אחרים

קודם כל אתה צריך לציין באיזה אסמבלי מדובר (במקרה הזה אני אניח שזה 8086 לפי השאלה הזהה שפירסמת).

אז ככה: הפקודות עובדות גם על מילים (ב-, מילה = 16 ביט).

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

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

אם רוצים לעשות שיפט ליותר מביט אחד אז באמת חייבים להשתמש ב-CL, שהוא בעצם הבייט הנמוך של הרגיסטר CX.

(נדמה לי שבמהדורות חדשות יותר ניתן להשתמש ב-immediate במקום ברגיסטר CL; זה אומר למשל SHL AX, 2.)

בנוסף, קוד אסמבלי לא מקמפלים (!), המילה הזאת שמורה לשפות עיליות. אפשר לקרוא לזה תרגום.

וסתם כמה דברים שכדאי לדעת:

  • אם בעקבות SHL (של ביט אחד) המספר החליף סימן (כלומר ה-MSB החדש שונה מהערך שב-CF), אז הדגל של ה-overflow יידלק.
  • בהנחה שהמספר הוא unsigned:
    SHL של n ביטים זה בעצם להכפיל את המספר ב-2GCEoTA.gif.
    SHR של n ביטים זה בעצם לחלק את המספר ב-2GCEoTA.gif.
    כל זה נכון בהנחה שאין carry (לגבי חילוק, ניתן בכל מקרה להסתכל על זה כאילו במקרה של שבר התוצאה מעוגלת לאפס. לפעמים זה שימושי).

קישור לתוכן
שתף באתרים אחרים

אתה רוצה להגיד לי שאני יכול לעשות shift על כתובת בזיכרון? לדוגמא SHL [0001],1 ? אבל אז אני לא יודע על איזה גודל אני עובד בדיוק , לא? כאילו אם אתה אומר משהו נכון אז אני חושב שהפקודה צריכה להתבצע בצורה הבאה... shl byte ptr[0001],1 או word ptr

אני צודק? או ש SHL [0001],1 זה חוקי ואם כן אז איך הוא יודע אם הוא צריך להזיז שמאלה בית או מילה

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...