اصول اساسی برنامه نویسی به زبان اسمبلی

Slides:



Advertisements
Similar presentations
Registers of the 8086/ /2002 JNM.
Advertisements

1 x86’s instruction sets. 2 Instruction Set Classification  Transfer Move  Arithmetic Add / Subtract Mul / Div, etc.  Control Jump Call / Return, etc.
Introduction to 8086 Microprocessor
Princess Sumaya Univ. Computer Engineering Dept. د. بســام كحـالــه Dr. Bassam Kahhaleh.
Department of Computer Science and Software Engineering
ACOE2511 Assembly Language Arithmetic and Logic Instructions.
The 8086 Assembly Programming Data Allocation & Addressing Modes
Gursharan Singh Tatla 21-Nov-20101www.eazynotes.com.
8086 : INSTRUCTION SET By, Pramod Sunagar Assistant Professor
Princess Sumaya University
9-1 ECE 424 Design of Microprocessor-Based Systems Haibo Wang ECE Department Southern Illinois University Carbondale, IL x86 Instructions Part.
The 8086 Microprocessor The 8086, announced in 1978, was the first 16-bit microprocessor introduced by Intel Corporation 8086 is 16-bit MPU. Externally.
An Introduction to 8086 Microprocessor.
Flag Control instructions CLC clear carry flag CF = 0 STC set carry flag CF= 1 CMC complement carry flag [CF] CF.
Types of Registers (8086 Microprocessor Based)
Arithmetic Flags and Instructions
Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 4 Department of Computer Science and Software Engineering University of Wisconsin-Platteville.
Processing String Data and Binary Data (continue)
Click to add Title Comunicación y Gerencia Click To add Subtitle Click to add Text Fundamentals of Assembly Language.
(-133)*33+44* *33+44*14 Input device memory calculator Output device controller Control bus data bus memory.
Review of Assembly language. Recalling main concepts.
3.4 Addressing modes Specify the operand to be used. To generate an address, a segment register is used also. Immediate addressing: the operand is a number.
6-4 CPU-Registers, effective address General registers vs Segment registers Computer Studies (AL)
Introduction to Microprocessors Chapter 3. Programming Model (8086)  Shows the various internal registers that are accessible to the programmer.
The Assemble, Unassemble commands of the debugger: U Command for converting machine code language source Equivalent machine code instructions Equivalent.
Intel MP Organization. Registers - storage locations found inside the processor for temporary storage of data 1- Data Registers (16-bit) AX, BX, CX, DX.
ΜComputer Structure μProcessor Memory Bus System I/O Ports.
Assembly language programming
Introduction to assembly programmıng language
Format of Assembly language
Chapter Nov-2010
Microprocessor Systems Design I
16.317: Microprocessor System Design I
Introduction to 8086 Microprocessor
8086 Microprocessor.
ADDRESSING MODES.
Microprocessor Systems Design I
EE3541 Introduction to Microprocessors
EE3541 Introduction to Microprocessors
INSTRUCTION SET.
Microprocessor and Assembly Language
Assembly IA-32.
INSTRUCTION SET.
Assembly Language Programming Part 2
ADDRESSING MODES.
Intel 8088 (8086) Microprocessor Structure
4.2 Arithmetic Instructions
INSTRUCTION SET OF 8086 PAWAN KUMAR SINGH.
اصول اساسی برنامه نویسی به زبان اسمبلی
Defining Types of data expression Dn [name] expression Dn [name]
Symbolic Instruction and Addressing
X86’s instruction sets.
Introduction to Assembly Language
Chapter 4: Instructions
שפת סף וארכיטקטורה של מעבד 8086
ارايه دهنده : حسن عسكرزاده
Intel 8088 (8086) Microprocessor Structure
8086 Registers Module M14.2 Sections 9.2, 10.1.
CS-401 Computer Architecture & Assembly Language Programming
Microprocessor Lab CSL1543 0:0:2
Morgan Kaufmann Publishers Computer Organization and Assembly Language
Symbolic Instruction and Addressing
CS 301 Fall 2002 Computer Organization
תכנות בסיסי בשפת סף פרק 5 מצגת 3.
Symbolic Instruction and Addressing
Computer Architecture CST 250
UNIT-II Assembly Language Programs Involving Logical
Chapter 6 –Symbolic Instruction and Addressing
CNET 315 Microprocessor & Assembly Language
Chapter 8: Instruction Set 8086 CPU Architecture
Presentation transcript:

اصول اساسی برنامه نویسی به زبان اسمبلی مو لف : Richard C. Detmer مترجمین : هاشمی اصل - مشحون نام درس : زبانهای ماشین و برنامه سازی سیستم

فهرست مطالب فصل اول : نمایش داده ها در کامپیوتر فصل اول : نمایش داده ها در کامپیوتر فصل دوم : قسمت های یک سیستم کامپیوتری فصل سوم : استفاده از اسمبلر فصل چهارم : دستورالعملهای اساسی فصل پنجم : انشعاب و حلقه فصل ششم : روال ها فصل هفتم : عملیات رشته ها فصل هشتم : سایر حالت های آدرس دهی فصل نهم : دستکاری بیت ها فصل دهم : وقفه و ورودی / خروجی فصل یازدهم : پردازش اسمبلی فصل دوازدهم : ماکرو ها و اسمبلی شرطی فصل سیزدهم : مثال نمونه

نمایش داده ها در کامپیوتر فصل اول نمایش داده ها در کامپیوتر

فهرست مطالب فصل اول نمایش داده ها در کامپیوتر اعداد دودویی و شانزده شانزدهی کد های کارکتری نمایش مکمل 2 برای اعداد صحیح علامت دار

نمایش داده ها در کامپیوتر در زبانهای سطح بالا نگران اینکه داده ها در کامپیوتر چگونه نمایش داده میشوند نیستیم ولی در زبان های اسمبلی بایستی بفکر چگونگی ذخیره داده باشیم و اغلب با کار تبدیل داده ها از یک نوع به نوع دیگر مواجه می باشیم.

اعداد دودویی و شانزده شانزدهی حافظه های کامپیوتر فقط می تواند ارقام 0 یا یک را در خود ذخیره نماید که به آنها بیت گفته میشود. در سیستم دودوئی اعداد از بیت ها تشکیل شده اند.

اعداد دودویی و شانزده شانزدهی اعداد شانزدهی از ارقام 0 تا 15 تشکیل شده اند. برای راحتی، ارقام 10 تا 15 را A تا F نشان داده می شود.

مثال : 1011 سیستم دودوئی شبیه سیستم دهدهی است با این تفاوت که ارقام از سمت راست به چپ به جای ارزش 1 ، 100 ، 1000 ، ....... ارزش 1 ، 2 ، 4 ، 8 ، ..... دارند. بنابرین 1011 در سیستم دودوئی معادل 11 می باشد.

مثال : 2f30 سیستم دودوئی شبیه سیستم دهدهی است با این تفاوت که ارقام از سمت راست به چپ به جای ارزش 1 ، 100 ، 1000 ، ....... ارزش 1 ، 16 ، 164 ، ..... دارند. بنابرین 2f30 در سیستم شانزدهی معادل 12080 می باشد.

تبدیل اعداد شانزدهی به دودوئی هر رقم در سیستم شانزدهی بوسیله چهار رقم در سیستم دودوئی قابل نمایش می باشد. در اسلاید بعد مثالی آورده شده است.

مثال : 0100 معادل 4 1110 معادل E برای تبدیل اعداد شانزدهی به دودوئی کافی است که به جای هر رقم ،چهار بیت معادل آن قرار داد. در اسلاید بعد مثالی آورده شده است.

مثال : 2AD5 معادل 0010101011010101 در سیستم دودوئی می باشد. برای تبدیل اعداد شانزدهی به دودوئی کافی است که به جای هر رقم ،چهار بیت معادل آن قرار داد. 2AD5 معادل 0010101011010101 در سیستم دودوئی می باشد.

تبدیل اعداد دودوئی به شانزدهی برای تبدیل اعداد دودوئی به شانزدهی ،ارقام عدد داده شده را از سمت راست به ترتیب به صورت گروههای چهار بیتی درآورده آنگاه معادل هر گروه در سیستم شانزدهی را جایگزین می نماییم. در اسلاید بعد مثالی آورده شده است.

مثال : عدد 1010011101 در سیستم دودوئی در نظر بگیرید. 0010 1001 1101 عدد 1010011101 در سیستم دودوئی در نظر بگیرید. 0010 1001 1101 D 9 2

کدهای کرکتری در کامپیوتر به حروف، ارقام، علامت ها کرکتر گفته می شود. به هر کرکتر یک کد هشت بیتی منحصر به فرد وابسته می شود که آنرا کد ASCII می نا مند.

کرکترهای قابل چاپ کد اسکی کرکتر 57 تا 48 9 تا 0 90 تا 65 Z تا A 122 تا 97 z تا a

نکته : کرکترهای قابل چاپ دارای کدهای 32 تا 126 می باشند. کرکترهای کنترلی دارای کدهای 0 تا 31 می باشند.

کرکترهای کنترلی کد اسکی کرکتر 27 ESC 10 CR 13 LF

نمایش مکمل 2 برای اعداد صحیح علامتدار اعداد منفی در کامپیوتر بصورت مکمل 2 نمایش داده می شوند. وقتی یک عدد به شکل مکمل دو نشان داده می شود تعداد بیت های مورد استفاده باید از قبل مشخص گردد.

نمایش مکمل 2 برای اعداد صحیح علامتدار اعداد دودویی دارای طول معین هستند: بایت کلمه : محدوده مجاز -32768 32767 کلمه مضاعف کلمه چهارتایی

روش محاسبه مکمل 2 یک عدد : عدد را بصورت دودوئی درآورده. آنرا به تعداد بیت های مشخص شده تبدیل نموده . سپس صفر ها را 1 و 1 ها را به صفر تبدیل نموده . نتیجه را با یک جمع می نماییم. در اسلاید بعد مثالی آورده شده است.

مقدار 11100111 در سیستم دودوئی نمایش عدد -26 می باشد. مثال : -26 11001 معادل 26 هشت بیتی نموده 00011001 صفرها را به یک و یک ها را به صفر تبدیل نموده 11100110 نتیجه را با یک جمع نموده 11100111 مقدار 11100111 در سیستم دودوئی نمایش عدد -26 می باشد.

جمع و تفریق اعداد مکمل دو پاسخ صحیح 2567 +467 --------------- 3034 0A07 +01D3 --------------- 0BDA

جمع و تفریق اعداد مکمل دو اگر از 1 اضافی سمت چپ صرفنظر شود: پاسخ صحیح 518 +(-80) --------------- 438 0206 +FFB0 --------------- 101B6

جمع و تفریق اعداد مکمل دو پاسخ غلط: سرریز 18459 +25690 --------------- 44185 483F +645A --------------- AC99

تشخیص سرریز در جمع سرریز رقم نقلی از بیت علامت رقم نقلی به بیت علامت نه بله

تفریق در شکل مکمل دو در کامپیوتر A-B بوسیله جمع A با مکمل دو B انجام میشود. اگر در جمع معادل نقلی وجود نداشته باشد، در تفریق رقم عاریه وجود دارد. اگر در جمع معادل سرریز وجود داشته باشد، در تفریق هم سرریز رخ داده است.

سیستمهای دیگر برای نمایش اعداد مکمل یک : هر بیت مکمل میشود دهدهی دودویی شده (BCD) : هر رقم بصورت دودویی در چهار بیت نمایش داده میشود (92)DEC = (1001 0010)BCD ممیز شناور

ممیز شناور بیت سمت چپ در اعدادمثبت صفر و در اعداد منفی یک است. عدد را بصورت بدون علامت در سیستم دودویی بنویسید. عدد را بشکل نماد علمی بنویسید. به توان عدد ثابت 127 را اضافه کنید. مانتیس را (بدون یک قبل از اعشار) در 23 بیت و با اضافه کردن صفرهایی به سمت راست آن بنویسید.

مثال ممیز شناور (78.375)10 = (1001110.011)2 نمادعلمی: (1001110.011)2 = 1.001110011 * 2^6 ممیز شناور(باینری): 0 10000101 00111001100000000000000 ممیز شناور( هگز) : 42 9C C0 00

فهرست مطالب فصل دوم حافظه اصلی واحد پردازش مرکزی اسامی و اهداف ثبات ها

قسمت های یک سیستم کامپیوتری فصل دوم قسمت های یک سیستم کامپیوتری

حافظه اصلی حافظه اصلی یک PC را می توان بصورت مجموعه ای از سگمنت ها در نظر گرفت. هر سگمنت بطول 64 کیلو بایت می باشد.

Memory نکات : آدرس شروع هر سگمنت مضرب 16 می باشد. آدرس شروع هر سگمنت در مبنای 16 به رقم صفر ختم می شود . آدرس هر سگمنت برابر اولین چهار رقم شانزدهی آدرس آن می باشد.

نکته : آدرس هر بایت از حافظه اصلی را می توان با سگمنت حاوی بایت مزبور و به دنبال آن افستی که از ابتدای سگمنت یاد شده در نظر گرفته می شود، آدرس دهی کرد. آدرس شروع سگمنت افست بایت مورد نظر

مثال : نماد 18A3 : 5B27 به بایتی که 5B27 بایت از اول سگمنت که از آدرس 18A30 شروع می شود، قرار دارد، اشاره می کند. 18A30 + 5B27 = 1E557

واحد پردازش مرکزی (CPU ) تراشه 8088 دارای 14 ثبات می باشد که هر کدام یک محل ذخیره سازی داخلی بوده و می تواند یک کلمه 16 بیتی را نگه دارد. دستورالعمل ها معمولا داده ها را بین این ثبات ها یا حافظه اصلی انتقال داده و یا عملیاتی را روی داده های ذخیره شده در ثبات ها یا حافظه انجام می دهند. تمام این ثبات ها دارای نام بوده و بسیاری از آنها دارای اهداف ویژه ای هستند.

اسامی و اهداف ثبات ها AX اکومولاتور، کاربرد همگانی، بایت بالایی برابر AH و بایت پایینی برابر AL BX کاربرد همگانی، بایت بالایی برابر BH و بایت پایینی برابر BL CX کاربرد همگانی، بایت بالایی برابر CH و بایت پایینی برابر CL

اسامی و اهداف ثبات ها DX کاربرد همگانی، بایت بالایی برابر DH و بایت پایینی برابر DL CS شماره سگمنت حافظه ای می باشد که دستورالعمل های اجرائی جاری در آنجا قرار دارد. DS سگمنت داده ها را می دهد. ES سگمنت فوق العاده را می دهد.

اسامی و اهداف ثبات ها SS سگمنت پشته را می دهد. SP اشاره گر پشته، افست بالای پشته در سگمنت پشته. BP اشاره گر مبنا، افست نقطه مراجعه (Point reference ) در سگمنت پشته.

اسامی و اهداف ثبات ها SI اندیس منبع، افست رشته کاراکتری منبع در انتقال رشته های کاراکتری. DI اندیس مقصد: افست رشته کاراکتری مقصد. IP اشاره گر دستور العمل ها، آفست دستور العمل بعدی در سگمنت کد برای دستیابی ثبات نشانه ها مجموعه ای از نشانه ها یا بیت های وضعیت.

ثبات نشانه بعضی از 16 بیت این ثبات برای نشان دادن نتیجه اجرای دستور العملها بوسیله دستور العمل های مختلف تغییر پیدا می کنند. هر کدام از این بیت ها را یک بیت وضعیت یا نشانه می گویند. اسامی برخی از این بیت ها عبارتند از : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF در اسلاید های بعد به توضیح هر یک از نشانه ها می پردازیم.

نشانه ها نشانه سرریزی OF flow Flag نشانه صفر Zero Flag ZF نشانه نقلی Flag Carry CF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF

نشانه ها نشانه کمکی Flag Auxiliary AF نشانه توازن Flag Parity PF نشانه علامت Flag Sign SF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF

نشانه ها نشانه جهت Flag Direct DF نشانه دام Flag Trap TF نشانه وقفه Flag Interrupt IF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF

سخت‌افزار PC: دستگاه‌هاي ورودي/خروجي يک دستگاه ورودي/خروجي معمولاً از سه تا هشت درگاه استفاده مي‌کند. اين آدرس‌ها از آدرس‌هاي حافظه معمولي متمايز مي‌‌باشند.

نرم‌افزار PC: نرم افزار به برنامه‌ها يا روال‌هايي که بوسيله سخت افزار اجرا مي‌‌شوند، اطلاق مي‌‌شود. دليل لزوم سفارش سيستم‌عامل اينست که: سيستم‌عامل از يک عده روال‌هاي نرم‌افزاري استفاده مي‌کند که به طور دائمي روي تراشه‌هاي ROM ذخيره مي‌شوند و اين روال‌ها از يک سيستم به سيستم ديگر تغيير مي‌کنند.

نرم‌افزار PC: ويرايشگرهاي متن يک ويرايشگر متن، برنامه‌اي است که مي‌توان به وسيله آن فايل‌هاي متني را روي ديسک ذخيره کرده يا آنها را تغيير داد. يک فايل متني مجموعه‌اي از کدهاي اسکي است. ويرايشگر EDLIN با توجه به اينکه يک فايل متني را به صورت مجموعه‌اي از خطوط در نظر مي‌گيرد، يک ويرايشگر خطي ناميده مي‌شود.

واژه‌پردازها، ويرايشگرهاي متني مي‌باشند که سرويس‌هاي اضافي براي قالب‌بندي و چاپ مستندات ارائه مي‌دهند.

مي‌توانيم براي آماده ساختن يک فايل کد منبع زبان اسمبلي از يک واژه‌پرداز استفاده کنيم، ولي يک واژه‌پرداز مي‌تواند اطلاعات قالب‌بندي را به همراه کدهاي اسکي متن مورد نظر در داخل يک فايل ذخيره کند. چنين اطلاعات اضافي ممکن است فايل مزبور را به عنوان يک فايل کد منبع زبان اسمبلي غيرقابل استفاده گرداند.

نرم‌افزار PC: مترجم يک زبان و پيونددهنده برنامه مترجم يک زبان برنامه‌اي است که کد يک منبع را به فرمي تبديل مي‌کند که مي‌تواند توسط کامپيوتر اجرا شود. مترجم‌ها را مي‌توان به سه گروه تقسيم نمود: مفسرها کامپايلرها اسمبلرها

مفسرها: يک برنامه منبع را به طور مستقيم ترجمه مي‌کنند. يک مفسر براي اجراي يک برنامه، يک خط از برنامه منبع را گرفته و دستورالعمل‌هاي واقع در خط مزبور را اجرا مي‌کند. برنامه‌هايي که تفسير مي‌شوند معمولاً به طور نسبي کند اجرا مي‌شوند. به کمک يک مفسر تغيير و اجراي يک برنامه به سرعت صورت مي‌گيرد.

کامپايلر: يک کامپايلر يک کد منبع را گرفته و کد هدف آن را که معمولاً متشکل از دستورالعمل‌هايي مي‌باشد که به وسيله CPU مورد نظر اجرا مي‌شوند، تشکيل مي‌دهد. کد هدف توليد شده به وسيله يک کامپايلر بايستي غالباً پيوند (link) داده شده و يا با کدهاي هدف ديگر ترکيب شود تا بتوان آن را به داخل حافظه اصلي بار کرده و اجرا نمود. برنامه‌هاي کامپايل شده خيلي سريعتر از برنامه‌هاي تفسير شده اجرا مي‌شوند

اسمبلر: يک اسمبلر خيلي شبيه کامپايلر مي‌باشد اما زبان اسمبلي را به زبان ماشين ترجمه مي‌کند. غالباً براي اجراي فايل‌هاي نتيجه، بايستي آنها را پيوند داد.

فصل سوم برنامه نویسی اسمبلر

فهرست مطالب فصل سوم برنامه ها و شکل کلی دستورات اسمبلی نامگذاری فیلدها کد منبع متغیرها در اسمبلی عملوند دستورالعملها حالتهای آدرس دهی

دستورالعملهای زبان اسمبلی هر دستور زبان اسمبلی در روی یک خط فایل کد منبع وارد میشود.یک خط می تواند حد اکثر 128 کرکتر داشته باشد. وجود خطوط خالي مجاز است و استفاده از آنها براي جدا کردن بخش هاي مختلف کد برنامه مفيد است.

دستورالعملهای زبان اسمبلی استفاده از توضیحات مناسب در برنامه مهم است. هر توضیحی با کرکتر ; شروع میشود و تا انتهای خط می تواند ادامه داشته باشد.

زبان اسمبلی دارای سه نوع دستورالعمل می باشد : دستورالعمل مانند ADD AX , 244 دستور اسمبلی مانند PAGE ماکرو نوعی دستورالعمل است که در آن تعدادی دستورالعملها، دستورات اسمبلی یا حتی ماکروهای دیگر قرار گرفته اند.

زبان اسمبلی دارای سه نوع دستورالعمل می باشد : دستورالعمل: به وسيله اسمبلر به کد هدف ترجمه مي‌گردد و اين کدها هستند که در زمان اجرا، اجرا مي‌گردند. دستور اسمبلر: به اسمبلر مي‌گويد که عملي را انجام دهد. و اغلب هيچ اثري بر روي کد هدف ندارد. ماکرو: نوعي دستورالعمل است که در آن تعدادي دستورالعمل‌ها، دستورات اسمبلر يا حتي ماکروهاي ديگر قرار گرفته‌اند.

شکل کلی دستورات اسمبلی يک دستورالعمل مي‌تواند شامل عناصر زير باشد: توضيحات عملوند(ها) نام دستورالعمل اسم یل برچسب [;comment] [operand(s)] mnemonic [name] يک کاربرد فيلم اسم آن است که مي‌توان آدرس دستورالعملي را به صورت نمادي بعد از اسمبل و لينک شدن برنامه با يک برچسب نشان داد. دستورالعمل‌هاي ديگر به راحتي مي‌توانند به دستورالعمل مزبور رجوع کنند. 61

شکل کلی دستورات اسمبلی مثال: L1 :MOV AX,BX ; AX:=BX L2 :INC AX L3: NOP اگر دستور اسمبلر باشد نیازی به : نیست 62

شکل کلی دستورات اسمبلی دستورالعمل‌هاي داراي برچسب مي‌توانند مقصد يک دستورالعمل پرش در زبان اسمبلي باشند. ساختار حلقه‌ در زبان اسمبلي وجود ندارد، اما مي‌توان حلقه‌ها را با استفاده از jmp و يا دستورالعمل‌هاي ديگر پياده‌سازي کرد. برچسب نمي‌تواند به وسيله عدد شروع شود. و اگر نقطه استفاده شود، حتماً بايد اولين کاراکتر باشد. بغيراز اعداد و نقطه، کاراکترهاي ديگر مي‌توانند در هر موقعيتي استفاده شوند. فقط 31 کاراکتر اول اسم مورد استفاده قرار خواهد گرفت. 63

قانونگذاری نامها در اسمبلی نامها در اسمبلی حداکثر 31 کاراکتر می باشند در استفاده از نامها در اسمبلی نکات زیر را می بایست در نظر داشت: 1- اسم نمی تواند با یک رقم شروع شود مانند 2LABEL 2- اسم نباید یکی از کلمات ذخیره شده اسمبلی باشد مانند MOV 3- در صورتیکه از نقطه در نام استفاده می شود می بایست در ابتدای نام استفاده شود مانند .LABEL

شکل کلی دستورات اسمبلی مقادير عددي در دستورات زبان اسمبلي، دهدهي فرض مي‌شوند و فقط زماني اين فرض کنار گذاشته مي‌شود که در برنامه منبع حالت ديگري خواسته شده باشد. يک مقدار شانزده شانزدهي بايد با يک عدد بغير از اعداد شانزده‌شانزدهي «a» تا «f»، شروع شود تا اسمبلر بتواند آنها را از يک اسم تشخيص دهد. 65

کد منبع کل برنامه از چهار قسمت تشکیل شده است. هر قسمت با دستور SEGMENT شروع و با ENDS ختم می گردد. Segment _ name SEGMENT . . Segment _ name ENDS دستور ENDS هيچ وقت داراي عملوند نيست؛ ولي دستور SEGMENT در بعضي کاربردها با عملوند به کار مي‌رود.

کد منبع آخرين دستور برنامه، دستور اسمبلر زير است: END start

کد منبع عملوند start مشخص کننده اولين دستور برنامه است که بايد اجرا شود. زماني که برنامه بار مي‌شود، سيستم‌عامل ثبات سگمنت کد را با سگمنتي که حاوي اين دستورالعمل است مقداردهي کرده و ثبات اشاره‌گر دستورالعمل‌ها، IP را با آفست اين دستورالعمل از ابتداي سگمنت مزبور شروع مي‌نمايد.

کد منبع سگمنت کد با دستور اسمبلر زير شروع مي‌شود: ASSUME CS:Code,DS:data اين دستور به اسمبلر مي‌گويد در صورتيکه يک دستورالعمل از يک برچسب که در داخل سگمنت کد قرار دارد استفاده بکند آدرس واقعي عملوند مزبور بايد به وسيله حاصلجمع ثبات سگمنت CS و آفست برچسب از ابتداي سگمنت کد محاسبه شود.

کد منبع سيستم‌عامل وظيفه مقداردهي اوليه ثبات سگمنت کد را به واسطه عملوند موجود در دستور END به عهده دارد ولي سيستم‌عامل همين کار را براي ثبات سگمنت داده DS انجام نمي‌دهد. اينکار را بايد برنامه‌نويس انجام دهد. شماره واقعي سگمنت داده تا زماني که برنامه بار نشده باشد قابل تعيين نيست، در آن زمان است که اين آدرس به وسيله DOS براي برنامه تعيين مي‌شود.

SEGMENT ها عبارتند از : STACK SEGMENT DATA SEGMENT EXTRA SEGMENT CODE SEGMENT

شکل کلی برنامه START STACK _ SEG SEGMENT PARA STACK ‘STACK’ اندازه پشته. STACK _ SEG ENDS DATA _ SEG SEGMENT PARA ‘DATA’ متغیر ها DATA _ SEG ENDS EXTRA _ SEG SEGMENT PARA ‘EXTRA’ متغیرهای رشته ها EXTRA _ SEG ENDS CODE _ SEG SEGMENT PARA ‘CODE’ دستورالعمل های برنامه CODE _ SEG ENDS END START

متغیرها دراسمبلی: تعریف متغیر در اسمبلی شامل نوع داده نام داده و اندازه داده می باشد دستورات تعریف متغیر در اسمبلی عبارتند از: DB برای تعریف یک بایت DW برای تعریف دو بایت DD برای تعریف چهار بایت DQ برای تعریف هشت بایت DT برای تعریف ده بایت مثال: X DB 35h تعریف متغیری با نام X با مقدار اولیه 35 هگزا دسیمال به طول یک بایت Y DW 569Fh تعریف متغیری با نام Y به طول دو بایت با مقدار اولیه 569Fh

عملوندهاي دستورات DB و DW

مثال : X DB 10 , 12 , 24 , 5 , 16 X یک آرایه پنج عنصری از نوع بایت می باشد.

مثال : Number1 DW ? Number2 DW ? هرکدام يک کلمه را در سگمنت داده ذخيره مي‌کنند. علامت سؤال به اسمبلر مي‌گويد که هيچ مقدار اوليه‌اي به اين دو کلمه نسبت داده نشود.

مثال : TABLE DB 100 DUP (‘*’) آرایه TABLE از نوع بایت و 100 عنصری ، با مقدار اولیه * عملگر DUP مي‌تواند براي توليد چندين بايت يا کلمه با مقادير اوليه معين و يا بدون مقدار اوليه، مورد استفاده قرار بگيرد. کاربرد اين عملگرد به DB، DW و دستورات اسمبلر ديگري که فضا را ذخيره مي‌کنند محدود مي‌شود.

عملوندها و دستورالعملها عملوندها و دستورالعملها عملوندها دارای انواع مختلف می باشند.بعضی ثابت بوده ، بعضی مشخص کننده ثباتهای CPU و برخی به حافظه رجوع می نمایند. بسیاری از دستورالعملها دارای دو عملوند می باشند.بطور کلی عملوند اول ، مقصد عملایت را تعیین می کنند و عملوند دوم منبع عملیات. مانند: MOV AX,BX در دستور اسمبلی بالا MOV دستورلعمل، AX عملوند اول و BX عملوند دوم می باشد.

مثال : MOV AL , ‘*’ که کرکتر * را جایگزین محتوی قبلی ثبات AL می شود.مقصد ثابت نمی تواند باشد ولی منبع می تواند ثابت باشد. دستور تک عملوندی INC BX دستور دو عملوندی MOV AX,8000h دستور بدون عملوند STC

حالت های آدرس دهی بلاواسطه ثبات مستقیم دارای مبنا دارای اندیس دارای مبنا و اندیس

حالتهای مختلف آدرس دهی بلاواسطه ثبات مستقیم حافظه غیر مستقیم ثبات غیر مستقیم دارای مبنا دارای اندیس دارای مبنا و اندیس 81

حالتهای مختلف آدرس دهی 1- آدرس دهی بلا واسطه این حالت آدرس دهی می تواند طول 8 بیتی یا شانزده بیتی داشته باشد در این نوع آدرس دهی عملوند دوم یک عدد ثابت می باشد مثال: MOV AX,8765h MOV BL,5Fh 82

حالتهای مختلف آدرس دهی 2- آدرس دهی ثبات این حالت آدرس دهی داده در ثباتی قرار می گیرد که بوسیله دستورالعمل مشخص می شود ثبات می تواند هشت بیتی یا شانزده بیتی باشد. مثال: MOV AX,BX MOV BL,CL 83

حالتهای مختلف آدرس دهی 3- آدرس دهی مستقیم این حالت آدرس دهی آدرس داده که طول شانزده بیتی دارد جزئی از دستورالعمل می باشد بسته به طول ثباتی که در عملوند اول قرار دارد یک بایت یا یک کلمه به ثبات منتقل می شود مثال: MOV AX,TABLE MOV BL,TABLE 84

حالتهای مختلف آدرس دهی 4- آدرس دهی غیر مستقیم ثبات این حالت آدرس دهی آدرس در یکی از ثباتهای BX,SI یا DI قرار می گیرد مثال: MOV AX,[BX] MOV BL,[DI] 85

حالتهای مختلف آدرس دهی 5- آدرس دهی مبنا یا اندیس این حالت آدرس دهی آدرس در یکی از ثباتهای BX,SI یا DI,BP قرار می گیرد در این روش یک جابجایی 8بیتی یا 16 بیتی وجود دارد. مثال: 86

حالتهای مختلف آدرس دهی 5- آدرس دهی مبنا و اندیس این حالت آدرس دهی آدرس در یکی از ثباتهای BX یا BP قرار می گیرد و از SI و DI بعنوان ثبات اندیس استفاده می شود در این روش آدرس از مجموع مبنا و اندیس بدون جابجایی بدست می آید. مثال: MOV AX,[BX][DI] 87

حالتهای مختلف آدرس دهی 6- آدرس دهی مبنا و اندیس با جابجایی این حالت آدرس دهی آدرس در یکی از ثباتهای BX یا BP قرار می گیرد و از SI و DI بعنوان ثبات اندیس استفاده می شود در این روش آدرس از مجموع مبنا و اندیس با جابجایی بدست می آید. مثال: 88

حالتهای مختلف آدرس دهی در مواردمعدودي، برنامه‌نويس ممکن است يک ثبات سگمنت و يک آفست واقعي را به عنوان عملوند مستقيم بنويسد، MASM دستورالعمل زير را مجاز مي‌شمارد: Mov bx,dx:0014h اين دستورالعمل، ثبات BX را با کلمه‌اي که از بيستمين بايت سگمنت داده شروع مي‌شود، بار مي‌نمايد. اين آدرس قابل جابجايي نيست. يک عملوند ثبات غيرمستقيم، از داده حافظه استفاده مي‌کند. 89

ماکروي itoa يک رشته شش کاراکتري کدهاي اسکي براي عدد مکمل دو (برای چاپ در خروجی)ايجاد مي‌کند. در يک سگمنت، ترتيب دستورالعمل‌ها دقيقاً ترتيب کدهاي حاصله را تعيين مي‌کند.

ماکروي output، محتوي هيچ ثباتي و همينطور ثبات نشانه‌ها را تغيير نمي‌دهد. ماکروي inputs فقط بر روي ناحيه مقصد و ثبات CX اثر مي‌گذارد، هيچ ثبات ديگري از جمله ثبات نشانه‌ها تغيير نخواهند کرد. ماکروي inputc داراي هيچ عملوندي نمي‌باشد. اين ماکرو يک کاراکتر را از صفحه کليد مي‌خواند و کد اسکي آن را در ثبات AL ذخيره مي‌نمايد.

اگر ماکروي atoi قادر باشد که به طور موفقيت‌آميز يک رشته کاراکتر اسکي را تبديل کند آنگاه نشانه سرريز يعني OF صفر خواهد گرديد. در تمام موارد نشانه‌هاي PF,ZF,SF بسته به مقداري که در AX برگردانده مي‌شود به ترتيب زير تغيير خواهند کرد: اگر عدد منفي باشد SF يک خواهد شد و در غيراينصورت صفر. اگر عدد صفر باشد ZF يک خواهد شد و در حالت غيرصفر، صفر خواهد شد. PF نشاندهنده توازن عدد برگردانده شده در AX است.

فصل چهارم دستورالعمل های اساسی

فهرست مطالب فصل چهارم انتقال داده ها بین مکانهای مختلف جمع و تفریق دستورالعملهای ضرب دستورالعملهای تقسیم جمع و تفریق مکمل 2 با اعداد بزرگتر

انتقال داده ها بين مكانهاي مختلف حافظه كارايي زمان و فضا (حافظه ) دو مفهوم اساسي اين فصل مي با شند . دستورالعملmov در زبان اسمبلي براي كپي كردن داده ها از محلي به محل ديگر مورد استفاده قرار مي گيرد. دستورالعمل xchg ، دستور مفيد ديگري است كه درزبان اسمبلي براي تعويض داده هاي منبع ومقصد كاربرد دارد. نكته : مي توان اندازه ي داده ي مورد نظر را از يك كلمه به يك بايت و يا بالعكس تغيير داد.

مفهوم كارايي زمان مدت زمان لازم براي اجراي يك دستورالعمل بر حسب سيكل هاي ساعت . هر چه سيكل هاي زماني براي اجراي يك دستور العمل كمتر باشد ان دستور العمل كارايي بيشتري خواهد داشت . به طور كلي دستور العملهايي كه به حافظه دستيابي مي كنند خيلي كندتر از دستورهايي هستند كه از ثبات ها استفاده مي كنند بنا براين بايد در صورت امكان داده هايي كه زياد مورد استفاده قرار ميگيرند را در ثبات ها قرارداد.

مفهوم كارايي حافظه ايجاد برنامه ي هدفي كه طول ان حداقل باشد يعني حافظه ي كمتري را اشغال كند (كد فشرده) مناسبتر وحتي در بعضي كاربرد هاي زبان اسمبلي لازم است . كارايي زمان بر حافظه ارجحيت دارد زيرا حافظه را مي توان خريد (جبران كرد ) ا ما زمان را نه ! بنابراين برنامه اي كه سريعتر اجرا شود بر ديگري برتر است حتي اگر از حافظه ي بيشتري استفاده كند.

دستورالعمل mov به صورت mov destination , source نوشته مي شود و يك بايت يا يك كلمه را از محل source به محل destination كپي مي كند . دستور العمل mov شبيه يك دستور جايگزيني ساده در زبانهاي سطح بالا مي باشد ، البته با وجود محدوديت هايي در زبان اسمبلي دستور العمل mov محتواي ثبات نشانه ها و ثبات IP ( اشاره گر دستورالعمل ها ) را تغيير نمي دهد .

مثال : MOV CX , Count محتوی حافظه COUNT در CX قرار می گیرد.

محدوديت هاي زبان اسمبلي كه دستورmov را از يك دستور جايگزيني در يك زبان سطح بالا متمايز مي كند . 1- عبارتهايي نظير ( Count = 3 number + 5) را نمي توان با يك دستور mov بيان كرد . ( لازم است قبلا چند دستورالعمل براي محاسبه ي عبارت سمت راست استفاده شود . ) 2- تمام تركيبات انواع عملوندهاي منبع و مقصد مجاز نيستند .

تركيباتي ازعملوندهاي دستوالعملmov كه ممكن نمي باشند : 1- در صورتي كه هر دو عملوند منبع و مقصد در حافظه قرار داشته باشند . 2- عملوند منبع بلاواسطه به ثبات سگمنت مقصد 3- هرانتقالي به ثبات نشانه ها يا از ان 4- هر انتقالي به ثبات IP 5- انتقال از يك ثبات سگمنت به ثبات سگمنت ديگر 6- هر انتقالي كه عملوندهاي ان از يك نوع بايت يا كلمه نباشند

دستور mov وقتي كه عملوندهاي منبع و مقصد در حافظه هستند با توجه به اينكه دستورالعمل mov نمي تواند داده اي را از يك منبع حافظه به يك مقصد حافظه كپي كند ، معمولا براي انجام اين كار ازدو دستورالعمل mov كه از يك ثبات مياني استفاده مي كنند ، بهره مي گيريم . بهتر است ثبات AX را به عنوان ثبات مياني به كار ببريم زيرا از يك سيكل زماني و بايت حافظه ، كمتري نسبت به ثبات هاي ديگر استفاده مي كند . ( به صفحه 104 كتاب مراجعه شود )

دستور العمل xcgh به صورت operator2 , operator1 xcgh نوشته مي شود . و عملي را انجام مي دهد كه در زبانهاي سطح بالا با سه دستور صورت مي گيرد . اين دستور عملوند اول و عملوند دوم را با يكديگر تعويض نموده به صورتي كه به سيكل زماني و حافظه كمتري نياز داشته باشد . فرم هاي مختلف دستورالعمل xcgh در صفحه 110 كتاب است . در صورت استفاده از حافظه اصلي ، عملوند حافظه بايد عملوند دوم دستور xcgh باشد . دستورالعمل xcgh ثبات نشانه ها را تغيير نمي دهد .

نكته براي تغيير اندازه داده مورد نظر از يك كلمه به يك بايت مي توان كلمه مورد نظر را به يك ثبات انتقال داده پس بايت بالايي يا پاييني را به مقصد مورد نظر انتقال دهيم . برعكس مي توانيم دو بايت را در يك ثبات كنارهم گذاشته پس كلمه حاصل را به مقصد مورد نظر كپي كنيم .

LEA destination, source این دستورالعمل مخفف کلمات Load effect address می باشد. شکل کلی دستورالعمل بصورت زیر می باشد : LEA destination, source destination بایستی یک ثبات 16 بیتی بوده و source هر گونه رجوعی به حافظه می باشد. این دستورالعمل آدرس source را در destination قرار می دهد. 105

مثال : LEA BX , X آدرس متغییر X در ثبات BX قرار می گیرد. این دستورالعمل معادل دستورالعمل زیر می باشد. MOV BX , OFFSET 106

ADD destination , Source شکل کلی آن عبارتست از : ADD destination , Source محتوی Source با محتوی destination جمع شده نتیجه در destination قرار می گیرد. این دستورالعمل روی فلگ ها اثر دارد.

مثال : ADD AL , 5 5 واحد به محتوی AL اضافه می گردد.

مثال : ADD X , BX به محتوی X ، محتوی BX اضافه می گردد و محتوی BX تغییر نمی کند.

نکته : در اسمبلی هر دو عملوند یک دستورالعمل نمی توانند از نوع متغییر باشند.

SUB destination , Source شکل کلی آن عبارتست از : SUB destination , Source محتوی Source از destination کم گردیده نتیجه در destination قرار داده می شود و محتوی Source تغییر نمی کند. . این دستورالعمل روی فلگ ها اثر دارد.

مثال : SUB Y , 20 تغییر Y به اندازه 20 واحد کاهش می یابد.

مثال : SUB AX , X محتوی X از AX کم شده و نتیجه در AX قرار می گیرد.

نكته دردستورالعملهاي add و sub محتواي عملوند دوم ( source) تغيير نميكند. براي هر دستور add يك دستورsub متناظر با همان نوع عملوند ها، تعداد سيكل هاي زماني و تعداد بايت هاي كد هدف وجود دارد . اعمال جمع و تفريق زماني سريع ترين مي باشند كه هر دو عملوند در ثبات ها قرار داشته باشند و زماني كندترين مي باشند كه عملوند مقصد يك كلمه اي در حافظه باشد . اضافه كردن يك عملوند واقع در حافظه ي اصلي به محتواي يك ثبات سريعتر از اضافه كردن مقدار يك ثبات به محتواي يك عملوند واقع درحافظه ي اصلي مي باشند . زماني كه عملوند مقصد برابر يك كلمه است ، يك عملوند منبع بلاواسطه مي تواند برابر يك بايت باشد . زيرا در زمان اجراي عمل جمع يا تفريق به يك كلمه تبديل مي شود .

دستورالعمل های DEC , INC شکل کلی آن عبارتست از : DEC destination INC destination دستورالعمل INC , DEC به ترتیب عملوند مقصد را به اندازه یک واحد کاهش و یا افزایش می دهد.

مثال : INC X محتوی X یک واحد افزایش می یابد . DEC AX

نكاتي در مورد دستورات inc وdec مقدار عملوند مقصد را به صورت يك عدد بدون علامت در نظرميگيرند. نشانه هاي OF وSF وZF را تغييرميدهند ولي نشانه CF راتغييرنمي دهند. براي افزايش و كاهش شمارنده ها مفيدند و ازدستورات جمع وتفريق متناظر كارامد ترند . بهترين مكان براي نگه داشتن شمارنده ها در صورت امكان ثبات ها مي باشند. عملوند این دستورات نمیتواند ثابت باشد.

علت كارامد تر بودن inc وdec نسبت به add وsub درشمارنده ها دودستورadd bx , 1 و inc bx از نظركاري معادل مي باشند اما دستورadd به 4 سيكل زماني و 3بايت حافظه نياز دارد در صورتي كه دستور inc به 2 سيكل زماني و يك بايت حافظه نياز دارد. به همين ترتيب دو دستور sub counter ,1 و dec counter از نظر كاري معادل يكديگرند ولي دستور sub به23 سيكل زماني و 4 بايت حافظه نياز دارد درصورتي كه دستورdec به 21 سيكل زمان و4 بايت حافظه نيازمند است .

دستورالعمل NEG شکل کلی آن عبارتست از : NEG destination این دستورالعمل عملوند خود را منفی می نماید یعنی مکمل 2 آن را محاسبه می نماید.

مثال : MOV AX ,100 NEG AX محتوی AX به 100- تغییر می یابد.

دستورالعملهای ضرب اسمبلی دارای دو دستورالعمل ضرب می باشد : IMUL عملوندها را بصورت علامتدار در نظر می گیرد. MUL عملوندها را بصورت بدون علامت در نظر می گیرد.

دستورالعملهای ضرب شکل کلی آن عبارتست از : MUL OPR IMUL OPR

توضیحات : عملوند ثابت نمی تواند باشد. چنانچه OPR از نوع بایت باشد محتوی OPR در محتوی AL ضرب شده نتیجه در AX قرار می گیرد. چنانچه OPR از نوع WORD باشد محتوی OPR در محتوی AX ضرب شده نتیجه در DX : AX قرار می گیرد و محتوی ثبات های DX , AX از بین می رود. روی فلگ ها اثر دارد.

مثال : محتوی ثبات AX برابر با - 80 می شود. MOV AL , 10 MOV X , - 8 IMUL X محتوی ثبات AX برابر با - 80 می شود.

دستورالعمل های تقسیم اسمبلی دارای دو دستورالعمل تقسیم می باشد : IDIV عملوند را بصورت علامتدار در نظر می گیرد. DIV عملوند را بصورت بدون عملوند در نظر می گیرد.

دستورالعمل های تقسیم شکل کلی آن عبارتست از : DIV OPR IDIV OPR

توضیحات : عملوند ثابت نمی تواند باشد. چنانچه OPR از نوع بایت باشد محتویAX بر محتوی OPR تقسیم شده نتیجه در AL قرار می گیرد و باقیمانده تقسیم در AH قرار می گیرد. چنانچه OPR از نوع WORD باشد محتوی DX:AX بر محتوی OPR تقسیم شده نتیجه تقسیم در AX قرار می گیرد و باقیمانده در DX قرار می گیرد.

مثال : X DB 13 MOV AX , 134 DIV X پس از اجرای دستورالعمل های فوق محتوی AL برابر با 10 و محتوی AH برابر با 4 می باشد.

دستورالعمل های SBB , ADC در اسمبلی برای جمع و تفریق دو مقدار از نوع double word دستورالعملی وجود ندارد. برای این منظور ار دستورالعملهای SBB , ADC استفاده می گردد.

دستورالعمل های SBB , ADC شکل کلی آن عبارتست از : ADC destination , Source destination destination + Source + CF SBB destination , Sounce destination destination - Source – CF

مثال : ADC X , BX SBB AX , Y

تفریق و جمع دو double word می خواهیم محتوی دو متغییر X و Y از نوع double word را جمع نموده نتیجه را در Z قرار دهیم : X DD ? Y DD ? Z DD ? MOV AX , X ADD AX , Y MOV Z , AX MOV AX , X + 2 ADC AX , Y + 2 MOV Z + 2 , AX چنانچه بخواهیم محتوی دو متغییر را از هم کم نماییم بایستی در دستورالعملهای فوق ADD را به ADC , SUB را به SBB تبدیل نماییم.

كنترل كردن نشانه CF دستورالعمل clc : نشانه ي cf را برابر صفر قرار مي دهد. 0 CF : = دستورالعمل stc : نشانه ي cf را برابر 1 قرارمي دهد. CF : = 1 دستورالعمل cmc : نشانه ي cf را مكمل مي كند.