שאלה

טיקטי1

New member
שאלה

יש לי את התוכנית הבאה:
#include<windows.h> #include<iostream> using namespace std; void main() { int i, num; long time; cout << "Enter the number of times: "; cin >> num; cout << endl; cout << "Enter the time diffrence: "; cin >> time; cout << endl; for(i=0;i<num;i++) { _asm { mov al,1 mov dx,378h out dx, al } Sleep(time); } cout << "Done" << endl; system("PAUSE"); }​
הבעיה היא שקוד האסמבלי לא רץ או לא עושה את מה שהוא צריך מישהו יודע במקרה איך לגרום לזה לפעול? ומצורף אחד השרשורים שהיו בנושא תודה מראש
 

DecayCell

New member
מה הוא אמור לעשות?

אני לא בטוח, אבל נדמה לי שבקוד אסמבלי שמוטמע בתוכנית ++C צריך לכתוב מספרים הקסדצימליים כך: 0x378.
 

vinney

Well-known member
לא

CPP הוא פשוט משאיר את הקוד כמו שהוא, הintermidiate של CPP זה אסמבלי.
 

galh

New member
לעבוד עם DOS ולא חלונות.

ושאני אומר DOS, אני מתכוון ל-DOS ולא לחלון console. אם אני לא טועה, הקוד באסמבלי מנסה לשלוח "1" לפורט של הפרללי (מדפסת/LPT1). הדבר זה לא חוקי תחת חלונות בתוכנית רגילה מאחר שחלונות מונע ממך גישה ישירה לזכרון.
 

kasa3

New member
אמממ...

במקום להשתמש ב asm inline אתה יכול להשתמש בפונקיות מוכנות שיש לך בסי, תראה את הפונקצייה outp( Port_Address , Data ); זה נמצא ב header file windows.h שכבר הכללת בשביל פונקציית ההשהייה אני רואה... בעקרון מה שעשית באסמבלי בפנים זה שליחת הערך 1 לכתובת 378, בפונקצייה תעשה זאת כך: outp(0x378 , 1); וזה יבצע את אותה הפעולה... ולזה שמעליי, בווינדוס אפשר לגשת בתכנות לפורטים אבל רק בווינדוסים לא מבוססים NT , כללומר ווינדוסים 95, 98 , me , ו 3.11 :) בווינדוסים מבוססים NT למנהם, NT/WIN2000/XP צריך איזה קובץ dll שיאפשר את הגישה תוך כדי תכנות, לא זוכר איך קוראים לקובץ הזה נדמה לי ש IOPORT.DLL אפשר למצוא דרך גוגל...
 

galh

New member
אולי לא הייתי מספיק ברור...

אפשר לגשת לפורטים וחברים בתכנות לחלונות, אבל לא ישירות דרך קוד אסמבלי, אלא דרך ה- API שחלונות נותנת לך.
 
למעלה