saalek110
Well-Known Member
http://burks.brighton.ac.uk/burks/language/asm/asmtut/asm1.htm
براي شروع اين سايت خيلي خوبه.
مبتدي شروع كرده و با شكل و مثالهاي ساده شروع كرده.
------------------------------------------------------------------
از همين سايت:
خانواده 80x86 با 8086 در سال 1981 شروع شد و جديد ترين عضو آن پنتيوم است كه 13 سال بعد در 1994 عرضه شد.
همه آنها بكوارد كامپتيبل هستند.(يعني قبلي را پشتيباني مي كنند.) و با اضافه شدن فيچورهايي به آنها. و سريع تر از قبلي ها.
امروزه كامپيوترهاي كمي با 8088 و 8086 كار مي كنند. و آنها خيلي از دور خارج و كند هستند.
تعداد 286 ها و 386 ها هم روز به روز كم مي شوند. حتي 486 هم با پنتيوم جايگزين شده.
پنتيوم پرو و mmx based باعث سرعت و توانايي بالا مي باشد.
== = = = = = = =
اعداد در كامپوتر به شكل باينري ذخيره مي شوند. يعني مبناي 2 .
يك بيت ساده ترين حالت اطلاعات است كه دو حالت صفر و يك دارد.
يك نيبل NIBBLE عبارت است از 4 بيت.
يعني 0000 .
پس نيبل نيم بايت است. (بايت 8 بيت است.)
پس نيبل تا عدد 15 (در مبناي 2 ميشه 1111 ) را ظرفيت دارد.
و اين رقم بيس مبناي هگزا دسيمال است. (مبناي 16) .
مبناي 16 خوبي اش در فهم راحت تر آن نسبت به مبناي 2 است. يعني به نوعي آشتي مبناي 2 و مبناي 10 .
اعداد هگزا دسيمال از 1 تا f ادامه مي يابند. (عدد 10 ميشه a و 11 ميشه b و الي آخر)
در انتهاي اعداد هگزا دسيمال يك h مي گذارند. و اگر با حرف شروع بشه قبلش يك 0 (صفر) مي گذارند.
يك بايت 8 بيت است. يا 2 نيبل.
بايت حداكثر 255 مي تواند بشود. خودتان 2 را به توان 8 برسانيد.مي فهميد. از صفر تا 255 ميشه 256 حالت.
بزرگترين عدد يك بايت همان ff است.
يك word يا كلمه دو بايت است. مي تواند تا ffff برود. 65536 ميشه.
= = = == ==
رجيسترها:
Registers are a place in the CPU where a number can be stored and manipulated.
تعريفش را قبلا گفتيم. اين هم متن انگليسي آن.
در 386 ها ما دو نوع رجيستر داريم. 8 بيت و 16 بيت.
و در مدلهاي بالاتر 32 بيتي هم داريم.
رجيسترها 4 نوعند:
رجيسترهاي با مقاصد عمومي.
رجيسترهاي سگمنت.
رجيسترهاي ايندكس.
رجيسترهاي پشته.
رجيسترهاي استك (stack = پشته) و رجيسترهاي سگمنت بعدا گفته ميشه. بقيه را شرح مي دهد.
General Purpose Registers:
شامل: ax bx cx dx
كه 16 بيتي يعني يك word (كلمه) است. و آنها قابل بخش به دو نيمه هستند.(همه رجيسترها قابل نصف كردن نيستند) پس مثلا ax را ميشه به ah و al تقسيم كرد و bx cx dx هم به همين ترتيب قابل نصف كردن هستند. H يعني high و l يعني low .
در كامپيوترهاي بالاي 386 ما داراي رجيسترهاي 32 بيتي با همين نامه هستيم كه يك حرف E اولشان دارند. مثل EAX EBX ECX EDX .
شما مي توانيد AH و AL و AX و EAX را جداگانه براي منظورهايي بكار بريد.چون اين جا حساسه جمله انگليسي اش را بكار مي برم. منظورش را اگر كسي توانست شرح دهد بفرمايد.
You can use AL, AH, AX and EAX separately and treat them as separate registers for some tasks.
رجيسترهاي SI, DI, SP and BP هم مي تواند به عنوان رجيستر همه منظوره بكار رود.
ولي أنها وظايف خاص خود را دارند و به دو نيمه هم اسپليت(شكسته) نمي شوند. (مترجم: اون قبلي ها يعني AX BX CX DX هم وظايف خاص دارند. )
Index Registers:
رجيسترهاي SI DI IP (3 رجيستر) اولي سورس ايندكسه اسمش دومي دستينيشن ايندكسه اسمش و سومي اينستراكشن پوينتر.
در بالاي 386 داريم: EDI and ESI
رجيستر BX هم به عنوان ايندكس استفاده ميشه.
منظور از ايندكس چيه؟اينجا نگفته ولي مثلا اگر بخواهيم چيزي را به جايي منتقل كنيم اين DI و SI نشانه روي مي كنند. از RAM به AX مثلا. بعدا بايد بحث بشه.
رجيستر IP هم خاص است چون شماره خطي از برنامه را كه بايد اجرابشه را در خود نگه مي دارد. يا دستكاري نكنيد يا بدانيد چه كار مي كنيد چون CPU دستور بعدي را از روي IP پيدا مي كند و اگر اشتباه باشه CPU يعني گم ميشه توي RAM و يعني كامپيوتر شما ديگه كامپيوتر بشو نيست و قاطي مي كنه.
Stack registers:
رجيسترهاي BP and SP هستند.
رجيسترهاي پشته است و اينجا گفته بعدا مي گيم.
Segments and offsets:
در 8088 ديده بودند كه فقط به يك مگا بايت حافظه بايد پوشش بدهند. و براي اين پوشش 20 بيت أدرس لازم بوده.خودتان حساب كنيد. ببينيد 2 به توان 20 چند ميشه. حدود يك مگا ميشه.
ولي اون موقع رجيسترها 16 بيتي بودند. (كمبود امكانات)
پس اومدند دو رجيستر را براي آدرس دهي استفاده كردند. يكي را نامش را سگمنت و ديگري را نامش را آفست گذاشتند.
مثل كوچه و پلاك براي ram . ولي چطوري 32 بيت (يعني 2 رجيستر) شد 20 بيت؟
جواب اين كه
OFFSET = SEGMENT * 16
SEGMENT = OFFSET / 16 (the lower 4 bits are lost)
يعني 4 بيت از يك رجيستر را با ضرب انداختند.
اگه كسي توضيح بيشتر خواست بگه.
مثال:
DS stores the Segment and SI stores the offset.
اين دو با هم كار مي كنند.
رجيسترهااي سگمنت اينها هستند:
CS, DS, ES, SS
در بالاي 386 اينها هم هستند:
FS and GS
آفست ها اين ها هستند:
BX, DI, SI, BP, SP, IP
In 386+ protected mode, ANY general register (not a segment register) can be used as an Offset register. (Except IP, which you can't manipulate directly).
The Stack:
وقتي 6 رجيستر براي كارها استفاده مي شوند چطور كارها ممكن است؟ جواب: پشته محلي براي ذخيره و بازيابي اطلاعات است.
پشته مثل تپه است هر چيزي را اول بگذاريد آخر بايد برداريد.
چيزي كه دوم بگذاريد آدرسش كوچك تر است از آنكه اول گذاشته ايد يعني پشته رو به پايين رشد مي كند.
اين بود يك قسمت از 7 قسمت آموزش اين سايت. اميدوارم بتوانم بقيه اش را هم ادامه دهم. بعضي قسمتها نياز به شرح بيشتر دارد كه اگر كسي خواست توضيح بدهم. ولي فكر كنم خود سايت در ادامه آموزش گفته.
براي شروع اين سايت خيلي خوبه.
مبتدي شروع كرده و با شكل و مثالهاي ساده شروع كرده.
------------------------------------------------------------------
از همين سايت:
خانواده 80x86 با 8086 در سال 1981 شروع شد و جديد ترين عضو آن پنتيوم است كه 13 سال بعد در 1994 عرضه شد.
همه آنها بكوارد كامپتيبل هستند.(يعني قبلي را پشتيباني مي كنند.) و با اضافه شدن فيچورهايي به آنها. و سريع تر از قبلي ها.
امروزه كامپيوترهاي كمي با 8088 و 8086 كار مي كنند. و آنها خيلي از دور خارج و كند هستند.
تعداد 286 ها و 386 ها هم روز به روز كم مي شوند. حتي 486 هم با پنتيوم جايگزين شده.
پنتيوم پرو و mmx based باعث سرعت و توانايي بالا مي باشد.
== = = = = = = =
اعداد در كامپوتر به شكل باينري ذخيره مي شوند. يعني مبناي 2 .
يك بيت ساده ترين حالت اطلاعات است كه دو حالت صفر و يك دارد.
يك نيبل NIBBLE عبارت است از 4 بيت.
يعني 0000 .
پس نيبل نيم بايت است. (بايت 8 بيت است.)
پس نيبل تا عدد 15 (در مبناي 2 ميشه 1111 ) را ظرفيت دارد.
و اين رقم بيس مبناي هگزا دسيمال است. (مبناي 16) .
مبناي 16 خوبي اش در فهم راحت تر آن نسبت به مبناي 2 است. يعني به نوعي آشتي مبناي 2 و مبناي 10 .
اعداد هگزا دسيمال از 1 تا f ادامه مي يابند. (عدد 10 ميشه a و 11 ميشه b و الي آخر)
در انتهاي اعداد هگزا دسيمال يك h مي گذارند. و اگر با حرف شروع بشه قبلش يك 0 (صفر) مي گذارند.
يك بايت 8 بيت است. يا 2 نيبل.
بايت حداكثر 255 مي تواند بشود. خودتان 2 را به توان 8 برسانيد.مي فهميد. از صفر تا 255 ميشه 256 حالت.
بزرگترين عدد يك بايت همان ff است.
يك word يا كلمه دو بايت است. مي تواند تا ffff برود. 65536 ميشه.
= = = == ==
رجيسترها:
Registers are a place in the CPU where a number can be stored and manipulated.
تعريفش را قبلا گفتيم. اين هم متن انگليسي آن.
در 386 ها ما دو نوع رجيستر داريم. 8 بيت و 16 بيت.
و در مدلهاي بالاتر 32 بيتي هم داريم.
رجيسترها 4 نوعند:
رجيسترهاي با مقاصد عمومي.
رجيسترهاي سگمنت.
رجيسترهاي ايندكس.
رجيسترهاي پشته.
رجيسترهاي استك (stack = پشته) و رجيسترهاي سگمنت بعدا گفته ميشه. بقيه را شرح مي دهد.
General Purpose Registers:
شامل: ax bx cx dx
كه 16 بيتي يعني يك word (كلمه) است. و آنها قابل بخش به دو نيمه هستند.(همه رجيسترها قابل نصف كردن نيستند) پس مثلا ax را ميشه به ah و al تقسيم كرد و bx cx dx هم به همين ترتيب قابل نصف كردن هستند. H يعني high و l يعني low .
در كامپيوترهاي بالاي 386 ما داراي رجيسترهاي 32 بيتي با همين نامه هستيم كه يك حرف E اولشان دارند. مثل EAX EBX ECX EDX .
شما مي توانيد AH و AL و AX و EAX را جداگانه براي منظورهايي بكار بريد.چون اين جا حساسه جمله انگليسي اش را بكار مي برم. منظورش را اگر كسي توانست شرح دهد بفرمايد.
You can use AL, AH, AX and EAX separately and treat them as separate registers for some tasks.
رجيسترهاي SI, DI, SP and BP هم مي تواند به عنوان رجيستر همه منظوره بكار رود.
ولي أنها وظايف خاص خود را دارند و به دو نيمه هم اسپليت(شكسته) نمي شوند. (مترجم: اون قبلي ها يعني AX BX CX DX هم وظايف خاص دارند. )
Index Registers:
رجيسترهاي SI DI IP (3 رجيستر) اولي سورس ايندكسه اسمش دومي دستينيشن ايندكسه اسمش و سومي اينستراكشن پوينتر.
در بالاي 386 داريم: EDI and ESI
رجيستر BX هم به عنوان ايندكس استفاده ميشه.
منظور از ايندكس چيه؟اينجا نگفته ولي مثلا اگر بخواهيم چيزي را به جايي منتقل كنيم اين DI و SI نشانه روي مي كنند. از RAM به AX مثلا. بعدا بايد بحث بشه.
رجيستر IP هم خاص است چون شماره خطي از برنامه را كه بايد اجرابشه را در خود نگه مي دارد. يا دستكاري نكنيد يا بدانيد چه كار مي كنيد چون CPU دستور بعدي را از روي IP پيدا مي كند و اگر اشتباه باشه CPU يعني گم ميشه توي RAM و يعني كامپيوتر شما ديگه كامپيوتر بشو نيست و قاطي مي كنه.
Stack registers:
رجيسترهاي BP and SP هستند.
رجيسترهاي پشته است و اينجا گفته بعدا مي گيم.
Segments and offsets:
در 8088 ديده بودند كه فقط به يك مگا بايت حافظه بايد پوشش بدهند. و براي اين پوشش 20 بيت أدرس لازم بوده.خودتان حساب كنيد. ببينيد 2 به توان 20 چند ميشه. حدود يك مگا ميشه.
ولي اون موقع رجيسترها 16 بيتي بودند. (كمبود امكانات)
پس اومدند دو رجيستر را براي آدرس دهي استفاده كردند. يكي را نامش را سگمنت و ديگري را نامش را آفست گذاشتند.
مثل كوچه و پلاك براي ram . ولي چطوري 32 بيت (يعني 2 رجيستر) شد 20 بيت؟
جواب اين كه
OFFSET = SEGMENT * 16
SEGMENT = OFFSET / 16 (the lower 4 bits are lost)
يعني 4 بيت از يك رجيستر را با ضرب انداختند.
اگه كسي توضيح بيشتر خواست بگه.
مثال:
DS stores the Segment and SI stores the offset.
اين دو با هم كار مي كنند.
رجيسترهااي سگمنت اينها هستند:
CS, DS, ES, SS
در بالاي 386 اينها هم هستند:
FS and GS
آفست ها اين ها هستند:
BX, DI, SI, BP, SP, IP
In 386+ protected mode, ANY general register (not a segment register) can be used as an Offset register. (Except IP, which you can't manipulate directly).
The Stack:
وقتي 6 رجيستر براي كارها استفاده مي شوند چطور كارها ممكن است؟ جواب: پشته محلي براي ذخيره و بازيابي اطلاعات است.
پشته مثل تپه است هر چيزي را اول بگذاريد آخر بايد برداريد.
چيزي كه دوم بگذاريد آدرسش كوچك تر است از آنكه اول گذاشته ايد يعني پشته رو به پايين رشد مي كند.
اين بود يك قسمت از 7 قسمت آموزش اين سايت. اميدوارم بتوانم بقيه اش را هم ادامه دهم. بعضي قسمتها نياز به شرح بيشتر دارد كه اگر كسي خواست توضيح بدهم. ولي فكر كنم خود سايت در ادامه آموزش گفته.