لینک پرداخت و دانلود *پایین مطلب*
فرمت فایل:Word (قابل ویرایش و آماده پرینت)
تعداد صفحه:59
فهرست مطالب
آدرس دهی
0 7 8 11 12 15-16 19-20 21 24 25 26 27 28 31
1-2: shifter operand
1-3 عملگرهای فوری پردازش داده
1-4 data processing operands – tegister
1-5- شیفت منطقی به سمت چپ به یک عدد فوری
1-6: شیفت منطقی به سمت چپ با یک رجیستر
1-7: شیفت منطقی به سمت راست با یک عدد فوری
1-8: شیفت منطقی به سمت راست با یک رجیستر
1-9- شیفت سمت راست محاسباتی با عدد فوری
1-11- چرخش به راست یک عددی فوری
8-immed
Totatr-imm
Rd
Rn
Sopcde
1
0
0
cond
Immediate shifts
0 3 4 5 6 7 11 12 15 16 19 20 21 24 25 26 27 28 31
0 3 4 5 6 7 11 12 15 16 19 20 21 24 25 26 27 28 31
Rm
0
Shift
Shift-imm
Rd
Rn
S
Opcode
0
0
0
cond
Rm
1
Shift
0
Rs
Rd
Rn
S
Opcode
0
00
code
Opcode : نشان دهنده ی عملیات دستورالعمل است.
Shift:نشان دهنده ی این است که دستورالعمل کدهای شرطی را تغییر می دهد.
Rd:رجسیتر مقصد را مشخص می کند.
Rn:رجسیتر عملگر صحیح را مشخص می کند.
بیت های [11:0]: بیت های shifter operand که بعداً توضیح داده می شود.
بیت 25: I بیت است که مشخص کننده ی حالت بین immediate shifter و register-base shifter operand است.
اگر بیت های نشان داده شده همه مقدارهای نشان داده شده را بگیرد دستورالعمل پردازش داده نیست بلکه در فضای دستورالعمل های لود و ذخیره یا محاسباتی قرار میگیرد.
1= ]7[ bit 0= ]4[ bit 0= ]25[ bit
1-2: shifter operand
یکی از سه فرمت زیر را دارد.
مقدار عملگر فوری:
مقداری است که توسط چرخش 8 بیت ثابت در 32 بیت word توسط یک عدد زوج (30، 000، 2،0) ایجاد می شود.
چند مقدار صحیح ثابت:
0FF* 0 ، 104 * 0، FF * 0
F000000F* 0 ، 00FF * 0
چند مقدار ناصحیح
، 102* 0، 101*0
برای مثال:
MOV R0#،
ADD R3, RB, #1
CMP R7, #10000
BIC Rq, R8, 0* FF 00
مقدار عملگر رجیستر: مقدار یک رجسیتر است.
به عنوان مثال
مقدار را به منتقل می کند و MOV
مقادیر و را جمع کرده و حاصل را در ذخیره می کند.
و و ADD
مقدار عملگر رجسیتر شیفت یافته:
مقدار یک رجیستر که پیش از عملگر پردازش داده شیفت(چرخش) یافته باشد.
5 نوع شیفت داریم:
ASR
Arithmetic shift right
LSR: logical shift left
LSR: logical shift right
ROR: Rotate right
RRX: Rotate right with entend
مقدار عددی که می خواهیم شیفت بدهیم می تواند یک عدد فوری یا یک رجیستر باشد.
مقدار R را به سمت چپ 2 بار شیفت 2# LSL، ، MOV
داده و در می ریزد ROR، ، MOV
که به مقدار شیفت داده شده است.
1-3 عملگرهای فوری پردازش داده
0 7 8 11 12 15 16 19 20 21 24 25 27 28 31
8-immed
Rotate-imm
Rd
Rn
S
Opcode
001
Cond
مقدار shifter- operand تشکیل می شود با چرخش یک مقدار فوری 5 بیتی در موقعیت های بیت زوج در یک 32 بیتی. اگر مقدار عددی صفر باشد، مقدار خروجی shifter مقدار C می باشد. در غیر این صورت به مقدار بیت 31 shifter operand ست می شود.
<immediate> : برابر است با حاصل چرخش immed-8 با مقدار rotate-imm*2
عملیات:
shifter- operand = immed-8 rotate right (rotate-immed *2)
if rotate-imm=0 then
shifter- carry-out=c flay
else
shifter- carry-out= shifter- operand [31]
مقادیر فوری مجاز می باشند که تنها از چرخش یک 8 بیتی به یک مقدار زوج در 32 بیتی word حاصل می شوند.
Cncoding
بعضی مقادیر بیشتر از یک روش برای encoding دارند. مثلاً
E* 0= rotate-imm 3F* 0= 8-immd
F*0= rotate-imm FC*0= 8-immed
در چنین مواردی اسمبلر باید مقدار صحیح را طبق زیر انتخاب کند:
اگر مقدار فوری در بازه ی 0 تا FF* 0 قرار داشته باشد، encoding با rotate-imm=0 قابل دسترس است.
در غیر این صورت توصیه می شود که encoding با کوچکترین مقدار ممکن rotate- imm انتخاب شود.
1-4 data processing operands – tegister
0 3 4 6 7 11 12 15 16 19 20 21 24 25 27 28 31
Rm
000
0000
Rd
Rn
S
Opcode
000
cond
<Rm>: رجیستری را مشخص می کند که عملگر دستورالعمل مقدار آن است.
Shifter-operand=Rm
Shifter- carry= C flay
Encoding: این دستورالعمل encode می شود که شیفت منطقی به سمت چپ (0= shift-imm)
اگر به جای و مورد استفاده قرار گیرد و مقدار استفاده شده آدرس دستورالعمل است به علاوه ی 8.
1-5- شیفت منطقی به سمت چپ به یک عدد فوری
0 3 4 6 7 11 12 15 16 19 20 21 24 25 27 28 31
Rm
000
Shift-imm
Rd
Rn
S
Opcode
000
cond
این عملگر به کار می رود برای تولید مقدار یک رجسیتر 1 مقدار شیفت چپ داده شده یک رجسیتر (ضرب شده در یک توانی از 2)
مقدار خارج شده از shifter بیت آخری است شیفت داده شده و اگر شیفتی داده نشده باشد فلگ c است.
<Rm>, LSL# <shift- imm>
<Rm>: رجسیتری است که مقدار آن باید شیفت داده شود.
LSL: نشان دهنده ی شیفت منطقی به سمت چپ است.
<shift –imm> : مقدار شیفت را نشان می دهد که عددی است بین 0 تا 31
1-6: شیفت منطقی به سمت چپ با یک رجیستر
0 3 4 7 8 11 12 15 16 19 20 21 24 25 27 28 31
Rm
0001
Rs
Rd
Rn
S
Opcode
000
cond
این عملگر پردازش داده برای تولید مقدار یک یک رجیستر ضرب در یک توانی از 2 به کار می رود.
عملگر این دستورالعمل مقدار رجیستر Rm است. که با مقدار بایت سمت راست Rs شیفت داده شده است. مقدار carry-out آخرین بیتی است که با شیفت خارج شده و صفر است اگر مقدار بشیتر از 32 باشد و فلگ c است اگر مقدار شیفت صفر باشد.
<Rm> , LSL <Rs>
<Rs> رجیستری است که مقدار شیفت در آن قرار دارد.
1-7: شیفت منطقی به سمت راست با یک عدد فوری
0 3 4 6 7 11 12 15 16 19 20 31 24 25 27 28 31
Rm
010
Shift-imm
Rd
Rn
S
Opcode
000
Cond
درست مانند شیفت منطقی به سمت چپ است.
1-8: شیفت منطقی به سمت راست با یک رجیستر
0 3 4 7 8 11 12 15 16 19 20 21 24 25 27 28 31
Rm
0011
Rs
Rd
Rm
S
Opcode
000
cond
درست مانند شیفت منطقی به سمت چپ با رجیستر
1-9- شیفت سمت راست محاسباتی با عدد فوری
0 3 4 5 6 7 11 12 15 16 19 20 21 24 25 27 28 31
Rm
100
Shift-imm
Rd
Rm
S
Opcode
000
cond
این عملگر پردازش داده یک مقدار عددی که به صورت محاسباتی به راست شیفت داده شده می دهد.
عملگر این دستورالعمل مقدار رجسیتر Rm است که بوسیله یک عدد فوری بین 1 تا 32 شیفت محاسباتی داده می شود. بیت 31 Rm بیت خالی شده را می گیرد و بیت خارج شده آخرین بیت شیفت داده شده است.
<Rm> , ASR # <shift-imm>
arithmetic shift right :ASR
عملیات:
if shift-imm=0 then
if Rm [31]=0 then
جزوه در مورد آدرس دهی