ABA


"בעייה בשילוב קוד אסמבלי עם C (ב-VS .NET):"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #6879 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 6879
Dudenland

   14:17   06.09.03   
אל הפורום  
  בעייה בשילוב קוד אסמבלי עם C (ב-VS .NET):  
 
   כאמור, אני עובד ב-VS.NET, במצב win32.

יש לי מצביע למבנה (struct) מסויים, מסוג (* usigned char).
אני צריך להעביר את הכתובת שלו כפרמטר לפונקצית BIOS מסוימת, כך שהכתובת תתקבל ב-es:di.
כשעבדתי ב-16bit, עשיתי כך:


_asm
{
mov bx, seg MyStruct
mov es, bx
mov di, offset MyStruct
}

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

עכשיו, כשאני מנסה להדר את זה תחת win32, אני מקבל שגיאה על השורה עם ה-operand size conflict :offset.

מה לעשות?

כמו-כן, איך אני נקראות הפונקציות של VS.NET, שמבצעות את אותן פעולות של הפונקציות inportb ו-outportb של Borland?


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  אין לך גישה ישירה לחומרה. dryice 06.09.03 20:26 1
     הבנתי... Dudenland 07.09.03 16:06 2

       
dryice

   20:26   06.09.03   
אל הפורום  
  1. אין לך גישה ישירה לחומרה.  
בתגובה להודעה מספר 0
 
   מערכת הפעלה אמיתית(לא DOS) מגנה על החומרה,
המעבד נמצא בPROTECTED MODE, וזה מגביל אותך, מגישה
ישירה.
בכלל כל מבנה הזכרון של segment וoffset לא תקף בסביבת 32ביט,
הזכרון שטוח.
משתמשים באוגרי 32ביט, eax,ebx וכו.
לכתוב אסמבלי בסביבת חלונות זה מאוד שונה. היכולת שלך לקרוא
לפסיקות BIOS מאוד מוגבלת. ובכלל מאוד סביר שמערכת ההפעלה
החליפה הרבה מהפסיקות בBIOS בשגרות משלה, ההתנהגות של הפסיקות
לאו דווקא נשמרת.

ובכלל לנסות לכתוב אסמבלי בסביבת .NET שהיא לכאורה פורטבילית
נראה לי כמו רעיון רע.

DRYICE


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

   16:06   07.09.03   
אל הפורום  
  2. הבנתי...  
בתגובה להודעה מספר 1
 
   אכן מגדירים (model flat.).

תראה, אני בניתי "מנוע-גרפי" שפועל באמצעות VESA, ולכן אני משתמש באסמבלי... וחשבתי לשדרג אותו ל-bit-32.
הסתכלתי על כמה דוגמאות, וראיתי שמשתמשים באינטראפט 31h... במקומות שאני הייתי משתמש באינטראפט 10h...
חיפשתי בהרבה מקומות tutorial על VESA ב-bit-32... ולא מצאתי...
ב-VBE3 שלהם כתוב בצורה שמתאימה ל-bit-16, אך כתובות הערות גם למתכנתי win-32... בכל מקרה, זה לא עובד כראוי...

יש לך מקור כלשהו לתיכנות בקשר לזה (תקשורת עם ה-BIOS בקשר ל-VESA) ???


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

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

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



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