ABA


"צריך כיוון באסמבלי - ניתוח DWORD במכונת 16 ביט"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #14466 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 14466
TheBinary

   16:45   02.12.07   
אל הפורום  
  צריך כיוון באסמבלי - ניתוח DWORD במכונת 16 ביט  
 
   ערכתי לאחרונה בתאריך 02.12.07 בשעה 17:05 בברכה, TheBinary
 
המכונה שלנו מוגבלת ל-16 ביט (אוגרי AX - AH AL, BX - BH BL וכו')
יודעת לעבוד רק עם BYTE / WORD
יש לי בזיכרון מערך בגודל 1024 סיביות:
arr db 6h,3h,Ah,2h,1h,Bh,Fh,0h,6h,2h,8h,Ah,
3h,Dh,1h,Eh,6h,3h,Ah,2h,1h,Bh,Fh,0h,6h,2h,8h,Ah,3h,
Dh,1h,Eh,6h,3h,Ah,2h,1h,Bh,Fh,0h,6h,2h,8h,Ah,3h,Dh,
1h,Eh,6h,3h,Ah,2h,1h,1h,Fh,0h,6h,2h,1h,Ah,3h,Dh,1h,
Fh,6h,3h,Ah,2h,1h,Bh,Fh,0h,6h,2h,Ch,Ah,3h,Dh,1h,Eh,
6h,3h,Ah,2h,1h,Bh,Fh,0h,6h,2h,8h,Ah,3h,Bh,1h,Eh,6h,
3h,Eh,2h,1h,Bh,Fh,0h,6h,8h,8h,Ah,3h,Dh,1h,Eh,6h,7h,
Ah,2h,1h,Bh,Fh,0h,6h,2h,8h,Ah,3h,Dh,1h,Eh
צריך להסתכל עליו כאל מערך דו מימדי של 32 על 32.
צריך לכתוב פרוצדורה שמקבלת את הכתובת למערך, ומספר n
והיא צריכה להחזיר את מספר השורה הקטן ביותר בה יש רצף של n סיביות שהן 1
אם אין - להחזיר 0. (מספור השורות מ-1 עד 32)

הבעיה היא למצוא את הרצף.
אם היה לי אוגר EAX זה היה ממש פשוט, לעשות ROL ולבדוק CARRY FLAG.
אבל המכונה מוגבלת ל-16 ביט.
Net_Boy הציע לי פתרון של להעביר חצי שורה ל-AX וחצי שורה ל-BX ולכתוב קוד שיודע לעבוד עם 2 האוגרים אחד אחרי השני - אבל אז אחד המרצים בקורס ענה לי את התשובה הבאה:

ואם שורה במערך היא באורך 9 בתים ומעלה, מה הפתרון?
יש פתרון שמטפל בזה נכון בכל מספר בתים.

ולהזהר מהמלכוד של איחסון מלים בשיטת
little-endian
ב- 8086

הוא אמר שיש פתרון שמטפל בזה בצורה נכונה בכל מספר ביטים כלשהו (אני מניח שהכוונה שלו היתה לביטים ולא בתים), ובגלל זה הפתרון של להעביר חצי שורה ל-AX וחצי ל-BX לא הכי יעיל שיש.

אפשר כיוון?
תודה

ד"א - ה-little-endian זה אחד הדברים הכי מרגיזים שיש!


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  הצלחתי, עשיתי ככה: TheBinary 03.12.07 03:31 1
  מה זה אוגר EAX ? -ReDevil- 03.12.07 13:09 2
     אוגר EAX הוא האוגר ב-32 ביט TheBinary 03.12.07 15:40 3
         תודה על המידע -ReDevil- 03.12.07 19:32 4

       
TheBinary

   03:31   03.12.07   
אל הפורום  
  1. הצלחתי, עשיתי ככה:  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 03.12.07 בשעה 03:31 בברכה, TheBinary
 
זה ברור שיש לולאה שרצה 32 פעמים (פעם אחת על כל ביט בשורה הנוכחית)
מספר הביט הנוכחי נשמר ב-CH (הלולאה רצה על CH, מ-0 עד 1F)
בהתחלה העברתי את החצי הראשון של השורה ל-DX, ועבדתי עליו
וברגע ש-CH שווה ל-F (שזה אומר שסיימתי לעבוד על החצי הראשון של השורה)
אני מעביר את החצי השני של השורה לתוך DX וממשיך כרגיל בלולאה.
ככה זה נותן לי שקיפות מבחינת הקוד (הספירה של הרצף נמשכת כרגיל)
ולא מבזבז יותר מדי אוגרים.


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

   13:09   03.12.07   
אל הפורום  
  2. מה זה אוגר EAX ?  
בתגובה להודעה מספר 0
 
   למדתי טיפה אסמבלר אבל לא נתקעתי באוגר כזה.

ולמה אי אפשר לעשות ROL ולבדוק Carry Flag גם עם מערכת שמוגבלת ל 16 BIT?


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

   15:40   03.12.07   
אל הפורום  
  3. אוגר EAX הוא האוגר ב-32 ביט  
בתגובה להודעה מספר 2
 
   ערכתי לאחרונה בתאריך 03.12.07 בשעה 15:41 בברכה, TheBinary
 
לא לומדים את זה באסמבלי בתיכון / קורסים בסיסיים באוניברסיטה כי הוא לא חלק מ-8086
היום בכלל, במ"ה 64 ביט עם מעבדים תומכים יש כבר אוגרים כמו RAX, RBX וכו' שזה 64 ביט (QUADWORD)

גודל השורה במערך הוא 32 ביט, ו-ROL יסובב לך מקס' WORD שזה 16 ביט. אז אתה יכול לסובב מקסימום חצי שורה. וככה עשיתי בערך


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

   19:32   03.12.07   
אל הפורום  
  4. תודה על המידע  
בתגובה להודעה מספר 3
 
  


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

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

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



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