زبان ماشین و اسمبلی
Download
1 / 72

زبان ماشین و اسمبلی - PowerPoint PPT Presentation


  • 263 Views
  • Uploaded on

زبان ماشین و اسمبلی. جزوه درس زبان ماشین واسمبلی دانشگاه روزبه زنجان استاد فروتن راد مينا مغربي. بسم تعالی. دلايل مطالعه ي درس اسمبلي :. ج 1. آشنايي با معماري سخت افزاري برنامه نويسي روي سخت افزار كنترل سخت افزار هاي ويژه ( روبات ) امكان تركيب با نرم افزار يا زبان هاي ديگر. C , HTML…

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' زبان ماشین و اسمبلی' - heba


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

جزوه درس زبان ماشین واسمبلی

دانشگاه روزبه زنجان

استاد فروتن راد

مينا مغربي

بسم تعالی


دلايل مطالعه ي درس اسمبلي :

ج 1

  • آشنايي با معماري سخت افزاري

  • برنامه نويسي روي سخت افزار

  • كنترل سخت افزار هاي ويژه ( روبات )

  • امكان تركيب با نرم افزار يا زبان هاي ديگر

C , HTML…

ASM

MOV . Ax . 10…

end ASM…


ساختمان زبان ماشين :

  • معماري كامپيوتر 80x86 :

    Intel

    80 86 , 80 88 , 80x86 , 80 286 ,80 386

Main memory

C p u

Registerbank

c . u

A . L . U

I / O

SYSTEM BUS


80x86
شمايي از كامپیوتر 80x86 :

  • واحد پردازش مركزي :

    CPUcentral processing unit

    اگر در سيستم كامپيوتري تنها يك پردازنده داشته باشيم آن را واحد پردازش مركزي ميناميم .

  • واحد كنترل :

    control unit CU

    وظيفه ي كنترل ونظارت بر ساير اجزاي سيستم كامپيوتري را بر عهده دارد.

    كنترل: چه واحدي در چه زماني چه عملياتي انجام ميدهد .

    نظارت: بررسي صحت انجام عمليات .


  • واحد محاسبه و منطق :

    A . L . UArithmetic and Logic Unit

    از دو واحد محاسبه و منطق تشكيل شده است .

    1.واحد محاسبه يا arithmetic unit توانايي انجام عمليات ساده رياضي نظير جمع و تفريق و مكمل سازي و... را دارد .

    2.واحد منطق يا logic unit كه توانايي انجام عمليات منطق ساده نظير not ,mod, or , x or , and را داراست .

  • ثبات ها :

    Registers

    حافظه هاي بسيار سريع هستند از نوع flash memory كه به عنوان ميانگير محاسباتي در عمليات پردازنده مورد استفاده قرار ميگيرند .

ram

n

5v

بازنویسی

3.5

0 – 3.5 = 0

3.5 - 5 = 1

t


5v

Flash memory

به دلیل عدم نیاز به بازنویسی داده ها بسیار سریع هستند .

  • حافظه اصلی یا main memory :

BF 9D

64در مبنای هگز

BF 9F

0040h

data

آدرس


  • حافظه ی دستیابی تصادفی :

    Random access memory Ram

    حافظه ی دستیابی تصادفی با یک مکانیزم آدرس دهی امکان دسترسی مستقیم به داده ها را فراهم میسازد و ram چند مدل دارد که آن ها را برایتان معرفی .

  • SRAM = Static RAM

  • DRAM = Dynamic RAM

    Single DRAM (SDR)

*

SDR

Double DRAM (DDR)

*

CLOCK PLUS

DDR

CLOCK PLUS

*سرعت دو برابر است


  • حافظه فقط خواندنی :

    Read Only Memory ROM

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

    قابل باز نویسی است BIOS = *

Programmable ROM = PROM

Electronic PROM = EPROM

*منظور ازmain memory همانRam است .


I o device
دستگاه های ورودی / خروجی یا I/O Device :

دستگاه های ورودی خروجی امکان انتقال داده ها به درون سیستم کامپیوتری و یانمایش اطلاعات را در خروجی فراهم مینماید .

  • گذرگاه سیستم : وظیفه ی برقراری ارتباط بین اجزای مختلف سیستم کامپیوتری را بر عهده دارد .

    *داده پردازش شده را اطلاعات گویند .

    داده Data :

    اطلاعات : Information

FSB

(سرعت پردازنده , سرعت ram , سرعت گذرگاه )Main

400

GHz

1068


تبدیل از مبنای 10 به 2 :

ج 2

برای تبدیل اعداد صحیح مثبت در مبنای 2 دو روش وجود دارد که هر دو را مورد بررسی قرار میدهیم .

روش اول تبدیل از مبنای 10 به 2 برای اعداد صحیح مثبت این است که عدد را به طور متوالی تقسیم بر دو کنیم تا خارج قسمت 0 شود سپس باقیمانده ها را به صورت معکوس به عنوان عدد مورد نظر در مبنای 2 در نظر میگیریم , عکس این عمل را هم تبدیل اعداد صحیح مثبت از مبنای 2 به مبنای 10 میگوییم .

194

2

2

18 97

مثال :

(194)10=(11000010)2

2

14 8 48

2

14 17 4 24

2

0 16 8 2 12

2

1 8 4 12 6

2

0 4 0 6 3

0 0 2 1

1


روش دیگر تبدیل از مبنای 10 به 2 این است که توان های دو را حفظ باشیم اول میگوییم از عددی که در نظر داریم کدام توان نه بزرگ است و نه کوچک , این روش را روش فرمال یا رسمی میگویند هرکدام باشد یک و نباشد جایش صفر قرار میدهیم لطفا به مثال زیر توجه فرمایید به طور کامل توضیح داده ایم .

مثال : (194)10=(11000010)2

194

27

128

=

جدول توان های 2

66

26

=

64

2

21

=

2

20

=

0


تبدیل از مبنای 2 به 10 : این است که توان های دو را حفظ باشیم اول میگوییم از عددی که در نظر داریم کدام توان نه بزرگ است و نه کوچک , این روش را روش فرمال یا رسمی میگویند هرکدام باشد یک و نباشد جایش صفر قرار میدهیم لطفا به مثال زیر توجه فرمایید به طور کامل توضیح داده ایم .

برای تبدیل از مبنای 2 به 10 یک روش داریم که در ادامه تو ضیح خواهیم داد .

تبدیل اعداد صحیح مثبت از مبنای 2 به 10 بسیار شبیه به آنچه است که در دوران تحصیل ابتدایی برای اعداد سیستم دهدهی انجام می دادید می باشد فقط به جای ارزش های مکانی یکان , دهگان , صدگان , ... ارزشهای مکانی یکان , دوگان , چهارگان , ... را داریم با یک مثال به توضیح بیشتر این مسئله میپردازیم .

مثال : (11000010)2 = (194)10

  • 27

25

23

21

  • 1 * 2^7 + 1 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0 = 194

(11000010)

  • 26

24

22

20


نمایش اعداد صحیح علامت دار : این است که توان های دو را حفظ باشیم اول میگوییم از عددی که در نظر داریم کدام توان نه بزرگ است و نه کوچک , این روش را روش فرمال یا رسمی میگویند هرکدام باشد یک و نباشد جایش صفر قرار میدهیم لطفا به مثال زیر توجه فرمایید به طور کامل توضیح داده ایم .

نمایش اعداد صحیح علامتدار به دو روش امکان پذیر مباشد که در ادامه هردو یه آن ها را توضیح خواهیم داد .

روش اول استفاده از بیت علامت است :

الف) اگر بیت علامت0 باشد نشان دهنده ی عدد + است .

ب ) اگر بیت علامت 1 باشد نشان دهنده ی عدد – است .

Sign bit

+

=

67

-

*مشکل این روش آن است که 2 عدد صفر+ و صفر – داریم که این موضوع از نظر ریاضی غیر ممکن است .


مکمل یک این است که توان های دو را حفظ باشیم اول میگوییم از عددی که در نظر داریم کدام توان نه بزرگ است و نه کوچک , این روش را روش فرمال یا رسمی میگویند هرکدام باشد یک و نباشد جایش صفر قرار میدهیم لطفا به مثال زیر توجه فرمایید به طور کامل توضیح داده ایم .

(01000011) 2= (+67) 10

روش دوم روش مکمل 1 است :

برای به دست آوردن مکمل مکمل یک عدد دودویی صفر ها را به یک و یک ها را به صفر تبدیل میکنیم .

(10111100) 2 = (-67 ) 10

*مشکل این است که با بکار گیری سیستم نمایش مکمل یک علاوه بر این که 2 عدد صفر علامت دار داریم همچنین مدارات مورد نیاز برای انجام عملیات ریاضی نظیر جمع , تفریق , ... بسیار پیچیده تر میشود .

روش سوم روش مکمل 2 است :

این روش به 3 صورت محاسبه میگردد در این قسمت هر سه روش مکمل دو گیری را توضیح خواهیم داد .

روش 1: سیستم نمایش مکمل 2 به صورتی میباشد که اگر به مکمل یک عدد مقدار یک را ضافه کنیم مکمل دو آن عدد به دست می آید که نشانگر عدد با علامت منفی است ابتدا عدد را بدست می آوریم سپس مکمل یک آن را با عدد یک جمع کرده و عدد به دست آمده عدد علامتدار است .

(01000011) 2 =(+67) 10

(10111100)

+

1

(10111101) 2 =(-67) 10

مکمل یک

مکمل دو


اولین یک این است که توان های دو را حفظ باشیم اول میگوییم از عددی که در نظر داریم کدام توان نه بزرگ است و نه کوچک , این روش را روش فرمال یا رسمی میگویند هرکدام باشد یک و نباشد جایش صفر قرار میدهیم لطفا به مثال زیر توجه فرمایید به طور کامل توضیح داده ایم .

مکمل 2

(011010000)

( 10011000)

روش 2 : روش دوم برای بدست آوردن مکمل دو عدد آن است که عدد مبنای دو را از سمت راست تا اولین عدد 1 ارقام را عینا تکرار میشوند و خود عدد یک نیز نوشته میشود و بقیه ارقام 0 ها یک و یک ها 0 میشوند .

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

1

1

1

1

1

1

1

0

10

10

10

10

10

10

10

10

1 0 0 0 0 0 0 0 0

- 0 1 0 0 0 0 1 1

(101111101) = (-67)

  • نکات مهم :

  • در یک سیستم نمایش مکمل 1 و یا 2 اندازه حافظه میبایست مشخص باشد معمولا مضربی از عدد 8 باشد یعنی (8 , 16 , 32 و... ) .

  • اگر آخرین بیت در سیستم نمایش مکمل 2 , 1 باشد حتی اگر تمام ارقام دیگر نیز یک باشند عدد منفی و اگر بیت آخر 0 باشد عدد مثبت است .

  • کوچکترین واحد حافظه 1بیت و کوچکترین واحد آدرس پذیر حافظه 1 بایت است .


بدست آوردن معادل مبنای 2 یک عدد منفی :

قسمت صحیح یا مثبت آن را (یعنی خود عدد بدون در نظر گرفتن علامت منفی آن ) را تبدیل به نمایش مبنای دو میکنیم سپس مکمل یک آن را بدست می آوریم و در ادامه عدد یک را به مقدار اضافه میکنیم عدد دودیی حاصل نشان دهنده ی عدد با علامت منفی است.

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

اگر ,Dn… D2,D1,D0 نشان دهنده ی ارقام عددی در سیستم نمایش مکمل دو باشند با بکار گیری رابطه ی زیر میتوانیم مقدار دهدهی معادل عدد را بدست آوریم .

- Dn * 2^n + dn-1 * 2^n-1 + … + d1 * 2^1 + d0 * 2^0

(10111101) = (-67)

- 1 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 =

-128 + 32 + 16 + 8 + 4 + 1 = - 67


کوچکترین و بزرگترین عدد قابل نمایش در سیستم مکمل دو با حافظه ی 8 و 16 بیتی چیست ؟

: فرمول

m

2^m+1 – 1 (- DN * 2^n + dn-1 * 2^n-1 + … + d1 * 2^1 + d0 * 2^0)

2^i

=

i=0

عامل کوچک کننده

عوامل بزرگ کننده

: میزان حافظه ی 8 بیتی

کوچکترین عدد قابل نمایش

0 0 0 0 0 0 0 1

=

128-

1 1 1 1 1 1 1 0

=

127+

بزرگترین عدد قابل نمایش

: میزان حافظه ی 16 بیتی

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1

کوچکترین عدد قابل نمایش

=

32768 -

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

32767 +

بزرگترین عدد قابل نمایش

=


8 16 octal hexadecimal
اعداد مبنای 8 و 16 نمایش در سیستم مکمل دو با (Octal , Hexadecimal):

به دلیل این که تعداد ارقام مورد نیاز برای نمایش اعداد در مبنای 2 بسیار زیاد است برای نمایش اعداد از مبنا های بزرگتر نظیر مبنای 8 و 16 استفاده میکنیم .

جدول تبدیل مبنا ها :


با توجه به جدول صفحه قبل برای بدست آوردن مبنای 8 و 16 یک عدد دودویی به صورت زیر عمل میکنیم .

تبدیل مبنای 2 به 8 :

برای تبدیل به مبنای 8 عدد را از سمت راست مرور و سه رقم سه رقم جدا میکنیم در صورت نیاز انتهای سمت چپ صفر های بی معنی اضافه میشود سپس به ازای هر سه رقم در مبنای 2 یک رقم در مبنای 8 جایگزین میشود .

8(233530)=2(010011011101011000)

تبدیل مبنای 8 به 2 :

برای تبدیل به مبنای 8 به 2 کافیست به ازای هر رقم در مبنای 8 , 3 رقم در مبنای 2 قرار دهیم .

2(010011011101011000)=8(233530)


تبدیل مبنای 2 به 16 : بدست آوردن مبنای 8 و 16 یک عدد دودویی به صورت زیر عمل میکنیم .

برای تبدیل به مبنای 2به 16 عدد مورد نظر را 4 رقم 4 رقم جدا میکنیم و در صورت نیاز صفر های بی معنی به آن اضافه میکنیم .

H(13758)=(000100110111101011000)2

(1110101111110101)2=(EBF5)H

  • نکات مهم :

  • در زبان اسمبلی برای آن که بین یک عدد در مبنای 16 و نام یک متغییر تفاوت قایل شوند ابتدای مبنای 16 حتما باید با عدد شروع شود ونه با حروف بنا بر این در اول آن یک 0 بی معنی قرار میدهیم .

  • در نمایش اعداد در مبنای 8 اگر اولین عدد منتهی الیه از سمت چپ بین 0 و 3 باشد

  • عدد + و اگر بین 4 و 7 باشد عدد – است و در مبنای 16 اگر اولین عدد سمت چپ بین 0 تا 7 باشد عدد + و اگر بین 8 تا f باشد عدد – است .

(0EBF5)h

معلوم میکند مبنای 16 است

8(7013)

8(3777)

16(FB47)

16(EB43)

عدد -

عدد +

عدد -

عدد +


کد های کاراکتری : بدست آوردن مبنای 8 و 16 یک عدد دودویی به صورت زیر عمل میکنیم .

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

:ASCII(American Standard Code for Information Interchange )

کد اسکی ASCI یک کد استاندارد ملی امریکا است که بطور قرار دادی برای به نمایش در آوردن حروف ( کاراکتر ها ) توسط پردازنده ها ایجاد شد بدین معنی که هر برنامه نویس اسمبلی موظف است برای پردازنده از این کد ها جهت بنمایش در آوردن حروف استفاده کند ) البته قراردادی است ونه اجباری ).


  • سیستم کد گذاری اسکی به ازای هر کاراکتر یک بایت در نظر میگیرد (در برخی منابع و مراجع 7 بیت ) که برای تمامی حروف الفبا ی همه زبان ها کافی نیست بنابر این برای کد گذاری کاراکتر ها از سیستم کدگذاری Unicode استفاده میشود که برای هر کاراکتر 16 بیت (2بایت) حافظه در نظر میگیرد در برخی از کامپیوترهای بزرگ (SUPER COMPUTER) از سیستم کد گذاری EBCDIC استفاده میشود که مخفف (EXTENDED BINARY CODE DECIMAL INFORMATION CODE) است استفاده میشود .

warning

جدولی که در اسلاید بعدی مشاهده میکنید جدول کد های اسکی است که ما به کد های هگزا یعنی ستون های قرمز نیازمندیم .


به جای حروف کد های اسکی در سیستم ذخیره میشوند به مثال زیر توجه کنید :

c o m p u t e r s

43

6f

6e

71

75

74

65

72

73

Enter(0d)

حافظه ram

a r e

73

0b74

Enter(0d)

61

72

65

70

65

74

Enter(0d)

f u n

66

75

6e


نمایش اعداد اعشاری مثبت : ذخیره میشوند به مثال زیر توجه کنید :

نمایش اعداد اعشاری مثبت از مبنای 10 به 2 :

برای تبدیل به مبنای

(01000011.01011111)

67/373

=

تبدیل به مبنای دو

....

373 .

2

=

0.746

*

1.492

746 .

2

=

*

0.984

492 .

2

=

*

1.968

984 .

2

=

*

2

1.936

968 .

=

*

1.862

936 .

2

=

*

1.724

862 .

*

2

=

2

=

1.448

724 .

*


نمایش اعداد اعشاری مثبت از مبنای 2 به 10 :

128

1

...

(67.373)= (01000011.01011111)

...

½

56½

0.373

1/256* 1 + ...1/16 * 1+ 1/8 * 0 + ¼ * 1 + ½ * 0

برای مطالعه :

تفاوت delete و backspace در این است که دیلت باید پشت کاراکتر باشد تا پاک کند و در بک اسگیس باید جلوی کاراکتر باشد .


جمع و تفریق اعداد مکمل 2 : 2 به 10 :

ج3

X

111

(0A07) H

+

(01D3) H

(0BDA) H

0000101000000111

+

0000000111010011

0000101111011010

1

X

(0206) H

+

(FFB0) H

(101B6) H

111111

0000001000000110

+

1111111110110000

10000001110110110

2

(رقم نقلی)Carryout


X 2 به 10 :

1

11111

(E9FF) H

+

(8CF0) H

(176EF) H

1110100111111111

+

1000110011110000

10111011011101111

سر ریزی با رقم نقلی

3

1111111111

11

(FFE7) H

+

(FFF6) H

(1FFDD) H

1111111111100111

+

1111111111110110

11111111111011101

4


2 به 10 :

1

(493F) H

+

(645A) H

(AC99) H

01001000001111111

+

011001100001011010

1010110010011001

سر ریزی بدون رقم نقلی

5

X

سر ریزی یا : Over flow

اگرحافظه ای برای نمایش عددی در نظر گرفته شده است و امکان نمایش آن عدد را نداشته باشد سر ریزی رخ میدهد قبلا روش محاسبه ی کوچکترین و بزرگ ترین عدد قابل نمایش با حافظه ی مشخص را آموخته اید اگر تلاش کنید عددی عددی خارج از این بازه را در حافظه ذخیره نمایید سرریزی اتفاق می افتد .

1. جمع دو عدد + , - شود .

2. جمع دو عدد - , + شود .

3. حافظه قابلیت نشان دادن آن را نداشته باشد .

دقت نمایی در اثر وقوع سر ریزی نتیجه نا معتبر خواهد بود .



  • ثبات یا نمایش میدهد . register:

    چنانچه میدانید ثبات ها حافظه هایی سریع هستند از نوع flash memory که به عنوان میانگیر یا بافر (buffer) محاسباتی در عملیات پردازنده مورد استفاده قرار میگیرند .

  • بافر (buffer) :

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

  • ثبات های پردازنده ی 80x86 به شرح زیر است :

    4 ثبات عمومی در پردازنده ی 80x86 وجود دارد با نام های EDX,ECX,EBX,EAX یا ثبات های داده نیز نام میگیرند .


ثبات های داده به همراه شکل : نمایش میدهد .

8 بیت کم ارزش

8 بیت پر ارزش

EAX :

Ah

Al

16 بیت کم ارزش

AX=16 بیت پر ارزش

32bit

8 بیت کم ارزش

8 بیت پر ارزش

EBX :

Bh

Bl

16 بیت کم ارزش

BX=16 بیت پر ارزش

32bit

8 بیت کم ارزش

8 بیت پر ارزش

ECX :

Ch

Cl

16 بیت کم ارزش

CX=16 بیت پر ارزش

32bit


8 بیت کم ارزش نمایش میدهد .

8 بیت پر ارزش

EDX :

Dh

Dl

16 بیت کم ارزش

DX=16 بیت پر ارزش

32bit

  • نکات :

  • ثبات های داده ثبات های 32 بیتی هستند .

  • پردازنده ی 80x86 تا 80x286 16 بیتی بودند ولی از 80x386 به بعد 32 بیتی شدند .

  • چنانکه در آینده به هنگام مطالعه ی دستو رالعمل های اساسی پردازنده متوجه خواهد شد ثبات EAX به صورت ضمنی یک پایه ی دستورالعمل در دستورالعمل های زبان اسمبلی است به همین دلیل این ثبات را انباره یا Accumulator مینامند به مثال زیر توجه نمایید :

Mulbl ; ax bl * al

به این معناست که ثبات bl در ثبات al ضرب شود و جواب در ax ذخیره شود .


ثبات های اشاره گر سگمنت نمایش میدهد . : segment

هر برنامه ای که در حافظه ی اصلی ram لود میشود (جهت اجرا ) دارای سگمنت پشته (data segment )سگمنت پشته (stack segment ) و سگمنت کاربرد های اضافی (extra segment ) میباشد .

Main memory

در معماری پردازنده ی 80x86 , 4 ثبات با نام های (ES , SS , DS , CS ) به ابتدای هر سگمنت اشاره میکند .

Code segment

CS

Data segment

DS

از آخر به اول مورد دستیابی قرار میگیرد

program

Stack segment

SS

Extra segment

ES


پشته یا ( نمایش میدهد .stack) :

ساختمان داده ای است با ساختار (LIFO first in first out)بدین معنا که هر آخرین item وارد شده اولویت آیتمی است که از آن خارج میشود به عنوان مثال آخرین بشقابی که روی میز میگذاریم اولینی است که بر میداریم .

هر پشته دارای اشاره گری است که به داده ی بالای پشته ویا خانه ی خالی بعد از آن اشاره میکند این اشاره گر را (sp stack pointer) مینامند , همچنین جهت رشد پشته میتواند صعودی یا نزولی باشد با ترکیب این موارد 4 نوع پشته میتوان طراحی نمود که در ادامه به توضیح هر کدام میپردازیم .


ساختار جهت رشد پشته صعودی , نمایش میدهد .sp به داده ی بالای پشته اشاره میکند .

push

pop

item

0011

SP

0011

2

d

1

d

SP

1

0010

c

SP

0010

c

SP

2

0001

b

0001

b

0000

a

0000

a

SS

SS

Push :

Sp را افزایش بده .

داده ای را که در خانه ی sp نمایش دهد بنویس .

Pop :

داده ای را که خانهSp نمایش میدهد بخوان .

spرا کاهش بده.


ساختار جهت رشد پشته صعودی , نمایش میدهد .sp به خانه خالی بالای پشته اشاره میکند .

push

pop

item

SP

2

SP

0011

0011

1

d

d

SP

2

SP

1

0010

c

0010

c

0001

b

0001

b

0000

a

SS

0000

a

SS

  • Push :

  • داده ای را که در خانه ی sp اشاره میکند بنویس .

  • Sp را افزایش بده .

Pop :

spرا کاهش بده.

داده ای را که خانهSp نمایش میدهد بخوان .


ساختار جهت رشد پشته نزولی , نمایش میدهد .sp به داده ی بالای پشته اشاره میکند .

SS

SS

FFFF

a

FFFF

a

FFFE

b

FFFE

b

FFFD

c

FFFD

c

SP

2

SP

FFFC

d

1

d

2

FFFC

SP

1

SP

item

push

pop

Push :

Spرا کاهش بده.

داده ای را که در خانه ی sp نمایش دهد بنویس .

  • Pop :

  • داده ای را که خانهSp نمایش میدهد بخوان .

  • spرا افزایش بده .


ساختار جهت رشد پشته نزولی , نمایش میدهد .sp به خانه خالی بالای پشته اشاره میکند .

SS

SS

FFFF

a

FFFF

a

FFFE

b

FFFE

b

FFFD

c

FFFD

c

SP

1

FFFC

d

SP

d

1

FFFC

2

SP

2

SP

item

push

pop

  • Push :

  • داده ای را که در خانه ی sp نمایش دهد بنویس .

  • Spرا کاهش بده.

  • Pop :

  • spرا افزایش بده .

  • داده ای را که خانهSp نمایش میدهد بخوان .


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

ج4

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

[ Label ] Instruction . Name [ operand ] [; comments]

برچسب

عملوند

توضیحات

نام دستورالعمل

For example :

LBL : MOV EAX ,EDX ; copies data in EDX to EAX

Add CX ,BX

CWD

راهنمایی اسمبلی :

دستورالعمل های ویژه ای هستند که اسمبلی را در فرایند ترجمه کد به زبان ماشین هدایت میکنند عمدتا با کاراکتر (0) شروع میشوند به عنوان مثال :

.no LST

به اسمبلی میفهمانند که در فرایند ترجمه فایل .LST را تولید نکن .

به اسمبلی میفهمانند که در برنامه از دستورالعمل های 80x286 , 80x386 استفاده شده است به جای این راهنمای اسمبلی شما میتوانید 486. و 586. استفاده کرد .

386.

.model flat

مشخص میکند که میبایست بر اساس مدل حافظه کد های 32 بیتی تولید کند .


ماکرو : نمایش میدهد .

یک ماکرو مجموعه ای از دستوروالعمل هاست که با یک نام دسته بندی شده اند از این نظر ماکرو شبیه به توابع و روالها در زبان های برنامه نویسی سطح بالا میباشد تفاوت ماکرو با یک تابع آن است که برای اجرای یک تابع پس از فراخوانی اجرای برنامه به آن تابع منتقل شده و اجرا در آن تابع ادامه میابد اما یک ماکرو به بدنه ی آن در مکان فراخوانی میابد (یعنی بدنه ی ماکرو در مکان فراخوانی آن کپی میشود) از این نظر یک ماکرو سریعتر از توابع اجرا میشود .

F1(){

.

.

.

F2 () ;

.

.

.

}

F2(){

.

.

.

.

}

m1(){

.

.

.

invok m2 ()

.

.

}

m2(){

.

.

.

.

}

فراخوانی

اجرا

کپی

برگشت

m2 کپی شده و invok m2 پاک میشود .


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

با استفاده از شبه دستورالعمل های T byte , Q word , D word , word , byte میتوان حافظه هایی با اندازه یک بایت , دو بایت , چهار بایت , هشت و ده بایت را رزرو نمود همچنین شبه دستورالعمل های real 10 , real 8 , real 4 جهت رزرو حافظه های 4بایتی , 8 بایتی و 10 بایتی برای اعداد اعشاری مورد استفاده قرار میگیرند شکل کلی تعریف متغییر ها به صورت زیر است .

Operand-name memory-amount initialize-value

مقدار پیش فرض میزان حافظه مصرفی نام متغییر

Data segment

Example :

1byte

CH

41h

Number D word 10

Ch byte ‘A’

نام متغییر حاوی offset داده از ابتدای سگمنت داده ها میباشد بنابر این با نام متغییر میتوان به محتوای آن دسترسی داشت .

10

number

4byte

offset

D S

Main Memory


رشته ها : نمایش میدهد .

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

STR byte “computer are fun “ , 0

STR

43h

6fh

با توجه به جدول کد های اسکی .

6dh

1

1

‘10’

Main memory


آرایه ها : نمایش میدهد .

ساختمان داده ای از داده های هم نوع هستند که در حافظه به صورت متوالی ذخیره میشوند بنا بر این با یک اندیس میتوان به خانه های اندیس دسترسی داشت .

Array word 10,50,63,74

array

Char byte ‘ a’ , ‘l’ , ‘ I’

10

Array[0]

50

Array[1]

63

Array[2]

74

Array[3]

….

DS


عملگر نمایش میدهد .dup:

این عملگر آرگومان خود را به تعداد مشخص در حافظه کپی میکند مثال با بکارگیری دستورالعمل زیر آرایه ای با نام numbers با 10 خانه 1 بایتی تعریف میشود (هر خانه یک عنصر آرایه مینامند ) که تمام خانه های آن خالی است .

Number byte 10 dup( ? )

Null خالی

B 10 = 1 * 10 = حافظه مصرفی

حافظه مصرفی هر عنصر * تعداد عناصر = میزان حافظه مصرفی آرایه

مثال ) دستورالعمل جهت تعریف رشته ی زیر را بنویسید .

Stars byte 24 Dup (* ) , *

*...* * *

25عدد

مثال ) دستورالعمل جهت 10بار کپی کردن رشته ی زیر در یک متغییر بنویسید .

’) *****####¦¦¦¦¦ STR byte 10 dup ( ‘

***** #### ¦¦¦¦¦

عملگر dup را میتوان به صورت تو در تو مورد است استفاده قرار داد .

STR byte 10 (5 dup(‘¦’) , 4 dup (‘#’) , 5 dup (‘*’)


ثبات های اشاره گر پشته : نمایش میدهد .

پردازنده ی 80x86 دارای 2 ثبات اشاره گر پشته با نام های EBP, ESP میباشد که ثبات های 32 بیتی هستند 16 بیت کم ارزش را sp مینامند که در پردازنده های قبل از 80x386 به عنوان اشاره گر پشته استفاده میشوند چنانکه پیشتر مطرح شد این اشاره گر میتواند به داده ی بالای پشته اشاره نماید (یا به خانه ی خالی بالای پشته اما در کامپیوتر 80x86 این چنین نیست .) همچنین با توجه به اینکه جهت رشد پشته در کامپیوتر 80x86 نزولی است معماری شماره 3 پشته در این پردازنده استفاده میشود .

EBP یک اشاره گر مبنا است که امکان دستیابی به تمام خانه های پشته را فراهم مینماید .

SS

FFFF

a

FFFE

b

BP

FFFD

c

d

FFFC

e

FFFB

SP

stack


ثبات های اشاره گر رشته : نمایش میدهد .

پردازنده ی 80x86 دارای 2 ثبات اشاره گر رشته با نام های EDI , ESI میباشد , ESI آدرس رشته مبدا و EDI آدرس رشته مقصد را در عملیات رشته ای نمایش میدهد .ثبات اشاره گر دستورالعمل EIP(Instruction Pointer) این ثبات اشاره گر در هر لحظه حاوی آدرس دستورالعمل بعدی برای اجرا میباشد .

ثبات پرچم e flag :

بیت های این ثبات در هر لحظه نشانگر شرایطی است که در اثر محاسبات رخ داده است به عنوان مثال سر ریزی , وجود یا عدم وجود رقم نقلی , منفی شدن نتیجه و ... .

31

12

11

10

9

8

7

6

5

4

3

2

1

0

DF

SF

ZF

PF

CF

OF

....

16بیت

CF = Carry flag ZF = Zero flag SF = Sign flag DF = Direct flag PF = Parity flag OF = Over flow flag

ثبات های flag , ES , SS , DS , CS هیچ نامی ندارند EIP , SP از دید برنامه نویس دسترسی مستقیم به آنها ندارد و نمیتواند داده هارا در آنها نوشته یا از آنها بخواند .

MOV EIP , 158 ;  error


* در مدل حافظه ی نمایش میدهد .flat سیستم عامل اعداد ثابتی را در ثبات های ES , SS , DS , CS قرار میدهد وهر نوع تلاش برای آدرس دهی خارج از محدوده موجب بروز خطا میشود .

* آدرس های درون سگمنتی را OFFSET می نامند یعنی داده نباید وارد محیط CS (CODE SEGMENT) شود یا بر عکس چون موجب میشود سیستم هک شود و سیستم عامل جلوی آن را میگیرد .

Main memory

Codesegment

CS

Data segment

DS

داده مورد نظر

program

Stack segment

SS

Extra segment

ES


روش های آدرس دهی : نمایش میدهد .

ج5

در این نوع آدرس دهی داده به صراحت در دستورالعمل نوشته میشود .

1. بلا واسطه :

1. Example : MOV AX , 179

ADD CX , -74

در این نوع آدرس دهی داده درون یک ثبات قرار گرفته است که اسم ثبات در دستورالعمل ظاهر میشود .

2. ثباتی :

2. Example : MOV EAX , ECX

ADD BX , 23

در این نوع آدرس دهی داده درون یک خانه ای از حافظه قرار دارد که آدرس موثر آن درون دستورالعمل ساخته میشود , به خاطر دارید که نام متغییر حاوی Offset داده در segment و با توجه به این که DS به عدد ثابتی اشاره میکند می توان به داده مورد نظر دسترسی داشت .

3. مستقیم :

3. Example : SUM WORD ?

NUMBER DWORD 20

.

.

.

MOX

Codesegment

Datasegment

data

variable

offset

Ds

Stacksegment

Extrasegment


در این نوع آدرس دهی آدرس داده ی مورد نظر درون یک ثبات قرار دارد ثبات های عمومی (EDX,ECX,EBX,EAX) همچنین ثبات های اندیس EDI , ESI میتوانند برای آدرس دهی غیر مستقیم ثباتی مورد استفاده قرار میگیرد .همچنین ثبات EBP جهت آدرس دهی غیر مستقیم ثباتی در سگمنت پشته مورد استفاده قرار میگیرد ثبات ESP با شرایط خاص میتواند برای آدرس دهی ثباتی غیر مستقیم مورد استفاده قرار میگیرد در صورتی که اندازه حافظه در آدرس دهی ثباتی غیر مستقیم مبهم باشد از عملگر PTR جهت مشخص کردن حافظه استفاده میکنیم .

4. غیر مستقیم ثباتی:

4. Example : MOV EAX , [EDX]

.

.

.

EDX

  • همه ثبات ها با شرایط خاص میتوانند مورد استفاده قرار گیرند , آدرس دهی ثباتی غیر مستقیم معادل اشاره گر ها (زبان برنامه نویسی سطح بالا) هستند .

آدرس داده

  • در واقع آدرس دهی ثباتی غیر مستقیم مانند نقشه ی گنج میباشد .

Main memory

×

DATA

در برخی از دستورالعمل ها یک پایه ی دستورالعملی یک پایه با یک دستورالعمل به صورت ضمنی ثبات EAXیا بخشی از این ثبات میباشد .

5. ضمنی :

5. Example : MUL BL ; AX BL * AL


ماکرو های فایل مورد نظر درون یک ثبات قرار دارد ثبات های عمومی (IO.H:

در فایل IO.H که در ویندوز 32 تعریف شده است , 6 ماکرو تعریف شده که از این شش ماکرو یکی برای ورودی دریافت داده از کاربر و یکی برای خروجی و چهار ماکرو دیگر برای تبدیل داده ها میباشد در ادامه نحوه ی بکارگیری و شرح هر یک از این ماکرو هارا مطرح میکنیم .

1

A to d source

این ماکرو یک رشته عدد را که آدرس شروع آن توسط عملوند source مشخص شده است تبدیل به عدد مکمل دو معادل نموده و در ثبات EAX قرار میگیرد به عبارت دیگر رشته را تبدیل به عدد میکند .

1

SOURCE

Main memory

NULL

‘7’

‘5’

‘8’

‘9’

‘\0’

A to D

EAX : 75894Byte


2 مورد نظر درون یک ثبات قرار دارد ثبات های عمومی (

D to A Destination source

این ماکرو داده ی 4 بایتی قرار گرفته یا مشخص شده در عملوند SOURCE را به یک رشته حداکثر به طول 11 بایتی تبدیل نموده و آن را در رشته ای از حافظه که آدرس شروع آن توسط DESTINATION مشخص شده است قرار میدهد .

2

Destination SOURCE

Main memory

NULL

‘-’

‘4’

‘9’

‘7’

‘3’

‘\0’

D to A

EAX : -49734Byte

3

A to W source

این ماکرو یک رشته عددی را که آدرس شروع آن در عملوند SOURCE قرار دارد تبدیل به عدد مکمل 2 معادل نمونه و در ثبات AX قرار میدهد .

3

SOURCE

Main memory

NULL

‘-’

‘7’

‘2’

‘\0’

A to W

AX : -722Byte


W to A Destination source مورد نظر درون یک ثبات قرار دارد ثبات های عمومی (

4

4

این ماکرو عدد مکمل دو 2بایتی مشخص شده توسط عملوند SOURCE را به رشته ی عددی با حد اکثر طول 6 کاراکتر تبدیل نموده و آن را در رشته ای از حافظه که آدرس شروع آن توسط DESTINATION مشخص شده است قرار میدهد .

DESTINATON SOURCE

Main memory

NULL

‘5’

‘0’

‘\0’

W to A

AX : 502Byte

Input Destination, length

5

این ماکرو رشته ای حد اکثر به طول length را از ورودی دریافت میکند ودر رشته ای در حافظه که آدرس شروع آن توسط عملوند destination مشخص شده است قرار میگیرد .

5

output source, [length]

6

این ماکرو رشته ای را که آدرس شروع آن توسط عملوند source مشخص شده است تا رسیدن به کاراکتر null در خروجی نشان میدهد .

6

Length = طول

destination= مقصد

source= مبدا


دستورالعمل ها در اسمبلی : مورد نظر درون یک ثبات قرار دارد ثبات های عمومی (

ج6

دستورالعمل های انتقال داده در حافظه :

: move

پردازنده 80x86 دستورالعمل move را جهت انتقال داده در حافظه در اختیار برنامه نویس قرار داده در حافظه در اختیار برنامه نویس قرار میدهد , شکل کلی دستورالعمل به صورت زیر است , این دستورالعمل داده ی موجود در عملوند source را در destination کپی میکند .

MOV Destination , source ; destination  source

Example : MOV EAX , EDX ; Copies data in EDX in to EAX

Example : MOV NUMBER , EAX ; Copies data in ECX in to a variable whose name is number

: Ex change

پردازنده 80x86 دستورالعمل ex change را جهت جا به جا نمودن محتوای حافظه در اختیار برنامه نویس قرار میدهد , شکل کلی این دستورالعمل به صورت زیر است , این دستورالعمل محتوای destination1 را با محتوای destination 2 عوض میکند .

XCHG Destination1 , destination2 ; destination1  destination 2

Example : XCHG EAX , EDX ; swap value of EAX and value of EDX


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

1. MOV number 1 , number 2 ; error

2. هر تلاشی جهت انتقال عملوند بلا واسطه به ثبات های سگمنت .

2. MOV CS , OF 9BH ; error

3. هر تلاشی جهت انتقال محتوای یک ثبات سگمنت به ثبات سگمنت دیگر .

3.MOV CS , DS; error

4. هر گونه انتقال از یا به ثبات اشاره گر دستورالعمل.

4.MOV EIP , 1B 4CH; error

5. هر گونه نقل و انتقالی به ثبات فلگ.

5.MOV EAX , EFLAG; error

6. هر گونه نقل و انتقالی که عملوند ها هم اندازه نباشند .

6. MOV EBX , CL; error

  • محدودیت های ذکر شده در دستورالعمل MOV راجع به دستورالعمل XCHG نیز صادق است .


دستورالعمل های جمع و تفریق مکمل دو :

ADD : پردازنده ی 80X86 دستورالعمل ADD را جهت انجام عمل جمع مکمل 2 در اختیار برنامه نویس قرار میدهد شکل کلی آن به صورت زیر است , این دستورالعمل داده ی موجود در عملوندdestination را با داده ی موجود در source جمع زده و نتیجه را در عملوند destination قرار میدهد:

ADD Destination , source ; destination  destination + source

sub : پردازنده ی 80X86 دستورالعملsub را جهت انجام عمل تفریق مکمل 2 در اختیار برنامه نویس قرار میدهد شکل کلی آن به صورت زیر است , این دستورالعمل داده ی موجود در عملوندsource را با داده ی موجود در destination تفریق نموده و نتیجه را در عملوند destination قرار میدهد:

sub Destination , source ; destination  destination - source

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

inc Destination; destination  destination + 1


DEC دو :: این دستورالعمل محتوای عملوند خود را یک واحد کاهش میدهد شکل کلی آن به صورت زیر است .

DEC Destination; destination  destination - 1

NEG: این دستورالعمل از عملوند خود مکمل 2 میگیرد شکل کلیش به صورت زیر است .

NEG Destination; destination  - destination


ج7 دو :

دستورالعمل های ضرب:

پردازنده 80x86 دستورالعمل های mull , I mull را جهت انجام عملیات ضرب مکمل 2 در اختیار برنامه نویس قرار میدهد دستورالعمل mull جهت ضرب اعداد صحیح مثبت و دستورالعمل I mull جهت ضرب اعداد صحیح علامتدار مورد استفاده قرار میگیرند لازم به ذکر است که دستورالعمل mull بسیار سریع تر از دستورالعملI mull اجرا میشود در ادامه به شرح هر یک از این دستورالعمل ها خواهیم پرداخت .

mull : چنانچه پیشتر مطرح گردید این دستورالعمل جهت ضرب اعداد صحیح مثبت مورد استفاده قرار میگیرد شکل کلی این دستوروالعمل به صورت زیر است .

Mull source ;

1. عملوند source در این دستورالعمل میتواند یک ثبات و یا آدرس داده ای در حافظه ی اصلی (نام یک متغییر)باشد اما استفاده از عملوند بلاواسطه در دستورالعمل mull موجب بروز خطا میشود عملوند دیگر به صورت ضمنی آکومولاتور (انباره) میباشد که با توجه به اندازه source تعیین میگردد اگر عملوند source یک بایتی باشد عملوند دوم به صورت ضمنی ثبات AL است و حاصا ضرب که دو بایتی است در ثبات AX قرار میگیرد .اگر source دو بایتی باشد عملوند دیگر به صورت ضمنی ثبات AX است و نتیجه که چهار بایتی است به صورت مشترک در ثبات های DX:AX قرار میگیرد همچنین اگر عملوند DX و دو بایت کم ارزش در ثبات AX قرار میگیرد همچنین اگر عملوند source چهار بایتی باشد عملوند دیگر به صورت ضمنی EAX میباشد و نتیجه که هشت بایتی است EDX : EAX قرار میگیرد . به این ترتیب که چهار بایت پر ارزش در ثبات EDX و چهار بایت کم ارزش در ثبات EAX قرار میگیرد .


1 BYTE دو :

AL

2 BYTE

SOURCE

2 BYTE

AX

1

*

2 BYTE

AX

2 BYTE

SOURCE

2 BYTE

DX

2 BYTE

AX

2

*

4 BYTE

EAX

4 BYTE

SOURCE

4 BYTE

EDX

4 BYTE

EAX

3

*

1 ) ( AL * SOURCE  AX )

2) ( AX * SOURCE  DX : AX )

3) ( EAX * SOURCE  EDX : EAX)

1) Example :

MOV AX,10

MOV BX,5

MULL BX,DXAX  BX * AX (DXAX)  B * 10  AX = 50 DX = 0

MULL 2 ; Error


I mull دو : : چنانچه پیشتر مطرح گردید این دستورالعمل جهت ضرب اعداد صحیح علامت دار مورد استفاده قرار میگیرد این دستورالعمل به 3 شکل مورد استفاده قرار میگیرد.

1) I Mull source

این شکل از به کار گیری دستورالعمل I mull همانند mull میباشد با این تفاوت که دستورالعمل mull جهت ضرب اعداد صحیح مثبت و دستورالعمل I mull جهت ضرب اعداد صحیح علامتدار مورد استفاده قرار میگیرد عملوند بلاواسطه باعث بروز خطا خواهد شد و تمام موارد قبل برای mull source برای I mull نیز صادق است .

2) I Mull register source ; register  register * source

2. در این شکل از به کار گیری دستورالعمل I mull عملوند source میتواند یک ثبات آدرس داده ای در حافظه (نام یک متغییر) و یا یک عملوند بلاواسطه باشد عملوند دیگر نیز (register) ثباتی است که به عنوان مقصد عملیات ضرب عمل میکند دقت کنید که در این دستورالعمل عملوند رجیستر وسرسش میبایست هم اندازه باشند این عملوند ها می توانند 2بایتی یا 4 بایتی باشند به کارگیری عملوند یک بایتی موجب بروز خطا می شود اگر عملوند رجیستر قادر به ذخیره سازی حاصل ضرب نباشد1=CF=OF خواهد بود .

2) Example :

MOV AX,50

I MULL AX , 2 ;AX  100

I MULL AL , 2 ; Error

I MULL AL , CH ; Error

I MULL AX , BL ; Error


3) I Mull register , source immediate ; register دو : source * immediate

2. در این شکل از به کار گیری دستورالعمل I mull عملوند register 1 بایتی است که نتیجه ضرب را نگه میدارد .عملوند source آدرس داده ای در حافظه اصلی (نام یک متغییر) میباشد عملوند سرس و رجیستر باید هم اندازه باشد واندازه آن ها نمیتوانند یک بایتی باشد .عملوند immediate نیز یک عملوند بلا واسطه است در صورتی که ثبات رجیستر توانایی ذخیره سازی حاصل ضرب را نداشته باشد 1=CF=OF خواهد بود .

3) Example :

Data

number D Word 50

code

I MULL EBX,NUMBER,10;EBX 50*10


ج8 دو :

دستورالعمل های تقسیم:

پردازنده 80x86 دستورالعمل های Div , I Div را جهت انجام عملیات تقسیم در اختیار برنامه نویس قرار میدهد دستورالعمل div جهت ضرب اعداد صحیح مثبت و دستورالعمل I div جهت ضرب اعداد صحیح علامتدار مورد استفاده قرار میگیرند لازم به ذکر است که دستورالعمل div بسیار سریع تر از دستورالعمل I divاجرا میشود در ادامه به شرح هر یک از این دستورالعمل ها خواهیم پرداخت شکل کلی این دستورات به صورت زیر است .

+در نظر میگیرد

Div source

+و - در نظر میگیرد

I Div source

در این ساختار ها عملوند source مقسوم علیه تقسیم را نشان می دهد که میتواند نام نام یک ثبات ویا آدرس داده ای در حافظه ی اصلی (نام یک متغییر) باشد .عملوند دیگر (مقسوم) به صورت ضمنی با توجه به اندازه ی عملوند source تعیین می شود اگر عملوند source یک بایتی باشد در این صورت مقسوم که دو بایتی است در ثبات ax قرار دارد و پس از انجام تقسیم خارج قسمت در ثبات al و باقیمانده در ثبات ah قرار می گیرد . اگرعملوند دو بایتی باشد مقسوم که 4 بایتی است در ثبات های DX : AX قرار دارد پس از انجام تقسیم خارج قسمت در ثبات AX وباقی مانده در ثبات DX قرار میگیرد اگر عملوند source 4 بایتی باشد در این صورت مقسوم که 8 بایتی است در ثبات های EDX : EAX قرار دارد و پس از انجام تقسیم خارج قسمت در ثبات EAX و باقی مانده در ثبات EDX قرار میگیرد در ضمن لازم به ذکر است که عملوند بلاواسطه در دستورالعمل های تقسیم موجب بروز خطا میشود .


AX دو :

AL=1B

AH=1B

2 BYTE

AX

1 BYTE

SOURCE

باقی مانده

AX

خارج قسمت

1

÷

باقی مانده

خارج قسمت

2 BYTE

DX

2 BYTE

AX

2 BYTE

SOURCE

2 BYTE

DX

2 BYTE

AX

2

÷

باقی مانده

خارج قسمت

4 BYTE

EDX

4 BYTE

EAX

4 BYTE

SOURCE

4 BYTE

EDX

4 BYTE

EAX

3

÷

Example :

. Data

number D Word 10

. Code

باقی ماندهAH خارج قسمت DIV CL; AX ÷ CL  AL

باقی ماندهDX خارج قسمت DIV BX; DXAX ÷ BX  AX

باقی ماندهEDX خارج قسمت I DIV NUMBER; EDX:EAX ÷ NUMBER EAX

DIV 5; ERROR


در صورتی که پیش از انجام عملیات تقسیم نیاز باشد اندازه ی داده افزایش یابد از دستورالعمل های CBW (CONVERT BYTE TO WORD)و CWD (CONVERT WORD TO DOUBLE ) و (CONVERT DOUBLE TO QUAD WORD)CDQ استفاده می شود .دستورالعمل CBW داده ی موجود در ثبات AL را به ثبات AX بسط می دهد در دستورالعمل CDQ داده ی موجوددر ثبات EAX را به ثبات های EDX : EAX بسط میدهد این دستورالعمل ها جهت بسط داده بیت علامت را در بخش پردازش کپی می نماید .

  • دستورالعمل های فوق بر خلاف دستورالعمل هایی که تا کنون آموخته اید بدون عملوند میباشد .

CBW

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

+127

AL

AH

AX

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

-127

AL

AH

AX


دستورالعمل انتقال داده در حافظه نیز وجود دارد که کمابیش همانند دستورالعمل های CBW,CWD,CDQعمل می نمایند شکل کلی این دستورالعمل ها به صورت زیر است .

MOV ZX REGISTER , SOURCE

MOV SX REGISTER , SOURCE

این دستورالعمل ها داده ی موجود در عملوند SOURCE را به عملوند REGISTER بسط می دهند اگر SOURCE یک بایتی باشد عملوند REGISTER 2بایتی و اگر SOURCE 2بایتی باشد عملوند REGISTER میبایست 4 بایتی باشد .

دستورالعمل MOV ZX بخش کم ارزش REGISTERرا با محتوای عملوند SOURCEو بخش پر ارزش آن را با صفر پرمی کند دستورالعمل MOV SX بخش کم ارزش REGISTER را با محتوای عملوند SOURCE و بخش پر ارزش آن را با بیت علامت عملوند SOURCE پر میکند .

EXAMPLE :

MOV BX,10

MOV ZX EAX,BX

BX

000A h

EAX

0000 000Ah

EXAMPLE :

MOV BL,-128

MOV SX BX,BL

BL

80 h

BX

FF h 80h


جمع وتفریق اعداد بزرگ : نیز وجود دارد که کمابیش همانند دستورالعمل های

پردازنده 80x86 دستورالعمل های SBB ,ADC را جهت انجام عملیات جمع وتفریق اعداد بزرگ در اختیار برنامه نویس قرار میدهد شکل کلی این دستورات به صورت زیر است و معنی هریک در ادامه بیان شده است .

ADC destination , source ; destination  destination + source + CF

SBB destination , source ; destination  destination - source - CF


دستورالعمل های غیر شرطی ودستورالعمل های پرش:

ج9

جهت پیاده سازی ساختار های کنترلی شرطی نظیر IF و CASESWITCH و ساختار های حلقه نظیر FOR,WHILE,DO…WHILE از دستورالعمل های پرش استفاده میشود دستورالعمل های پرش در واقع جهت تغییر ترتیب اجرای برنامه مورد استفاده قرار میگیرد چنانکه به خاطر دارید ثبات EIP نشان دهنده ی آدرس دستورالعمل های پرش با قرار دادن آدرس مقصد پرش در ثبات EIP ترتیب اجرا را تغییر می دهند دستورالعمل های شرطی و غیر شرطی تقسیم می شوند که در ادامه به شرح هر یک خواهیم پرداخت.

پرش غیر شرطی :

پردازنده 80x86 دستورالعمل JUMPرا جهت انجام عملیات پرش غیر شرطی در اختیار برنامه نویس قرار میدهد این دستورالعمل معادل دستور GO TO در برنامه نویسی سطح بالا می باشد شکل کلی این دستورات به صورت زیر است و در ساختار زیرstatement address آدرس مقصد پرش می باشد و که با اجرای این دستورالعمل در ثبات EIP قرار میگیرد ونشان دهنده ی دستورالعملاست که پس از دستورالعمل JMP میبایست اجرا شود .

statement - address

Example :

LBL1 : MOV AX ,244

JMP LBL2

LBL2 : ADD ECX, EDX

JMP LBL1

بپر به جایی که LBL1 به آن اشاره میکند .


پرش شرطی : ودستورالعمل های پرش:

پردازنده 80x86 دستورالعمل های متنوعی را جهت انجام عملیات پرش شرطی در اختیار برنامه نویس قرار میدهد این دستورالعمل ها با توجه به نتایج حاصل از محاسبات پیشین عملیات مقایسه و با توجه به بیت های وضعیت ثبات FLAG دو مورد پرش یا عدم پرش تقسیم می کند شکل کلی این دستورات به صورت زیر است و در ساختار زیرstatement address آدرس مقصد پرش می باشد و سه خط تیره شرط پرش را نشان می دهد که با توجه به جدولی که در ادامه ذکر می کنیم تعیین می شود .

J--- statement - address

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

پایین

مساوی

A=ABOVE=

بالا

B=BELOW=

E=EQUAL=

نه

بزرگ

N=NOT=

G=GREAT=

کوچک

L=LITTLE=


دستورالعمل های ودستورالعمل های پرش:CMP

  • در صورتی که نیاز باشد پیش از انجام عملیات پرش شرطی داده ها با هم مقایسه شوند دستورالعمل CMP مورد استفاده قرار میگیرد ساختار کلی دستور به شکل زیر است که در این دستورالعمل عمل مقایسه را با تقسیم OPERAND 2 از OPERAND 1 انجام میدهد پس از انجام عملیات بیت های وضعیت ثبات فلگ را مقدار دهی میکند مقادیر این بیت های وضعیت بعدا توسط دستورالعمل های پرش شرطی جهت تصمیم گیری در مورد انجام یا عدم انجام پرش مورد استفاده قرار میگیرد .

CMP OPERAND1.OERAND2

Example :

CMP EDX . EAX

CMP CL , BH

CMP AX , 1024

1024 را از AX کم میکند

+ باشد AX از 1024 بیشتر است.

- باشد AX از 1024 کمتر است.


پایان ودستورالعمل های پرش:


ad