چنار کامپیوتر

چنار کامپیوتر
طبقه بندی موضوعی
  • ۱
  • ۰

در این پست دو نمونه سوال از کتاب سازمان و طراحی کامپیوتر ARM را بررسی میکنیم؛ موضوع دو سوال مربوط به تبدیل دستورات اسمبلی LEGv8 به کد زبان C است.

خب همان طور که میدانید در زمان کامپایل برنامه زبان های سطح بالاتر مانند C و جاوا به دستور العمل های اسمبلی تبدیل میشوند، این دستورات برای پردازش در پردازنده طراحی شده اند.

قبل از شروع بررسی سوالات، اگر با زبان اسمبلی LEGv8 آشنایی ندارید سری به پست معرفی زبان اسمبلی LEGv8 بزنید.


 

2.2 [5] <§2.2> Write a single C statement that corresponds to the two LEGv8
assembly instructions below.

ADD f, g, h
ADD f, i, f

 

حل: در این سوال فقط از دستور اسمبلی ADD استفاده شده است، مقدار دو رجیستر g و h با هم جمع شده و به رجیستر f ریخته میشود. پس کد C آن به صورت زیر بوده است:

f = g + h;

f = i + f;

 


 

2.4 [10] <§§2.2, 2.3> For the LEGv8 assembly instructions below, what is the
corresponding C statement? Assume that the variables
f, g, h, i, and j are assigned
to registers
X0,X1,X2,X3, and X4, respectively. Assume that the base address of
the arrays A and B are in registers
X6 and X7, respectively.


LSL X9, X0, #3   // X9 = f*8
ADD X9, X6, X9   // X9 = &A[f]
LSL X10, X1, #3   // X10 = g*8
ADD X10, X7, X10   // X10 = &B[g]
LDUR X0, [X9, #0]   // f = A[f]
ADDI X11, X9, #8
LDUR X9, [X11, #0]
ADD X9, X9, X0
STUR X9, [X10, #0]

 

حل: اگر به دستورات اسمبلی آشنایی داشته باشید، میتوانید این دستورات را به این شکل به زبان C بازنویسی کنید. همان طور که در صورت سوال میبینید، حرفی از رجیسترهای X9 و X10 زده نشده و به همین خاطر طراح سوال برای راهنمایی در کامنت تبدیل شده 5 خط اول دستورات به زبان C را آورده است، که ما نیز عینا از همان استفاده میکنیم:

X9 = f*8;
X9 = &A[f];
X10 = g*8;
X10 = &B[g];
f = A[f];
X11 = X9 + 8;
X9 = X11 + 0;
X9 += f;
X10 = X9;

 


 

2.9 [10] <§§2.2, 2.3> Translate the following LEGv8 code to C. Assume that
the variables
f, g, h, i, and j are assigned to registers X0,X1,X2,X3, and X4,
respectively. Assume that the base address of the arrays
A and B are in registers X6
and X7, respectively.


ADDI X9, X6, #8
ADD X10, X6, XZR
STUR X10, [X9, #0]
LDUR X9, [X9, #0]
ADD X0, X9, X10

 

حل: به زودی قرار میگیرد

 

//X9 = A+8;

 


منبع سوال: کتاب Computer Organization and Design ARM® EDITION

 

 

 

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی