Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

‫به نام خدا‬

‫تمارین ریز پردازنده‬

‫به نام محمد صالح طهرانی کد دانشجویی ‪ 4012170118 :‬تمارین فصل ‪ 3‬و ‪ 4‬و ‪ 5‬کتاب ریزپردازنده‬

‫سوال ‪ 6‬فصل ‪) 3‬‬

‫مزیت اصلی حالت آدرسدهی غیرمستقیم نسبت به آدرسدهی مستقیم‪ ،‬انعطافپذیری بیشتر در دسترسی به‬
‫حافظه است‪ .‬در آدرس دهی مستقیم‪ ،‬آدرس دقیق داده مشخص میشود‪ ،‬اما در حالت غیرمستقیم‪ ،‬آدرس از‬
‫طریق یک رجیستر یا مکان حافظه واسطه تعیین میشود‪ .‬این روش به پردازنده اجازه میدهد تا به دادههای‬
‫بیشتری دسترسی داشته باشد و عملیات پیچیدهتری انجام دهد‪ .‬به عنوان مثال‪ ،‬میتوانیم از یک رجیستر برای‬
‫اشاره به آدرسهای مختلف استفاده کنیم که باعث افزایش قابلیت استفاده مجدد و کاهش تعداد‬
‫دستورالعملهای الزم میشود‪ .‬همچنین‪ ،‬حالت آدرسدهی غیرمستقیم امکان اجرای دستورالعملهایی با‬
‫آدرسهای محاسبه شده را فراهم میکند که در برنامهنویسی پیچیده و سیستمهای دینامیک بسیار مفید است‪.‬‬

‫سوال ‪ 7‬فصل ‪) 3‬‬

‫برای اینکه یک برنامه بر روی پردازندههای ‪ 8088/8086‬قابلیت انتقال داشته باشد‪ ،‬باید از آدرسدهی نسبی‬
‫استفاده کند تا بتواند در هر جای حافظه اجرا شود بدون نیاز به تغییر آدرسهای مطلق این کار معموالً با‬
‫استفاده از ثباتهای برنامهریزی شده و دستورالعملهایی که از آدرسهای نسبی استفاده میکنند‪ ،‬انجام‬
‫میشود‪ .‬همچنین‪ ،‬برنامهها باید به گونهای نوشته شوند که وابسته به مکان خاصی در حافظه نباشند و بتوانند به‬
‫صورت مستقل از مکان اجرا شوند‪ .‬به این معنا که کدهای برنامه باید به گونهای باشند که بتوانند در هر بخشی‬
‫از حافظه قرار گیرند و همچنان به درستی کار کنند‪ .‬برای اینکه برنامهها قابل جابهجایی باشند‪ ،‬باید از‬
‫دستورالعملهایی استفاده شود که مستقل از مکان حافظه هستند‪ ،‬مانند دستورالعملهایی که از آدرسدهی‬
‫مستقیم استفاده نمیکنند و به جای آن از ثباتها یا متغیرهای نسبی استفاده میکنند‪.‬‬

‫سوال ‪ 8‬فصل ‪) 3‬‬

‫دستورالعمل ‪ CMPSB REPNE‬در اسمبلی ‪ x86‬برای مقایسه پشت سر هم بایتهای دو رشته استفاده‬
‫میشود و تا زمانی که شرایط خاصی برقرار باشد‪ ،‬این عملیات را تکرار میکند‪ .‬این دستورالعمل تحت دو شرط‬
‫کنترل برنامه را به دستورالعمل بعدی منتقل میکند‪:‬‬
‫‪ .1‬پرچم صفر)‪ : (ZF‬اگر در طی مقایسه‪ ،‬دو بایت متفاوت باشند‪ ،‬پرچم صفر )‪ (ZF‬روی ‪ 0‬تنظیم میشود‬
‫و دستورالعمل ‪( REPNE‬تکرار تا زمانی که نامساوی باشد) باعث میشود که اجرای دستورالعملهای‬
‫بعدی ادامه یابد‪.‬‬
‫‪ .2‬ثبات شمارنده (‪ CX‬یا ‪ : ) ECX‬اگر مقدار ثبات شمارنده به صفر برسد‪ ،‬حتی اگر پرچم صفر )‪(ZF‬‬
‫تنظیم نشده باشد‪ ،‬دستورالعمل ‪ CMPSB REPNE‬متوقف میشود و کنترل به دستورالعمل بعدی‬
‫منتقل میگردد‪.‬‬

‫این دو شرط اطمینان میدهند که دستورالعمل ‪ CMPSB REPNE‬فقط تا زمانی که دو رشته متفاوت باشند یا‬
‫تعداد مشخصی از بایتها مقایسه شده باشند‪ ،‬اجرا میشود‪ .‬اگر هر دو شرط برقرار باشند‪ ،‬دستورالعمل بعدی‬
‫اجرا خواهد شد‪.‬‬

‫سوال ‪ 9‬فصل ‪) 3‬‬

‫در ریزپردازنده های ‪ 8088 / 8086 ،‬دستور ‪ Right Arithmetic Shift‬یا ‪ SAR‬یک ش یفت حسابی به‬
‫سمت راست را انجام می دهد ‪ .‬این دستور محتوای رجیستر یا مقدار حافظه مشخصشده را به تعداد بیتی که در‬
‫‪ CL‬ذخیره شده است به سمت راست ش یفت می دهد و بیت عالمت را حفظ می کند ‪.‬‬

‫‪BL‬‬ ‫=‬ ‫مقدار نهایی ‪11101100‬‬

‫سوال ‪ 10‬فصل ‪) 3‬‬

‫ابتدا اعداد ‪ 175‬و ‪ 58‬را در ‪ AL ,CH‬می ری زیم و سپس انها را باهم حمع می کنیم و سپس عدد را منفی می‬
‫کنیم و حاصل میشود ‪ H16‬که مقدار نهایی ‪ AL‬است ‪.‬‬

‫سوال ‪ 11‬فصل ‪) 3‬‬

‫بعد از اجرای دستور‪ ، H80 INT‬دستورالعمل بعدی از مکان حافظه ای واکشی می شود که در جدول وقفه در‬
‫آدرس ‪ h00080‬مشخص شده است‪ .‬این مکان حافظه شامل آدرس سگمنت و مقدار جابه جایی معمولی وقفه‬
‫است که پردازنده به آنجا پرش می کند‪.‬‬

‫سوال ‪ 12‬فصل ‪) 3‬‬

‫‪JMP (Jump) .1‬‬


‫‪(Call Subroutine) CALL .2‬‬
(Return) RET .3
(Interrupt) INT .4
(Interrupt Return) IRET .5
) 3 ‫ فصل‬13 ‫سوال‬

‫ معادل چهار دستور عمل باال می باشند و این دستور عمل مقدارهای دو ثبات را‬XCHG AX, BX ‫دستور عمل‬
. ‫جابه جا می کند‬

) 3 ‫ فصل‬15 ‫سوال‬

AL = CH4(01101100b) ‫مقدار اولیه‬

CF=1 ‫مقدار اولیه‬

4CH - 3EH - CF = 01101100B - 00111110B - 1 = 01101100B - 00111111B = 00101101B (2DH)

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‬استفاده کرد‪ .‬این دستور با انجام عملیات ‪ XOR‬بین ثبات و‬
‫خودش‪ ،‬مقدار ثبات را صفر می کند ‪.‬‬

‫به عنوان مثال ‪:‬‬

‫‪XOR AX, AX‬‬


‫می کند‪.‬‬ ‫این دستور به طور موثری و با حجمی کمتر از ‪ H00 ,AX MOV‬مقدار ثبات ‪ AX‬را صفر‬

‫تست صفر بودن ثبات با استفاده از ‪TEST‬‬


‫برای تست صفر بودن یک ثبات‪ ،‬می توان از دستور ‪ TEST‬استفاده کرد‪ .‬این دستور بدون تغییر مقدار ثبات‪ ،‬بیت‬
‫ها ی مشخصی را با هم ‪ AND‬می کند و پرچم ها) ‪ (flags‬را به روز می کند ‪ .‬برای تست صفر بودن ثبات‪ ،‬می‬
‫توان به سادگی از دستور ‪ TEST‬با خود ثبات استفاده کرد ‪:‬‬

‫‪TEST AX, AX‬‬


‫‪JZ label‬‬
‫این دستور مانند ‪ H00 ,AX CMP‬عمل می کند‪ ،‬اما به جای مقایسه مقدار ثبات با صفر‪ ،‬بیت های ثبات را با‬
‫هم ‪ AND‬می کند و نتی جه را در پرچم صفر) ‪ (Flag Zero‬ذخیره می کند ‪.‬‬

‫سوال ‪ 27‬فصل ‪) 3‬‬

‫‪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‬مورد استفاده قرار گرفت‪ .‬به طور کلی‪ ،‬تفاوت اصلی در عرض‬
‫گذرگاه داده و تأثیر آن بر عملکرد و هزینه است‪.‬‬

‫سوال ‪ 2‬فصل ‪) 4‬‬

‫شرکت اینتل در طراحی تراشه ‪ 8086‬از خطوط آدرس‪/‬داده تسهیمشده به دالیل زیر استفاده کرده است‪:‬‬

‫کاهش تعداد پینها‪ :‬این روش باعث کاهش تعداد پینهای تراشه میشود که اندازه فیزیکی و هزینه تولید تراشه‬
‫را کم میکند‪.‬‬

‫کاهش هزینه و پیچیدگی طراحی‪ :‬با کاهش پینها‪ ،‬هزینههای بستهبندی و طراحی مدارهای چاپی نیز کاهش‬
‫مییابد و مدارهای متصل به تراشه سادهتر و ارزانتر میشوند‪.‬‬

‫استفاده بهینه از منابع ‪ :‬در این روش‪ ،‬پینها به صورت مشترک برای خطوط آدرس و داده استفاده میشوند که‬
‫بهرهوری منابع تراشه را افزایش میدهد و نیاز به پینهای اضافی را برطرف میکند‪.‬‬

‫سازگاری با فناوریهای موجود‪ :‬استفاده از خطوط تسهیمشده با فناوریها و مدارهای واسط موجود در زمان‬
‫طراحی سازگارتر بود‪.‬‬

‫به طور خالصه‪ ،‬اینتل با استفاده از خطوط آدرس‪/‬داده تسهیمشده در تراشه ‪ 8086‬توانست هزینهها را کاهش‬
‫داده‪ ،‬طراحی را سادهتر کند و منابع موجود را بهینهتر بهرهبرداری نماید‪.‬‬

‫سوال ‪ 3‬فصل ‪) 4‬‬

‫در پردازندههای ‪ 8086‬و ‪ ،8088‬بیتهای وضعیت ‪ S3‬و ‪ S4‬نمایانگر وضعیت فعلی پردازنده هستند و برای‬
‫مدیریت سیستم و گسترش قابلیتها به کار میروند‪ .‬این بیتها به طور خاص وضعیت سگمنت پشته را نیز‬
‫مشخص میکنند و با استفاده از آنها و تکنیکهای مدیریت بانک حافظه‪ ،‬محدودیت فضای آدرسدهی به ‪1‬‬
‫مگابایت را می توان دور زد و به حافظه بیشتری دسترسی پیدا کرد‪.‬‬

‫سوال ‪ 4‬فصل ‪) 4‬‬

‫در پردازندههای ‪ 8086‬و ‪ ،8088‬پایههای ‪ QS0‬و ‪ QS1‬وضعیت صف دستورالعملها را نشان میدهند‪ .‬این‬
‫اطالعات به پردازندههای کمکی مانند ‪ 8087‬کمک میکنند تا هماهنگی در اجرای دستورالعملها‪ ،‬جلوگیری از‬
‫برخورد در دسترسی به حافظه‪ ،‬و بهینهسازی اجرا را انجام دهند‪.‬‬

‫سوال ‪ 5‬فصل ‪) 4‬‬

‫در پردازندههای ‪ 8086‬و ‪ ،8088‬پایه ‪ TEST‬و دستور ‪ WAIT‬برای هماهنگی با دستگاههای خارجی مانند‬
‫پردازندههای کمکی استفاده میشوند‪ .‬پایه ‪ TEST‬وضعیت اجازهدهی به پردازنده را نشان میدهد و دستور‬
‫‪ WAIT‬به پردازنده این امکان را می دهد که در صورت نیاز به اجرای دستورات متوقف شود تا دستگاه جانبی‬
‫عملیات خود را تکمیل کند‪.‬‬

‫سوال ‪ 6‬فصل ‪) 4‬‬

‫در پردازندههای ‪ 8086‬و ‪ ،8088‬پایه ‪ LOCK‬در حالت بیشینه برای هماهنگی و جلوگیری از تداخل در‬
‫دسترسی به منابع مشترک مانند حافظه استفاده میشود‪ .‬در این حالت‪:‬‬

‫‪ . 1‬استفاده از پیشوند ‪ :LOCK‬پردازنده میتواند از پیشوند ‪ LOCK‬در دستورات خاص استفاده کند‪ ،‬مانند دستور‬
‫‪ XCHG LOCK‬که عملیات تبادل را به صورت اتمی و بدون وقفه انجام میدهد‪.‬‬

‫‪ .2‬فعالسازی پایه ‪: LOCK‬هنگام اجرای دستورات با پیشوند ‪ ،LOCK‬پایه ‪ LOCK‬فعال میشود و دسترسی به‬
‫منابع مشترک مانند حافظه را قفل میکند‪ ،‬جلوگیری میکند تا سایر پردازندهها یا دستگاههای جانبی به آن‬
‫دسترسی پیدا کنند‪.‬‬

‫‪ .3‬غیرفعالسازی پایه ‪ : LOCK‬پس از اتمام دستور با پیشوند ‪ ،LOCK‬پایه ‪ LOCK‬غیرفعال میشود و منابع‬
‫مشترک دوباره برای دسترسی از سوی سایر پردازندهها یا دستگاههای جانبی باز میشود‪.‬‬

‫‪ .4‬کاربردهای پایه ‪: LOCK‬این پایه ابزار حیاتی برای ایجاد عملیات اتمی‪ ،‬هماهنگی بین پردازندهها در‬
‫سیستمهای چندپردازندهای‪ ،‬و جلوگیری از تداخل در دسترسی به منابع مشترک مانند حافظه است‪ .‬این امکان‬
‫را فراهم میکند که عملیاتهای حساس به زمان را با اطمینان اجرا کرد و از پایداری و بهرهوری سیستم بهبود‬
‫بخشید‪.‬‬
‫به طور کلی‪ ،‬پایه ‪ LOCK‬در این پردازندهها ابزاری قدرتمند برای مدیریت منابع و افزایش عملکرد سیستمهای‬
‫چندپردازندهای و دستگاههای پیچیده محسوب میشود‪.‬‬

‫سوال ‪ 7‬فصل ‪) 4‬‬

‫در پردازنده ‪ ،8086‬با تحلیل مقادیر ثبتشده روی سه گذرگاه‪ ،‬می توان نوع چرخه گذرگاهی در حال اجرا را‬
‫شناسایی کرد‪ .‬مقادیر مورد تحلیل عبارتند از‪:‬‬

‫‪ . 1‬آدرس گذرگاه ‪(Address bus): 47000H‬‬

‫‪ . 2‬گذرگاه کنترل (‪:)Control bus‬‬

‫‪( MEMR~ = 0 -‬فعال)‪ :‬نشان دهنده خواندن از حافظه است‪.‬‬

‫‪( MEMW~ = 1 -‬غیرفعال)‪ :‬نشان دهنده نوشتن به حافظه نیست‪.‬‬

‫‪( IOR~ = 1 -‬غیرفعال)‪ :‬نشان دهنده خواندن از دستگاه ورودی‪/‬خروجی نیست‪.‬‬

‫‪( IOW~ = 1 -‬غیرفعال)‪ :‬نشان دهنده نوشتن به دستگاه ورودی‪/‬خروجی نیست‪.‬‬

‫‪ .3‬گذرگاه دادهها ‪(Data bus): F3C0H‬‬

‫با توجه به این مقادیر‪ ،‬چرخه گذرگاهی در حال اجرا‪ ،‬چرخه خواندن از حافظه است‪ .‬پردازنده از آدرس حافظه‬
‫‪ H47000‬دادهای با مقدار ‪ C3FH0‬را خوانده و آن را دریافت کرده است‪ ،‬در حالی که عملیات نوشتن به حافظه‬
‫و دستگاههای ورودی‪/‬خروجی در این زمان انجام نمیشود‪.‬‬

‫سوال ‪ 8‬فصل ‪) 4‬‬

‫در پردازنده ‪ ،8086‬چرخههای حالت (‪ T1‬تا ‪ )T4‬برای اجرای دستورات استفاده میشوند و شامل عملیات‬
‫مختلفی مانند قرار دادن آدرس روی گذرگاه آدرس و انتقال دادهها هستند‪.‬‬

‫‪ -‬چرخه خواندن‪:‬‬

‫‪ : T1 -‬پردازنده آدرس را روی گذرگاه آدرس قرار میدهد و سیگنالهای نوع عملیات تنظیم میشوند‪.‬‬

‫‪ :T2 -‬سیگنالهای کنترل (مثل ‪ )~MEMR‬فعال میشوند و گذرگاه داده برای دریافت داده آماده میشود‪.‬‬

‫‪ :T3 -‬دادهها از حافظه یا دستگاه ‪ I/O‬به گذرگاه داده منتقل و توسط پردازنده خوانده میشوند‪.‬‬
‫‪ :T4 -‬سیگنالهای کنترلی غیرفعال میشوند و دادههای خوانده شده در ثباتهای داخلی ذخیره میشوند‪.‬‬

‫در حالت ‪ ،T3‬پردازنده ‪ 8086‬دادهها را از حافظه یا دستگاه ‪ I/O‬میخواند و به ثباتهای داخلی منتقل میکند‪.‬‬

‫سوال ‪ 11‬فصل ‪) 4‬‬

‫عبارت " چرخه کار پالس ساعت متصل به ریزپردازنده ‪ 8086‬باید ‪ 33%‬باشد" به این معناست که پالس ساعت‬
‫پردازنده ‪ 8086‬باید به گونهای تنظیم شود که ‪ % 33‬از هر دوره پالس ساعت فعال باشد‪ .‬این درصد به معنای‬
‫زمان فعال بودن پردازنده برای انجام عملیات است‪.‬‬

‫توضیح مفاهیم کلیدی‪:‬‬

‫‪ .1‬فرکانس ساعت (‪ :)Clock Frequency‬تعداد پالسهای ساعتی در یک ثانیه‪.‬‬

‫‪ . 2‬دوره پالس ساعت (‪ :) Clock Period‬زمان الزم برای تکمیل یک پالس ساعت‪ ،‬که معکوس فرکانس ساعت‬
‫است‪.‬‬

‫برای مثال‪ ،‬اگر دوره پالس ساعت ‪ 300‬نانوثانیه باشد‪ %33 ،‬از آن (یعنی ‪ 100‬نانوثانیه) باید فعال باشد‪ .‬این‬
‫فعال بودن به معنای انجام دستورات‪ ،‬دسترسی به حافظه و انتقال داده است‪ .‬باقی زمان میتواند به حالتهای‬
‫دیگر مانند تعلیق یا تنظیم اختصاص یابد‪.‬‬

‫نتیجهگیری‪:‬‬

‫تنظیم فرکانس ساعت پردازنده ‪ 8086‬باید به گونهای باشد که نسبت ‪ %33‬کارکرد فعال حفظ شود‪ ،‬تا پردازنده‬
‫با کارایی بهینه عمل کند‪.‬‬

‫سوال ‪ 10‬فصل ‪) 4‬‬

‫در پردازنده ‪ ،88/8086‬برای اجرای دستورالعمل ]‪ MOV AX, [SI‬با فرض اینکه ‪ DS=H800B‬و ‪SI=H1000‬‬
‫است‪ ،‬آدرس فیزیکی به این صورت محاسبه میشود‪:‬‬

‫‪ . 1‬محاسبه آدرس فیزیکی‪:‬‬

‫آدرس فیزیکی = )‪SI + (16 * DS‬‬

‫آدرس فیزیکی = )‪H1000 + (16 * H800B‬‬

‫آدرس فیزیکی = ‪H1000 + H8000B‬‬


‫آدرس فیزیکی = ‪H9000B‬‬

‫پردازنده داده را از آدرس فیزیکی ‪ H9000B‬میخواند‪ .‬اگر مقدار در این آدرس ‪ AAH55‬باشد‪ ،‬این مقدار به‬
‫ثبات ‪ AX‬منتقل میشود‪.‬‬

‫مراحل اجرای دستور ]‪ MOV AX, [SI‬در چرخههای ‪ T1‬تا ‪:T4‬‬

‫‪:T1 .1‬‬

‫آدرس ‪ H9000B‬روی گذرگاه آدرس قرار میگیرد‪.‬‬

‫سیگنال ‪ ~MEMR‬فعال میشود‪.‬‬

‫‪:T2 .2‬‬

‫سیگنالهای کنترل تنظیم میشوند‪.‬‬

‫گذرگاه داده برای دریافت دادهها آماده میشود‪.‬‬

‫‪:T3 .3‬‬

‫دادهها (‪ )AAH55‬از حافظه به گذرگاه دادهها منتقل میشوند‪.‬‬

‫‪:T4 .4‬‬

‫سیگنالهای کنترلی غیرفعال میشوند و چرخه پایان مییابد‪.‬‬

‫وضعیت خطوط آدرس و داده در حین چرخههای ‪ T1‬تا ‪:T4‬‬

‫‪:T1 .1‬‬

‫گذرگاه آدرس‪( H900B :‬پایین آدرس)‬

‫گذرگاه آدرس‪( B000 :‬باالی آدرس و سیگنالهای وضعیت)‬

‫گذرگاه داده‪ :‬نامعتبر (‪)Z-High‬‬

‫‪:T2 .2‬‬

‫گذرگاه آدرس‪( H900B :‬پایین آدرس)‬


‫گذرگاه داده‪ :‬نامعتبر (‪)Z-High‬‬

‫‪:T3 .3‬‬

‫گذرگاه داده‪( AAH55 :‬داده خوانده شده از حافظه)‬

‫‪:T4 .4‬‬

‫گذرگاه داده‪( AAH55 :‬داده همچنان معتبر است)‬

‫این مقادیر به پردازنده ‪ 88/8086‬اجازه میدهند تا عملیات خواندن از حافظه را به درستی انجام داده و دادهها‬
‫را به ثبات ‪ AX‬منتقل کند‪.‬‬

‫سوال ‪ 12‬فصل ‪) 4‬‬

‫تراشه ‪ ، A8284‬یک مولد ساعت برای ریزپردازندههای ‪ 8088/8086‬است که از کریستال با فرکانس ‪15‬‬
‫مگاهرتز (‪ )MHz‬برای تولید سیگنالهای ساعت استفاده میکند‪ .‬فرکانس و چرخه کاری خروجیهای مختلف‬
‫این تراشه به شرح زیر است‪:‬‬

‫‪ .1‬خروجی )‪:PCLK (Peripheral Clock‬‬

‫‪ -‬فرکانس‪ 5 :‬مگاهرتز (⅓ فرکانس کریستال)‬

‫‪ -‬چرخه کار‪( ٪33.33 :‬یکسوم زمان فعال)‬

‫‪ .2‬خروجی )‪:OSC (Oscillator‬‬

‫‪ -‬فرکانس‪ 15 :‬مگاهرتز (همان فرکانس کریستال)‬

‫‪ -‬چرخه کار‪( ٪50 :‬نیم دوره فعال)‬

‫‪ .3‬خروجی )‪:CLK (Clock‬‬

‫‪ -‬فرکانس‪ 2.5 :‬مگاهرتز (⅙ فرکانس کریستال)‬

‫‪ -‬چرخه کار‪( ٪50 :‬نیم دوره فعال)‬

‫این تنظیمات خروجیها فرکانس های مناسب برای هماهنگی و عملیات ریزپردازنده و دستگاههای جانبی را‬
‫فراهم میکنند‪.‬‬
‫سوال ‪ 13‬فصل ‪) 4‬‬

‫هدف از استفاده از ‪ ROM‬بوت در سیستمهای مبتنی بر ریزپردازنده ‪ ، 8086‬فراهم کردن کد اولیه الزم برای‬
‫راهاندازی سیستم و آغاز فرایند بوت شدن است‪ .‬این ‪ ROM‬حاوی برنامهای است که وظایف ابتدایی مانند‬
‫آزمایشهای سختافزاری (‪ )POST‬و بارگذاری سیستم عامل از حافظه جانبی را بر عهده دارد‪ ROM .‬بوت‬
‫معموالً به آدرس فیزیکی `‪ `FFFF0H‬نگاشته میشود‪ ،‬که نزدیک به پایان فضای آدرسدهی ‪ 1‬مگابایتی‬
‫پردازنده ‪ 8086‬است‪ .‬این مکانیزم اطمینان حاصل میکند که پس از روشن شدن سیستم‪ ،‬کنترل پردازنده به‬
‫طور خودکار به این آدرس منتقل میشود و فرایند بوت آغاز میگردد‪ .‬آدرس `‪ ،`FFFF0H‬که تنها ‪ 16‬بایت قبل‬
‫از انتهای فضای آدرسدهی است‪ ،‬محلی ایدهآل برای شروع بوت لودر می باشد که کد بوت را اجرا میکند و‬
‫سیستم را راهاندازی میکند‪.‬‬

‫سوال ‪ 14‬فصل ‪) 4‬‬

‫تفاوت اصلی بین لچ حساس به لبه و لچ شفاف در نحوه واکنش آنها به سیگنال کالک است‪ .‬لچ حساس به لبه‬
‫فقط در لبههای صعودی یا نزولی سیگنال کالک (تغییر وضعیت کالک) فعال میشود و در این لحظات اطالعات‬
‫ورودی را ثبت می کند‪ .‬در مقابل‪ ،‬لچ شفاف به صورت مداوم در زمانی که سیگنال کالک فعال است (سطح باال یا‬
‫پایین) به ورودیها واکنش نشان می دهد و اطالعات ورودی را به خروجی منتقل میکند‪ .‬این بدان معناست که‬
‫لچ شفاف در مدت زمانی که کالک فعال است‪ ،‬ورودی را به خروجی منتقل میکند‪ ،‬اما لچ حساس به لبه فقط‬
‫در لحظه تغییر لبه کالک به ورودی واکنش نشان میدهد‪.‬‬

‫سوال ‪ 15‬فصل ‪) 4‬‬

‫در پردازندههای ‪ ، 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‬برای مدیریت درخواست و اعطای دسترسی‬
‫به گذرگاه بین پردازنده اصلی و پردازنده کمکی استفاده میشوند‪ .‬این سیگنالها به هماهنگی و جلوگیری از‬
‫تداخل دسترسی به حافظه کمک میکنند‪.‬‬

‫سوال ‪ 17‬فصل ‪) 4‬‬

‫سیگنال )‪ : DEN (Data Enable‬این سیگنال برای فعال کردن فرستنده‪/‬گیرنده های متصل به گذرگاه محلی‬
‫کار می رود بتوانند داده ها رو به گذرگاه محلی ارسال کرده یا از آن دریافت کنند‪.‬‬

‫سوال ‪ 18‬فصل ‪) 4‬‬

‫برای نوشتن یک برنامه به زبان اسمبلی ‪ 88/8086‬که به آدرس فیزیکی ‪ FFFF0H‬پرش کند‪ ،‬میتوان از کد زیر‬
‫استفاده کرد‪:‬‬

‫‪ORG 100h‬‬
‫‪START:‬‬

‫‪JMP FFFF0h‬‬
‫‪END START‬‬
‫این برنامه با استفاده از دستور پرش (‪ ) JMP‬به آدرس فیزیکی ‪ FFFF0H‬میرود ‪.‬‬
‫فصل ‪5‬‬
‫سوال ‪ 1‬فصل ‪) 5‬‬

‫دستورالعمل ‪ INCBIN‬در پردازندههای ‪ 8086‬و ‪ 8088‬برای قرار دادن فایلهای باینری درون فایل اجرایی‬
‫برنامه استفاده میشود‪ .‬کاربردهای اصلی آن شامل‪:‬‬

‫‪ .1‬گنجاندن منابع چندرسانهای مانند تصاویر‪ ،‬صداها و ویدئوها در فایل اجرایی برنامه برای کاهش تعداد‬
‫فایلهای مورد نیاز و سهولت در توزیع نرمافزار‪.‬‬

‫‪ .2‬ذخیرهسازی دادههای اولیه مانند جداول‪ ،‬تنظیمات و دادههای نمونه درون فایل اجرایی برای سادگی در‬
‫مدیریت و نگهداری دادهها‪.‬‬

‫‪ .3‬افزایش امنیت با قرار دادن فایلهای باینری درون فایل اجرایی‪ ،‬جلوگیری از دسترسی غیرمجاز به‬
‫منابع‪.‬‬

‫این استفادهها نشان میدهد که ‪ INCBIN‬بهبود کارایی‪ ،‬امنیت و سادگی در توسعه و استفاده از نرمافزارها را‬
‫فراهم میکند ‪.‬‬

‫سوال ‪ 2‬فصل ‪) 5‬‬

‫برای بررسی تفاوتها‪ ،‬مزایا و معایب دو خط برنامه اسمبلی زیر‪ ،‬ابتدا باید عملکرد هر یک را مورد بررسی قرار‬
‫دهیم‪:‬‬

‫برنامه اول‪:‬‬

‫‪times 10 inc ECX‬‬


‫برنامه دوم‪:‬‬

‫‪mov ECX, 10‬‬


‫‪rep inc ECX‬‬
‫تفاوتها‪:‬‬

‫‪ .1‬روش پیادهسازی‪:‬‬
‫برنامه اول‪ :‬این دستور با استفاده از ‪ ،`pseudo-instruction `times‬ده بار دستور `‪ `inc ECX‬را تکرار‬
‫میکند‪.‬‬

‫برنامه دوم‪ :‬این دستور از رجیستر `‪ `ECX‬و دستور `‪ `rep‬برای تکرار ده بار دستور `‪ `inc ECX‬استفاده‬
‫میکند‪.‬‬

‫‪ .2‬رجیسترها‪:‬‬

‫‪ -‬برنامه اول‪ :‬برای اجرای کد‪ ،‬نیازی به استفاده از رجیستر اضافی مانند `‪ `ECX‬ندارد‪.‬‬

‫‪ -‬برنامه دوم‪ :‬از رجیستر `‪ `ECX‬برای شمارش تعداد تکرارها استفاده میکند‪.‬‬

‫نتیجهگیری‪:‬‬

‫انتخاب بین این دو روش بستگی به نیازها و محدودیتهای خاص برنامه دارد‪ .‬اگر نیاز به کد ساده و خوانا دارید‬
‫و حجم کد مهم نیست‪ ،‬برنامه اول مناسب است‪ .‬اما اگر بهینهسازی حجم کد و استفاده از دستورات تکرار برای‬
‫کاهش حجم کد اهمیت دارد‪ ،‬برنامه دوم گزینه بهتری خواهد بود‪ .‬همچنین‪ ،‬در برنامههایی که نیاز به مدیریت‬
‫دقیق رجیسترها دارید‪ ،‬باید در استفاده از رجیستر `‪ `ECX‬در برنامه دوم دقت بیشتری داشت‪.‬‬

‫سوال ‪ 4‬فصل ‪) 5‬‬

‫در زبانهای برنامهنویسی‪ ،‬استفاده از `'` (اپاستروف)‪( `"` ،‬دابل کوتیشن) و `` ` `` (بک تیک) دارای تفاوتهای‬
‫مختلفی است‪:‬‬

‫استفاده از `'` (اپاستروف)‪:‬‬

‫‪ -‬در بسیاری از زبانها‪ ،‬رشتههای قرار گرفته در اپاستروف برای نمایش کاراکترهای منفرد یا لیترالهای‬
‫کاراکتری استفاده میشوند‪.‬‬

‫‪ -‬مثال‪:‬‬

‫‪ -‬در زبان اسمبلی ‪:‬‬

‫’‪mov al, ‘A‬‬


‫‪ -‬در زبان ‪: C‬‬

‫; '‪char ch = 'A‬‬
‫‪ -‬این نوع رشتهها تنها یک کاراکتر را نمایش میدهند و معموالً برای ثابتهای کاراکتری استفاده میشوند‪.‬‬

‫استفاده از `"` (دابل کوتیشن)‪:‬‬

‫‪ -‬در برخی زبانها‪ ،‬رشتههای قرار گرفته در دابل کوتیشن برای نمایش رشتههای چندکاراکتری (‪)string‬‬
‫استفاده میشوند‪.‬‬

‫‪ -‬مثال‪:‬‬

‫‪ -‬در زبان اسمبلی‪:‬‬

‫‪section .data‬‬
‫‪msg db "Hello, World!", 0‬‬
‫‪ -‬در زبان ‪:C‬‬

‫!";‪char str[] = "Hello, World‬‬

‫‪ -‬این نوع رشتهها می توانند شامل چندین کاراکتر باشند و به عنوان یک آرایه از کاراکترها تلقی میشوند‪.‬‬

‫استفاده از `` ` `` (بک تیک)‪:‬‬

‫‪ -‬بک تیک به طور عمده در زبانهای اسکریپتی مانند ‪ Bash‬و زبانهای برنامهنویسی خاصی مانند ‪Python‬‬
‫برای موارد خاصی مورد استفاده قرار میگیرد‪ ،‬اغلب برای اجرای دستورهای سیستم و استفاده از خروجی آنها‬
‫در رشته‪.‬‬

‫‪ -‬مثال‪:‬‬

‫‪ -‬در ‪:Bash‬‬

‫`‪echo `ls -l‬‬


‫‪ -‬در زبانهای برنامهنویسی دیگر مانند اسمبلی‪ ،‬بک تیک به ندرت استفاده میشود و بیشتر برای اهداف خاصی‬
‫مانند نمایش کد یا دستورات خاص در متون برنامهنویسی استفاده میشود‪.‬‬

‫جمعبندی‪:‬‬
‫‪ -‬تفاوت های این سه نوع کاراکتر در استفاده و مفاهیم مرتبط با زبانهای برنامهنویسی مختلف میباشد‪`'` -.‬‬
‫برای کاراکترهای منفرد و لیترالهای کاراکتری‪ `"` ،‬برای رشتههای چندکاراکتری و `` ` `` برای موارد خاصی‬
‫مانند اجرای دستورات سیستم استفاده میشوند‪.‬‬

‫‪ -‬تفاوت اصلی بین این کاراکترها در نحوه تفسیر و پردازش رشتهها در زبانهای برنامهنویسی مختلف است‪.‬‬

‫سوال ‪ 5‬فصل ‪) 5‬‬

‫قالب و کاربرد فایلهای ‪ELF‬‬

‫فایلهای )‪ ELF (Executable and Linkable Format‬یکی از قالبهای استاندارد و رایج برای ذخیره و‬
‫تبادل فایلهای اجرایی‪ ،‬شیء (‪ )object‬و کتابخانههای پویا در سیستمهای عامل یونیکس و لینوکس هستند‪.‬‬

‫‪ .1‬قالب فایل ‪ELF‬‬

‫‪ ELF‬یک قالب چندمنظوره برای ذخیره برنامهها و کتابخانهها است که شامل موارد زیر میباشد‪:‬‬

‫‪: Header .1‬‬

‫حاوی اطالعات ساختاری فایل‪ ،‬از جمله نوع و نسخه فایل‪.‬‬

‫‪: **Program Header Table** .2‬‬

‫اطالعات مربوط به بارگذاری بخشهای برنامه در حافظه‪.‬‬

‫‪:Section Header Table .3‬‬

‫اطالعات مربوط به بخشهای مختلف فایل مانند دادههای برنامه و اطالعات لینک‪.‬‬

‫‪: Sections .4‬‬

‫شامل کد اجرایی‪ ،‬دادههای متغیر و اطالعات نمادها برای لینک و اجرا است ‪.‬‬

‫پایان‬

You might also like