سلام من چند خط کد اسمبلی مربوط به یک سیستم عامل Open Source دارم که نمی فهمم چکار میکنه, کسی هست که زبان اسمبلی بلد باشه؟ ممنون میشم اگه راهنماییم کنید.
سلام من چند خط کد اسمبلی مربوط به یک سیستم عامل Open Source دارم که نمی فهمم چکار میکنه, کسی هست که زبان اسمبلی بلد باشه؟ ممنون میشم اگه راهنماییم کنید.
سلام(درخواست خیلی فوری)
اگه میشه در مورد مطالب زیر اطلاعاتی بهم بدید:
1)بررسی دستورات mov,xchg,lea ومحدودیت های آنها
2)بررسی ساختار پردازنده های pentium 4
3)بررسی مجموعه دستورات پردازنده pentium 4
4)ررسی وقفه های 21h,10h وتوابع آنها
درضمن برنامه ای (به زبان اسمبلی)میخوام که نام ونام خانوادگی کسی رو گرفته ودر صفحه نمایش چاپ کند.
ممنون میشم.
Last edited by rezapazahr; 05-04-2007 at 23:53.
سلام دوست عزیز.
در زبان اسمبلی برنامه به چند بخش مجزا تقسیم میشه که به هر بخش یک سگمنت میگن. هر سگمنت باید اول تعریف بشه که تعریف شامل نام و نوع اون میشه. دستورات تعریف پشته در سگمنت اون یعنی سگمنت پشته قرار میگیره. این دستور میگه یه سگمنت پشته به نام sseg با سایز 32 بایت در نظر بگیر.
دوست عزیر، دستور lea همون mov offset هست یعنی ادرس متغیر رو در عملوند اول که یک ثبات هست میگذارد. دستور xchg مقدار دو عملوند رو با هم عوض میکنه. دستور mov هم که دستور کپی هست. این دو وقفه هم بیشتر واسه عملیات پاک کردن صفحه نمایش و انتقال مکان نما و ورود و خروج اطلاعات بکار میرن.
کدهاتو بنویس
این فروم که بیشترش سوال شده تا جواب. منم دارم از دست اسمبلی چل می شم والقصه. دوستان اگر از نرم افزار emu8086
استفاده کنید هم ادیتور دارید هم کامپایلر هم همه چی. کلا خوش بخت می شید به جز موارد زیر
من الان 5 تا سگمت به برنامه معرفی کردم فقط برای امتحان مطالب تئوری خوب خدا رو شکر ارور نمی ده اما تو یه سگمنت یه دستور رو جا می ندازه؟ ممکنه مشکل از امولاتور باشه؟ چون با سون کار می کنم الان نمی تونم از masm استفاده کنم.
اما کلا فهمیدم هر چی تو کتاباست خیلی هم جدی نیست. مثلا همون خط
db 64 dup(?);f
stseg segment
db 64 dup(?)
stseg ends
dtseg segment
;add your data here
data1 db 90h
dtseg ends
cdseg segment
data db 90h
ends
eseg segment
mov cx,10h
mov dx,20h
sub cx,dx
push cx
push cx
ends
panj segment
add ax,4589h
mov bx,ax
ends
اینکه هر جایی هم که می خوام متغیر تعریف می کنم خیلی جالبه. فقط مشکلش اینه که رجیستر DS باید مقدارش با مقدار شروع سگمنت داده پر بشه که من با این کد نمی تونم حالا بازم امتحان می کنم. اونوقت این امولاتور یه هلپ داره که یه بخشش سیستم عامل بنویسید و ایناست. من ازونم سر در نیاوردم.
یه مدل هست به اسم .model small که بصورت زیره و کدنویسی توش خیلی راحت تره(دنگو فنگش هم کمتره)نوشته شده توسط sarzabita [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اون خطکد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدdb 64 dup(?);f منظورتون از اینکه مهم نیست چیه؟ تعریف یه آرایه...
هرجایی نمیشه متعیر تعریف کردا ... تا جایی که من emu کار کردم
Last edited by حمید جان; 10-12-2012 at 21:35.
کتاب مزیدی در قسمت استک همیشه آرایه تعریف می کنه که تو امولاتور نیازی بهش نیست. البته من فهمیدم
masm و tasm
خیلی هم حساسند و بیشتر از 4 تا سگمنت نمیشه تعریف کرد. من تو امولاتور وسط کد ها متغیر تعریف کردم هیچی نشد. راستی برای خواندن عدد از ورودی باید از چه وقفه و تابعی استفاده کرد؟ من هر چی می گردم همش با کاراکتر کار می کنه.
سلام......////
*******************
*************************کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشید!
سلام
من به دنبال یک روشی هستم که بشه یه برنامه اسمبلی را مبهم کرد یعنی ظاهر برنامه را یه کم تغییر بده ولی برنامه همان کار قبلی را انجام بده.در زیر چند روش را که تاکنون بهشون دست پیدا کردم عرض می کنم ولی من به دنبال یه روش جدیدتر هستم.ممنون میشم اگه دوستان کمکم کنند.
روش های یافت شده:
استفاده از دستورات زباله(دستورات بدون اثر در برنامه) در لابه لای دستورات برنامه
جابه جایی ثبات های استفاده شده در برنامه با ثبات های استفاده نشده
جابه جایی کد برنامه و پیگیری رفتار و روال اصلی برنامه با دستورات پرش
جابه جایی زیرروال های برنامه
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)