אסמבלי משתלבת

VBMaster2

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

שלום! אני מנסה לכתוב את התוכנית הבאה ב Turbo C++ <div dir=ltr align=left> #include <iostream.h> void Goto_XY( int x,int y); main() { Goto_XY(5,5); cout << "a"; return 0; } void Goto_XY(int x,int y) { asm { mov ah,2 mov dl,byte ptr x mov dh,byte ptr y int 10h } } </div> אך כאשר אני מנסה להפעיל את התוכנה הוא מציג לי שגיאה, למה?
 

gilad_no

New member
מריץ תחת חלונות?

אני לא בטוח שאתה יכול לקרוא לפסיקה הנ"ל ישירות (אלא אם תעבוד בREAL MODE).
 

VBMaster2

New member
אני מריץ תחת חלונות XP

אי אפשר לריץ תחת חלונות? גם לא 98?
 

selalerer

New member
תראה, תבין, תשמע...

מה שאתה מנסה לעשות היה טוב ויפה תחת DOS, מערכות הפעלה אחרות רוצות שתפנה אל שגרות שלהן בכדי לשלוט בהתקנים, בכדי שיוכלו לפקח עליך. בעיקרון כשאתה כותב תוכנית שכזאת תחת Borlan Turbo C++ הקובץ שיצא אמור באופן אוטומאטי לרוץ תחת אמולטור של DOS, אבל אתה יכול להוריד dosbox או אמולטור אחר בכדי להריץ את התוכניות כפי שהיו רצות תחת DOS. או שאולי יש שגיעה אחרת ואני סתם מקשקש לך בשכל.
 

MotiAd

New member
מה שהוא עושה בסדר...

כי תחת וינדוס הוא עושה אמולציה יפה או לא למודים של 10H אפילו ל-VESA פעם הוא עשה לי אמולציה אז אין לו בעייה.
 

selalerer

New member
איזה MOV ?? אלה עם הbyte ptr??

כי אם כן יכול להיות שזאת הבעיה שלו. תנסה לקלות unsigned char במקום int ואולי זה יספיק.
 

VBMaster2

New member
אני לא חושב שזו הכוונה...

הקומפילר טוען שMov לא מוגדר בכלל
 

shaiis7

New member
אני לא יודע אם זה יעזור אבל...

אולי במקום asm{} תרשום לפני כל שורת קוד באסמבלר asm אני מפעיל ככה אסמבלי ב turbo c וזה עובד מצויין.
 

VBMaster2

New member
כן, עכשיו הוא מפעיל את הקוד

אבל הוא לא מעביר את הסמן לנקודה 5,5 :(
 

selalerer

New member
אנ יודע מה הבעיה....

יש איזה באג מעצבן בבלוק של asm אתה חייב לשים את הסלסל הפותח מיידית אחרי הasm ולא בשורה חדשה. יש לזה איזה סיבה אבל אני לא זוכר אותה. זה צריך להיראות ככה:
asm{ mov ah,2 mov dl,byte ptr x mov dh,byte ptr y int 10h }​
תנסה את זה ככה, אני חושב שזה אמור לפתור את הבעיה.
 
למעלה