Professional Documents
Culture Documents
محمد صالح طهرانی تمارین ریزپردازنده
محمد صالح طهرانی تمارین ریزپردازنده
محمد صالح طهرانی تمارین ریزپردازنده
به نام محمد صالح طهرانی کد دانشجویی 4012170118 :تمارین فصل 3و 4و 5کتاب ریزپردازنده
مزیت اصلی حالت آدرسدهی غیرمستقیم نسبت به آدرسدهی مستقیم ،انعطافپذیری بیشتر در دسترسی به
حافظه است .در آدرس دهی مستقیم ،آدرس دقیق داده مشخص میشود ،اما در حالت غیرمستقیم ،آدرس از
طریق یک رجیستر یا مکان حافظه واسطه تعیین میشود .این روش به پردازنده اجازه میدهد تا به دادههای
بیشتری دسترسی داشته باشد و عملیات پیچیدهتری انجام دهد .به عنوان مثال ،میتوانیم از یک رجیستر برای
اشاره به آدرسهای مختلف استفاده کنیم که باعث افزایش قابلیت استفاده مجدد و کاهش تعداد
دستورالعملهای الزم میشود .همچنین ،حالت آدرسدهی غیرمستقیم امکان اجرای دستورالعملهایی با
آدرسهای محاسبه شده را فراهم میکند که در برنامهنویسی پیچیده و سیستمهای دینامیک بسیار مفید است.
برای اینکه یک برنامه بر روی پردازندههای 8088/8086قابلیت انتقال داشته باشد ،باید از آدرسدهی نسبی
استفاده کند تا بتواند در هر جای حافظه اجرا شود بدون نیاز به تغییر آدرسهای مطلق این کار معموالً با
استفاده از ثباتهای برنامهریزی شده و دستورالعملهایی که از آدرسهای نسبی استفاده میکنند ،انجام
میشود .همچنین ،برنامهها باید به گونهای نوشته شوند که وابسته به مکان خاصی در حافظه نباشند و بتوانند به
صورت مستقل از مکان اجرا شوند .به این معنا که کدهای برنامه باید به گونهای باشند که بتوانند در هر بخشی
از حافظه قرار گیرند و همچنان به درستی کار کنند .برای اینکه برنامهها قابل جابهجایی باشند ،باید از
دستورالعملهایی استفاده شود که مستقل از مکان حافظه هستند ،مانند دستورالعملهایی که از آدرسدهی
مستقیم استفاده نمیکنند و به جای آن از ثباتها یا متغیرهای نسبی استفاده میکنند.
دستورالعمل CMPSB REPNEدر اسمبلی x86برای مقایسه پشت سر هم بایتهای دو رشته استفاده
میشود و تا زمانی که شرایط خاصی برقرار باشد ،این عملیات را تکرار میکند .این دستورالعمل تحت دو شرط
کنترل برنامه را به دستورالعمل بعدی منتقل میکند:
.1پرچم صفر) : (ZFاگر در طی مقایسه ،دو بایت متفاوت باشند ،پرچم صفر ) (ZFروی 0تنظیم میشود
و دستورالعمل ( REPNEتکرار تا زمانی که نامساوی باشد) باعث میشود که اجرای دستورالعملهای
بعدی ادامه یابد.
.2ثبات شمارنده ( CXیا : ) ECXاگر مقدار ثبات شمارنده به صفر برسد ،حتی اگر پرچم صفر )(ZF
تنظیم نشده باشد ،دستورالعمل CMPSB REPNEمتوقف میشود و کنترل به دستورالعمل بعدی
منتقل میگردد.
این دو شرط اطمینان میدهند که دستورالعمل CMPSB REPNEفقط تا زمانی که دو رشته متفاوت باشند یا
تعداد مشخصی از بایتها مقایسه شده باشند ،اجرا میشود .اگر هر دو شرط برقرار باشند ،دستورالعمل بعدی
اجرا خواهد شد.
در ریزپردازنده های 8088 / 8086 ،دستور Right Arithmetic Shiftیا SARیک ش یفت حسابی به
سمت راست را انجام می دهد .این دستور محتوای رجیستر یا مقدار حافظه مشخصشده را به تعداد بیتی که در
CLذخیره شده است به سمت راست ش یفت می دهد و بیت عالمت را حفظ می کند .
ابتدا اعداد 175و 58را در AL ,CHمی ری زیم و سپس انها را باهم حمع می کنیم و سپس عدد را منفی می
کنیم و حاصل میشود H16که مقدار نهایی ALاست .
بعد از اجرای دستور ، H80 INTدستورالعمل بعدی از مکان حافظه ای واکشی می شود که در جدول وقفه در
آدرس h00080مشخص شده است .این مکان حافظه شامل آدرس سگمنت و مقدار جابه جایی معمولی وقفه
است که پردازنده به آنجا پرش می کند.
معادل چهار دستور عمل باال می باشند و این دستور عمل مقدارهای دو ثبات راXCHG AX, BX دستور عمل
. جابه جا می کند
) 3 فصل15 سوال
BL = 00H, AL = 2DH
CF = 0 , PF = 1 , AF = 0 , ZF = 1 , SF = 0 , OF = 0
) 3 فصل16 سوال
.DATA
.CODE
ORG 100H
START :
IN AL, 8800H
TEST AL, 02H
JZ START
JMP START
END START
) 3 فصل17 سوال
.DATA
.CODE
ORG 100H
MOV AX, 80A0H
MOV DS, AX
MOV ES, AX
END
) 3 فصل18 سوال
.DATA
.CODE
ORG 100H
XCHG AX, BX
XCHG SI, DI
END
) 3 فصل19 سوال
.CODE
ORG 100H
CALL StoreData
StoreData PROC NEAR
MOV [DI], AL
MOV [DI+1], AL
MOV [DI+2], AL
MOV [DI+3], AL
RET
StoreData ENDP
END
) 3 فصل20 سوال
.DATA
DATA1 DW 1234H, 5678H, 9ABCH, DEF0H, 1234H
.CODE
ORG 100H
CALL FAR PTR LoadWords
LoadWords PROC FAR
PUSH DS
PUSH AX
MOV AX, 0CDH
MOV DS, AX
MOV AX, [DATA1]
MOV BX, [DATA1+2]
MOV CX, [DATA1+4]
MOV DX, [DATA1+6]
MOV SI, [DATA1+8]
POP AX
POP DS
RETF
LoadWords ENDP
END
) 3 فصل21 سوال
.DATA
LIST DB 300H DUP(0)
FOUND_ADDR DW 0
.CODE
ORG 100H
MOV CX, 300H
MOV SI, OFFSET LIST
SEARCH_LOOP:
MOV AL, [SI]
CMP AL, 66H
JE FOUND
INC SI
LOOP SEARCH_LOOP
NOT_FOUND :
JMP END_PROGRAM
FOUND:
MOV [FOUND_ADDR], SI
END_PROGRAM:
HLT
END
) 3 فصل22 سوال
.DATA
DATA SEGMENT
DB 150H DUP(?)
DATA ENDS
.CODE
ORG 100H
MOV AX, DATA
MOV ES, AX
MOV DI, 0
MOV CX, 150H
MOV AL, 00H
CLD
REP STOSB
HLT
END
) 3 فصل23 سوال
.CODE
ORG 100H
START:
MOV CX, 5
CALL Power3
HLT
Power3 PROC NEAR
PUSH AX
PUSH DX
MOV AX, CX
MUL CX
MUL AX
POP DX
POP AX
RET
Power3 ENDP
END START
سوال 25فصل ) 3
در پردازنده 88/8086،استفاده از دستورات منطقی می تواند راهی موثرتر و کم حجم تر برای صفر کردن و
تست صفر بودن ثبات ها باشد .به جای استفاده از دستورات MOVو ، CMPمی توان از دستورات منطقی
مانند XORو TESTاستفاده کرد که هم سریع تر و هم کم حجم تر هستند.
برای صفر کردن یک ثبات ،میتوان از دستور XORاستفاده کرد .این دستور با انجام عملیات XORبین ثبات و
خودش ،مقدار ثبات را صفر می کند .
DATA_SEG SEGMENT
)?(TABLEA DW 101 DUP
(?)TABLEB DW 97 DUP
DATA_SEG ENDS
CODE_SEG SEGMENT
ASSUME CS:CODE_SEG, DS:DATA_SEG
START:
MOV AX, DATA_SEG
MOV DS, AX
MOV SI, 4
MOV DI, 0
MOV CX, 97
NEXT_ELEMENT :
]MOV AX, [SI-4
]MOV BX, [SI-2
]MOV CX, [SI
]MOV DX, [SI+2
MOV EX, [SI+4]
CMP AX, BX
JBE SKIP1
XCHG AX, BX
SKIP1 :
CMP BX, CX
JBE SKIP2
XCHG BX, CX
SKIP2 :
CMP CX, DX
JBE SKIP3
XCHG CX, DX
SKIP3 :
CMP DX, EX
JBE SKIP4
XCHG DX, EX
SKIP4 :
CMP AX, BX
JBE SKIP5
XCHG AX, BX
SKIP5 :
CMP BX, CX
JBE SKIP6
XCHG BX, CX
SKIP6 :
CMP CX, DX
JBE SKIP7
XCHG CX, DX
SKIP7 :
CMP AX, BX
JBE SKIP8
XCHG AX, BX
SKIP8 :
CMP BX, CX
JBE SKIP9
XCHG BX, CX
SKIP9 :
MOV [DI], CX
ADD SI, 2
ADD DI, 2
LOOP NEXT_ELEMENT
MOV AX, 4C00H
INT 21H
CODE_SEG ENDS
END START
) 3 فصل28 سوال
ORG 100H
START :
MOV AX, 0500H
MOV DS, AX
MOV BX, [0]
MOV CX, BX
CMP BX, 0
JE ZERO_RESULT
MOV AX, 0
MOV DX, 1
SUM_LOOP:
ADD AX, DX
ADD DX, 2
LOOP SUM_LOOP
JMP END_PROGRAM
ZERO_RESULT:
MOV AX, 0
END_PROGRAM:
MOV AH, 4CH
INT 21H
END START
فصل 4
سوال 1فصل ) 4
ریزپردازندههای 8086و 8088از محصوالت مهم اینتل در دهههای 1970و 1980هستند 8086 .دارای
گذرگاه داده 16بیتی و 8088دارای گذرگاه 8بیتی است ،که اولی سرعت پردازش باالتری دارد و دومی با
تجهیزات 8بیتی رایج سازگاری بهتری دارد .هر دو از گذرگاه آدرس 20بیتی استفاده میکنند و میتوانند تا 1
مگابایت حافظه را آدرسدهی کنند 8086 .به دلیل نیاز به تجهیزات جانبی 16بیتی بیشتر در سیستمهای
پیشرفتهتر و ایستگاههای کاری استفاده میشد ،در حالی که 8088به دلیل هزینه کمتر و سازگاری با تجهیزات
8بیتی در کامپیوترهای شخصی مانند IBM PCمورد استفاده قرار گرفت .به طور کلی ،تفاوت اصلی در عرض
گذرگاه داده و تأثیر آن بر عملکرد و هزینه است.
شرکت اینتل در طراحی تراشه 8086از خطوط آدرس/داده تسهیمشده به دالیل زیر استفاده کرده است:
کاهش تعداد پینها :این روش باعث کاهش تعداد پینهای تراشه میشود که اندازه فیزیکی و هزینه تولید تراشه
را کم میکند.
کاهش هزینه و پیچیدگی طراحی :با کاهش پینها ،هزینههای بستهبندی و طراحی مدارهای چاپی نیز کاهش
مییابد و مدارهای متصل به تراشه سادهتر و ارزانتر میشوند.
استفاده بهینه از منابع :در این روش ،پینها به صورت مشترک برای خطوط آدرس و داده استفاده میشوند که
بهرهوری منابع تراشه را افزایش میدهد و نیاز به پینهای اضافی را برطرف میکند.
سازگاری با فناوریهای موجود :استفاده از خطوط تسهیمشده با فناوریها و مدارهای واسط موجود در زمان
طراحی سازگارتر بود.
به طور خالصه ،اینتل با استفاده از خطوط آدرس/داده تسهیمشده در تراشه 8086توانست هزینهها را کاهش
داده ،طراحی را سادهتر کند و منابع موجود را بهینهتر بهرهبرداری نماید.
در پردازندههای 8086و ،8088بیتهای وضعیت S3و S4نمایانگر وضعیت فعلی پردازنده هستند و برای
مدیریت سیستم و گسترش قابلیتها به کار میروند .این بیتها به طور خاص وضعیت سگمنت پشته را نیز
مشخص میکنند و با استفاده از آنها و تکنیکهای مدیریت بانک حافظه ،محدودیت فضای آدرسدهی به 1
مگابایت را می توان دور زد و به حافظه بیشتری دسترسی پیدا کرد.
در پردازندههای 8086و ،8088پایههای QS0و QS1وضعیت صف دستورالعملها را نشان میدهند .این
اطالعات به پردازندههای کمکی مانند 8087کمک میکنند تا هماهنگی در اجرای دستورالعملها ،جلوگیری از
برخورد در دسترسی به حافظه ،و بهینهسازی اجرا را انجام دهند.
در پردازندههای 8086و ،8088پایه TESTو دستور WAITبرای هماهنگی با دستگاههای خارجی مانند
پردازندههای کمکی استفاده میشوند .پایه TESTوضعیت اجازهدهی به پردازنده را نشان میدهد و دستور
WAITبه پردازنده این امکان را می دهد که در صورت نیاز به اجرای دستورات متوقف شود تا دستگاه جانبی
عملیات خود را تکمیل کند.
در پردازندههای 8086و ،8088پایه LOCKدر حالت بیشینه برای هماهنگی و جلوگیری از تداخل در
دسترسی به منابع مشترک مانند حافظه استفاده میشود .در این حالت:
. 1استفاده از پیشوند :LOCKپردازنده میتواند از پیشوند LOCKدر دستورات خاص استفاده کند ،مانند دستور
XCHG LOCKکه عملیات تبادل را به صورت اتمی و بدون وقفه انجام میدهد.
.2فعالسازی پایه : LOCKهنگام اجرای دستورات با پیشوند ،LOCKپایه LOCKفعال میشود و دسترسی به
منابع مشترک مانند حافظه را قفل میکند ،جلوگیری میکند تا سایر پردازندهها یا دستگاههای جانبی به آن
دسترسی پیدا کنند.
.3غیرفعالسازی پایه : LOCKپس از اتمام دستور با پیشوند ،LOCKپایه LOCKغیرفعال میشود و منابع
مشترک دوباره برای دسترسی از سوی سایر پردازندهها یا دستگاههای جانبی باز میشود.
.4کاربردهای پایه : LOCKاین پایه ابزار حیاتی برای ایجاد عملیات اتمی ،هماهنگی بین پردازندهها در
سیستمهای چندپردازندهای ،و جلوگیری از تداخل در دسترسی به منابع مشترک مانند حافظه است .این امکان
را فراهم میکند که عملیاتهای حساس به زمان را با اطمینان اجرا کرد و از پایداری و بهرهوری سیستم بهبود
بخشید.
به طور کلی ،پایه LOCKدر این پردازندهها ابزاری قدرتمند برای مدیریت منابع و افزایش عملکرد سیستمهای
چندپردازندهای و دستگاههای پیچیده محسوب میشود.
در پردازنده ،8086با تحلیل مقادیر ثبتشده روی سه گذرگاه ،می توان نوع چرخه گذرگاهی در حال اجرا را
شناسایی کرد .مقادیر مورد تحلیل عبارتند از:
با توجه به این مقادیر ،چرخه گذرگاهی در حال اجرا ،چرخه خواندن از حافظه است .پردازنده از آدرس حافظه
H47000دادهای با مقدار C3FH0را خوانده و آن را دریافت کرده است ،در حالی که عملیات نوشتن به حافظه
و دستگاههای ورودی/خروجی در این زمان انجام نمیشود.
در پردازنده ،8086چرخههای حالت ( T1تا )T4برای اجرای دستورات استفاده میشوند و شامل عملیات
مختلفی مانند قرار دادن آدرس روی گذرگاه آدرس و انتقال دادهها هستند.
-چرخه خواندن:
: T1 -پردازنده آدرس را روی گذرگاه آدرس قرار میدهد و سیگنالهای نوع عملیات تنظیم میشوند.
:T2 -سیگنالهای کنترل (مثل )~MEMRفعال میشوند و گذرگاه داده برای دریافت داده آماده میشود.
:T3 -دادهها از حافظه یا دستگاه I/Oبه گذرگاه داده منتقل و توسط پردازنده خوانده میشوند.
:T4 -سیگنالهای کنترلی غیرفعال میشوند و دادههای خوانده شده در ثباتهای داخلی ذخیره میشوند.
در حالت ،T3پردازنده 8086دادهها را از حافظه یا دستگاه I/Oمیخواند و به ثباتهای داخلی منتقل میکند.
عبارت " چرخه کار پالس ساعت متصل به ریزپردازنده 8086باید 33%باشد" به این معناست که پالس ساعت
پردازنده 8086باید به گونهای تنظیم شود که % 33از هر دوره پالس ساعت فعال باشد .این درصد به معنای
زمان فعال بودن پردازنده برای انجام عملیات است.
. 2دوره پالس ساعت ( :) Clock Periodزمان الزم برای تکمیل یک پالس ساعت ،که معکوس فرکانس ساعت
است.
برای مثال ،اگر دوره پالس ساعت 300نانوثانیه باشد %33 ،از آن (یعنی 100نانوثانیه) باید فعال باشد .این
فعال بودن به معنای انجام دستورات ،دسترسی به حافظه و انتقال داده است .باقی زمان میتواند به حالتهای
دیگر مانند تعلیق یا تنظیم اختصاص یابد.
نتیجهگیری:
تنظیم فرکانس ساعت پردازنده 8086باید به گونهای باشد که نسبت %33کارکرد فعال حفظ شود ،تا پردازنده
با کارایی بهینه عمل کند.
در پردازنده ،88/8086برای اجرای دستورالعمل ] MOV AX, [SIبا فرض اینکه DS=H800Bو SI=H1000
است ،آدرس فیزیکی به این صورت محاسبه میشود:
پردازنده داده را از آدرس فیزیکی H9000Bمیخواند .اگر مقدار در این آدرس AAH55باشد ،این مقدار به
ثبات AXمنتقل میشود.
:T1 .1
:T2 .2
:T3 .3
:T4 .4
:T1 .1
:T2 .2
:T3 .3
:T4 .4
این مقادیر به پردازنده 88/8086اجازه میدهند تا عملیات خواندن از حافظه را به درستی انجام داده و دادهها
را به ثبات AXمنتقل کند.
تراشه ، A8284یک مولد ساعت برای ریزپردازندههای 8088/8086است که از کریستال با فرکانس 15
مگاهرتز ( )MHzبرای تولید سیگنالهای ساعت استفاده میکند .فرکانس و چرخه کاری خروجیهای مختلف
این تراشه به شرح زیر است:
این تنظیمات خروجیها فرکانس های مناسب برای هماهنگی و عملیات ریزپردازنده و دستگاههای جانبی را
فراهم میکنند.
سوال 13فصل ) 4
هدف از استفاده از ROMبوت در سیستمهای مبتنی بر ریزپردازنده ، 8086فراهم کردن کد اولیه الزم برای
راهاندازی سیستم و آغاز فرایند بوت شدن است .این ROMحاوی برنامهای است که وظایف ابتدایی مانند
آزمایشهای سختافزاری ( )POSTو بارگذاری سیستم عامل از حافظه جانبی را بر عهده دارد ROM .بوت
معموالً به آدرس فیزیکی ` `FFFF0Hنگاشته میشود ،که نزدیک به پایان فضای آدرسدهی 1مگابایتی
پردازنده 8086است .این مکانیزم اطمینان حاصل میکند که پس از روشن شدن سیستم ،کنترل پردازنده به
طور خودکار به این آدرس منتقل میشود و فرایند بوت آغاز میگردد .آدرس ` ،`FFFF0Hکه تنها 16بایت قبل
از انتهای فضای آدرسدهی است ،محلی ایدهآل برای شروع بوت لودر می باشد که کد بوت را اجرا میکند و
سیستم را راهاندازی میکند.
تفاوت اصلی بین لچ حساس به لبه و لچ شفاف در نحوه واکنش آنها به سیگنال کالک است .لچ حساس به لبه
فقط در لبههای صعودی یا نزولی سیگنال کالک (تغییر وضعیت کالک) فعال میشود و در این لحظات اطالعات
ورودی را ثبت می کند .در مقابل ،لچ شفاف به صورت مداوم در زمانی که سیگنال کالک فعال است (سطح باال یا
پایین) به ورودیها واکنش نشان می دهد و اطالعات ورودی را به خروجی منتقل میکند .این بدان معناست که
لچ شفاف در مدت زمانی که کالک فعال است ،ورودی را به خروجی منتقل میکند ،اما لچ حساس به لبه فقط
در لحظه تغییر لبه کالک به ورودی واکنش نشان میدهد.
در پردازندههای ، 88/8086سیگنال کنترل گذرگاه ~) BHE (Bus High Enableنقش مهمی در مدیریت
دسترسی به نیمههای باالیی و پایینی گذرگاه داده 16بیتی دارد .این گذرگاه به دو بخش 8بیتی تقسیم
میشود :نیمه پایین ( )AD0-AD7و نیمه باال ( .)AD8-AD15سیگنال ~ BHEبه پردازنده اجازه میدهد تا به
طور دقیق دسترسی به هر نیمه را کنترل کند .وقتی پردازنده به نیمه پایین ( )AD0-AD7دسترسی دارد،
~ BHEغیرفعال ( )1و A0فعال ( )0است .در این حالت فقط بایتهای نیمه پایین استفاده میشوند .برای
دسترسی به نیمه باال ) ~BHE ،(AD8-AD15فعال ( )0و A0غیرفعال ( )1است که فقط بایتهای نیمه باال
استفاده میشوند .برای دسترسی به یک کلمه 16بیتی ،هر دو سیگنال ~ BHEو A0غیرفعال ( )0هستند و هر
دو نیمه گذرگاه داده استفاده می شوند .این سیگنال به پردازنده امکان سازگاری با دستگاهها و حافظههای 8
بیتی را میدهد.
سوال 16فصل ) 4
در سیستمهای مبتنی بر پردازنده 88/8086که از پردازندههای کمکی مانند 8087استفاده میکنند،
هماهنگی بین این پردازندهها ضروری است تا از تداخل در دسترسی به حافظه جلوگیری شود .یکی از
سیگنالهای مهم در این زمینه ،سیگنال LOCKاست که نقش کلیدی در حفظ دسترسی انحصاری به گذرگاه
سیستم دارد .وقتی پردازنده 88/8086به دسترسی انحصاری به حافظه نیاز دارد ،سیگنال LOCKفعال میشود
و سایر دستگاهها و پردازندههای کمکی نمی توانند به گذرگاه حافظه دسترسی داشته باشند تا این سیگنال
غیرفعال شود .این اطمینان میدهد که دسترسی به حافظه بدون تداخل انجام میشود .پس از اتمام عملیات و
غیرفعال شدن سیگنال ،LOCKسایر دستگاهها می توانند دوباره به حافظه دسترسی داشته باشند .سیگنالهای
دیگری نظیر TESTبرای بررسی وضعیت پردازنده اصلی و RQ/GTبرای مدیریت درخواست و اعطای دسترسی
به گذرگاه بین پردازنده اصلی و پردازنده کمکی استفاده میشوند .این سیگنالها به هماهنگی و جلوگیری از
تداخل دسترسی به حافظه کمک میکنند.
سیگنال ) : DEN (Data Enableاین سیگنال برای فعال کردن فرستنده/گیرنده های متصل به گذرگاه محلی
کار می رود بتوانند داده ها رو به گذرگاه محلی ارسال کرده یا از آن دریافت کنند.
برای نوشتن یک برنامه به زبان اسمبلی 88/8086که به آدرس فیزیکی FFFF0Hپرش کند ،میتوان از کد زیر
استفاده کرد:
ORG 100h
START:
JMP FFFF0h
END START
این برنامه با استفاده از دستور پرش ( ) JMPبه آدرس فیزیکی FFFF0Hمیرود .
فصل 5
سوال 1فصل ) 5
دستورالعمل INCBINدر پردازندههای 8086و 8088برای قرار دادن فایلهای باینری درون فایل اجرایی
برنامه استفاده میشود .کاربردهای اصلی آن شامل:
.1گنجاندن منابع چندرسانهای مانند تصاویر ،صداها و ویدئوها در فایل اجرایی برنامه برای کاهش تعداد
فایلهای مورد نیاز و سهولت در توزیع نرمافزار.
.2ذخیرهسازی دادههای اولیه مانند جداول ،تنظیمات و دادههای نمونه درون فایل اجرایی برای سادگی در
مدیریت و نگهداری دادهها.
.3افزایش امنیت با قرار دادن فایلهای باینری درون فایل اجرایی ،جلوگیری از دسترسی غیرمجاز به
منابع.
این استفادهها نشان میدهد که INCBINبهبود کارایی ،امنیت و سادگی در توسعه و استفاده از نرمافزارها را
فراهم میکند .
برای بررسی تفاوتها ،مزایا و معایب دو خط برنامه اسمبلی زیر ،ابتدا باید عملکرد هر یک را مورد بررسی قرار
دهیم:
برنامه اول:
.1روش پیادهسازی:
برنامه اول :این دستور با استفاده از ،`pseudo-instruction `timesده بار دستور ` `inc ECXرا تکرار
میکند.
برنامه دوم :این دستور از رجیستر ` `ECXو دستور ` `repبرای تکرار ده بار دستور ` `inc ECXاستفاده
میکند.
.2رجیسترها:
-برنامه اول :برای اجرای کد ،نیازی به استفاده از رجیستر اضافی مانند ` `ECXندارد.
-برنامه دوم :از رجیستر ` `ECXبرای شمارش تعداد تکرارها استفاده میکند.
نتیجهگیری:
انتخاب بین این دو روش بستگی به نیازها و محدودیتهای خاص برنامه دارد .اگر نیاز به کد ساده و خوانا دارید
و حجم کد مهم نیست ،برنامه اول مناسب است .اما اگر بهینهسازی حجم کد و استفاده از دستورات تکرار برای
کاهش حجم کد اهمیت دارد ،برنامه دوم گزینه بهتری خواهد بود .همچنین ،در برنامههایی که نیاز به مدیریت
دقیق رجیسترها دارید ،باید در استفاده از رجیستر ` `ECXدر برنامه دوم دقت بیشتری داشت.
در زبانهای برنامهنویسی ،استفاده از `'` (اپاستروف)( `"` ،دابل کوتیشن) و `` ` `` (بک تیک) دارای تفاوتهای
مختلفی است:
-در بسیاری از زبانها ،رشتههای قرار گرفته در اپاستروف برای نمایش کاراکترهای منفرد یا لیترالهای
کاراکتری استفاده میشوند.
-مثال:
; 'char ch = 'A
-این نوع رشتهها تنها یک کاراکتر را نمایش میدهند و معموالً برای ثابتهای کاراکتری استفاده میشوند.
-در برخی زبانها ،رشتههای قرار گرفته در دابل کوتیشن برای نمایش رشتههای چندکاراکتری ()string
استفاده میشوند.
-مثال:
section .data
msg db "Hello, World!", 0
-در زبان :C
-این نوع رشتهها می توانند شامل چندین کاراکتر باشند و به عنوان یک آرایه از کاراکترها تلقی میشوند.
-بک تیک به طور عمده در زبانهای اسکریپتی مانند Bashو زبانهای برنامهنویسی خاصی مانند Python
برای موارد خاصی مورد استفاده قرار میگیرد ،اغلب برای اجرای دستورهای سیستم و استفاده از خروجی آنها
در رشته.
-مثال:
-در :Bash
جمعبندی:
-تفاوت های این سه نوع کاراکتر در استفاده و مفاهیم مرتبط با زبانهای برنامهنویسی مختلف میباشد`'` -.
برای کاراکترهای منفرد و لیترالهای کاراکتری `"` ،برای رشتههای چندکاراکتری و `` ` `` برای موارد خاصی
مانند اجرای دستورات سیستم استفاده میشوند.
-تفاوت اصلی بین این کاراکترها در نحوه تفسیر و پردازش رشتهها در زبانهای برنامهنویسی مختلف است.
فایلهای ) ELF (Executable and Linkable Formatیکی از قالبهای استاندارد و رایج برای ذخیره و
تبادل فایلهای اجرایی ،شیء ( )objectو کتابخانههای پویا در سیستمهای عامل یونیکس و لینوکس هستند.
ELFیک قالب چندمنظوره برای ذخیره برنامهها و کتابخانهها است که شامل موارد زیر میباشد:
اطالعات مربوط به بخشهای مختلف فایل مانند دادههای برنامه و اطالعات لینک.
شامل کد اجرایی ،دادههای متغیر و اطالعات نمادها برای لینک و اجرا است .
پایان