راستی سوالتون راجع به cpu موبایل، میتونی مدل گوشیهای مورد نظرتو همراه با کلمه ی embedded processors روی گوگل سرچ بکنی، ولی اصولا برنامه نویسی موبایل برای سیمبین با ++C هستش و برای بقیه جاوا، مد اسمبلی ندیدم من...
راستی سوالتون راجع به cpu موبایل، میتونی مدل گوشیهای مورد نظرتو همراه با کلمه ی embedded processors روی گوگل سرچ بکنی، ولی اصولا برنامه نویسی موبایل برای سیمبین با ++C هستش و برای بقیه جاوا، مد اسمبلی ندیدم من...
اين بخشو تا حالا نديده بودم. دروغ چرا يه مدت نبودم . ادامه بديد. منم اگه كاري ازم برومد انجام ميدم.
ممنون
![]()
ساختار یک برنامه ی اسمبلی:
در این بخش اول واحدهای حافظه رو بررسی میکنیم، بعدش بخش های یه برنامه ی اسمبلی رو.
واحد های حافظه:
انواع متغیر در برنامه نویسی اسمبلی؟ یعنی اسمبلی مثل زبان های سطح بالا انواعی مثل integer, boolean ,float و امثال اینا رو داره؟ نه!!!!!! این سوسول بازیا مال همون زبانای سطح بالاست!! تو اسمبلی شما یه سری حافظه داری که میتونی ازشون استفاده کنی. دو حالت داره، یا از حافظه های خود cpu استفاده میکنی که بهشون ثبات یا Register گفته میشه، یا از RAM استفاده میکنی.
استفاده از ثبات ها:
استفاده از ثبات ها خیلی آسونه، هر ثبات یه اسمی داره مثلا Ax و در 8086 ثبات ها 16 بیتی هستند، یعنی هر ثبات 16 تا خونه داره (زشته که بگیم خونه، از این به بعد میگم بیت!!) که توی اونا صفر یا یک ذخیره شده، شما حتی میتونید از هر نصفه ی یک ثبات جداگانه استفاده کنید، به این صورت که برای هر نصفه از یک ثبات اسم جدایی در نظر گرفته شده. مثلا ثبات Ax دو قسمت داره، 8 بیت سمت راست یا کم ارزش که با اسم Al مشخص میشه و 8 بیت سمت چپ یا پر ارزش که Ah نام داره. در مبحث قبل عکسش هست. شما به عنوان برنامه نویس میتونید با هر کدوم از اینا کار کنید. مثلا بنویسید MOV Ax,240 این دستور عدد 240 رو میذاره توی Ax یعنی محتوای Ax به این شکل میشه:
0000000011110000پس 16 بیت به این صورت با صفر و یک پر میشه. میتونید بنویسید MOV Ah,12 در این صورت 8 بیت پرارزش تر 00001100 خواهد شد و 8 بیت کم ارزش مقداری که قبلا توش بوده رو حفظ میکنه.
استفاده از RAM:
برای استفاده از RAM باید برای یک قسمت از اون اسم انتخاب کنی و با اون اسم اون قسمت رو فراخوانی کنی. پس شما یه متغیر مثلا x رو تعریف میکنی و بعد ظرفیتش رو مشخص میکنی.
انواع ظرفیت ها:
بایت ( Byte ): داده ای به طول 8 بیت
کلمه ( Word ): داده ای به طول 16 بیت
کلمه ی مضاعف ( Double Word ): داده ای به طول 32 بیت
کلمه ی چهارگانه ( Quad Word ): داده ای به طول 64 بیت
پاراگراف ( Paragraph ): داده ای به طول 128 بیت
به عنوان مثال با نوشتن دستور زیر متغیر x به طول 8 بیت با مقدار اولیه 12 تعریف میشه:
x DB 12قسمت اول اسم متغیر هستش که نوشته شده x ، قسمت دوم ظرفیت رو مشخص میکنه، DB مخفف Defined Byte هستش یعنی متغیر ما 8 بیت ظرفیتش هست. قسمت آخر هم یک مقدار اولیه به متغیر انتساب میده، در اینجا ما 12 رو انتساب دادیم. میتونستیم بنویسم:این دقبقا همون قبلیه ولی مقدار اولیه انتساب نمیده. ? یعنی مقدار اولیه نامشخص.
? x DB
بخش های یک برنامه ی اسمبلی:
هر برنامه ی اسمبلی اقلا 3 تا بخش یا Segment داره،
بخش اول: بخش پشته ( Stack Segment ) :
در این بخش برنامه نویس مشخص میکنه که ظرفیت پشته چقدر باشه.
مهم: یه نفر راجع به این که پشته چی هست توضیح بده.
بخش دوم: بخش داده ( Data Segment ):
در این بخش متغیر ها تعریف میشوند. مثلا دستور x DB 12 رو باید تو این بخش بنویسید.
بخش سوم: بخش کد ( Code Segment ):
کدها یا همون دستورات برنامتون رو باید تو ای بخش بنویسید.
با یک مثال برنامه نویسی به زبان اسمبلی رو شروع میکنیم!
یه کم روی این برنامه فکر کنید، بگید این برنامه چه کار میکنه. اولین کسی که گفت جایزه داره! تو مبحث بعد خط به خط این برنامه رو توضیح خواهم داد.
STKSG SEGMENT PARA STACK 'STACK'
DW 100 DUP(?)
STKSG ENDS
DATASG SEGMENT PARA PRIVATE 'DATA'
X DW 15
Y DW 25
Z DW ?
DATASG ENDS
CODESG SEGMENT PARA PRIVATE 'CODE'
MAIN PROC FAR
ASSUME DSATASG, CS:CODESG, SS:STKSG
MOV AX, DATASG ;Move the start address
MOV DS, AX ;of data segment to DS
MOV AX, X
ADD AX, Y
MOV Z, AX
MOV AX, 4C00H ;Terminate program
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN
Last edited by Blacklord; 27-03-2008 at 02:56.
هر جا ابهامی هست بگید تا توضیح بدم.
در ضمن آقایون من یه مدت نبودم، شرمنده. اگر چند نفر پیدا بشن کمک کنند منو در ادامه ی تاپیک خیلی عالی میشه!! من به شدت سرم شلوغ شده نمیرسم زود به زود آپدیت کنم.
آقا جان دستت درد نکنه . همین طوری ادامه بده .
منم اسمبلی رو تازه شروع کردم بعدشم ولش کردم چون اصلا نمی تونستم با asm یا tasm برنامه ها رو اجرا کنم الان یادم نمی یاد چرا
ولی این برنامه هه توی پست 23 به x مقدار 15 می ده به y مقدار 25 بعد هم جمعشون رو می ریزه توی z
مثل اینکه خیلی یادم رفته چون نمی فهمم شما چرا توی SS صد تا علامت سوال گذاشتی یا آخرش با این 100 تا ؟ چیکار کردی
مرسی برای آموزش منم این تاپیک رو تازه دیدم
جوابتون درسته، اگه یه نفر بتونه بگه اصولا پشته چیه معلوم میشه که 100 تا ؟ برای چیه، 2 روز وقت میدم!!!
پشته فضاییه برای ذخیره موقت داده ها برای افزایش سرعت دسترسی برنامه به اونا
Ss هم آدرس شروع پشته است
پس با این حساب با Dw 100 Dup(?) شما فضایی به اندازه 100 کلمه یعنی 1600 بیت تعریف کردین
اون علامت سواله معنیش این نیست که 100 تا ؟ گذاشتیم یعنی فضا تعریف نشده است و خالیه
اگه زیاد غلط گفتم برای این بودش که هیچ جا پیدا نکردم این خط یعنی چی!!!
من درباره Para توی کتاب خوندم اما نفهمیدم یعنی چی می شه شما توضیح بدی؟
به علت وحشتناک شدن وضعیت تحصیلی تا آخر این ترم آپدیت نمیکنم!!!
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)