PDA

View Full Version : مبتدی: می خوام یه تابع بنویسم که دو تا عدد 32 بیتی رو بگیره بعد اوناره با هم جمع کنه،و حاصل روreturn کنه



mahvand
پنج شنبه 15 مهر 1389, 17:27 عصر
من می خوام یه تابع بنویسم که دو تا عدد 32 بیتی رو بگیره بعد اوناره با هم جمع کنه،و حاصل روreturn کنه،
یعنی وقتی عددارو میگیره به زبان سی باشه بعد اونارو پاس بده به تابع و اونهارو با دستورات اسمبلی با هم جمع کنه؟(ترکیب سی و اسمبلی)
خواهش می کنم کمک کنید:اشتباه::گریه:

tdkhakpur
پنج شنبه 15 مهر 1389, 17:41 عصر
یعنی وقتی عددارو میگیره به زبان سی باشه بعد اونارو پاس بده به تابع و اونهارو با دستورات اسمبلی با هم جمع کنه؟(ترکیب سی و اسمبلی)




WORD sum(WORD num1, WORD num2)
{
WORD value;
asm{
mov bx, num1
add bx, num2
mov value, bx
}
return value;
}

tdkhakpur
پنج شنبه 15 مهر 1389, 17:48 عصر
در ضمن برای 32 بیت به شکل زیر عمل کنید


DWORD sum(DWORD num1, DWORD num2)
{
DWORD value;
asm{
mov ebx, num1
add ebx, num2
mov value, ebx
}
return value;
}

mehrsa akbari
جمعه 16 مهر 1389, 17:31 عصر
سلام من منظور شما رو از dword نمی فهمم میشه به جای اون از long int یا unsigned int دقیقا به جای همون dwordهااستفاده کرد؟؟؟؟

Mahmood_M
جمعه 16 مهر 1389, 18:16 عصر
DWORD درواقع همون unsigned long هست و WORD هم همون unsigned short ، نوع DWORD 4 بایت هست و برای گرفتن یک عدد 32 بیتی مناسبه و نوع WORD هم دو بایته و برای گرفتن یک عدد 16 بیتی مناسبه

tdkhakpur
شنبه 17 مهر 1389, 12:30 عصر
میشه به جای اون از long int یا unsigned int دقیقا به جای همون dwordهااستفاده کرد؟؟؟؟
بستگی داره این مقاذیر را با کدوم پلت فرم استفاده کنید مثلا در پلت فرم 32 بیتی برای int مقدار 32 بیت یا 4 بایت در نظر گرفته میشه در صورتی که برای داس 16 بیتی این مقدار 2 بایت یا 16 بیت هست.
میتوانید نوع short را به جای int استفاده کنید.
ولی در مورد unsigned باید این تعریف برای متغییر قرار داده شود تا به هنگام Mov شدن مقدار در جیستر اشکال کامپایلر از شما گرفته نشود در صورتی که اصل مسئله که قرار دادن مقدار در رجیستر هست با توجه به اندازه رجیستر درست هست.پس


dword = unsigned long
word = unsigned short