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

UETOTS Đặng Thị Hà Ngân

Computer Architecture INT2212 4 Autumn 2020


Home ► My courses ► Computer Architecture ► INT2212 4 Autumn 2020 ►
19 November - 25 November ► Bài kiểm tra chương 3+4

Started on Sunday, 22 November 2020, 9:10 PM


State Finished
Completed on Sunday, 22 November 2020, 9:34 PM
Time taken 24 mins 41 secs
Marks 8.00/20.00
Grade 4.00 out of 10.00 (40%)

Question 1 Ý nào sau đây là đúng liên quan đến đoạn mã Assembly tính biểu thức c=10-
Incorrect (a[3]+a[2]+a[1]); trong đó các biến được khai báo như sau int c, a[4]; và giả sử mảng a đã
được gán giá trị.
Mark 0.00 out of
1.00
mov $3, %edx
Flag question

mov a(,1,4), %eax

add a(,%edx,4), %eax

dec %edx

add a(,%edx,4), %eax

neg %eax

add $10, %eax

mov %eax, c

/
Select one:
Sai ở lệnh mov a(,1,4), %eax

Sai ở lệnh add a(,%edx,4), %eax

Chương trình hoàn toàn đúng


Sai ở lệnh mov a(,%edx,4), %eax

Question 2 Cho đoạn mã assembly trên kiến trúc Intel thực hiện phép toán sau: int c, a[4]; c=10-
Incorrect (a[3]+a[2]+a[1]). Ý nào sau đây là đúng?

Mark 0.00 out of


Mã assembly:
1.00

Flag question

mov 10, %eax

mov $3, %edx

sub a(,%edx,4),%eax

mov $2, %edx

sub a(,%edx,4),%eax

mov $1, %edx

sub a(,%edx,4),%eax

mov %eax, c

Select one:
Số 4 trong tham chiếu mảng a là thừa, cần bỏ đi

Cú pháp tham số phần tử mảng là sai

Sai ở lệnh đầu tiên


Chương trình hoàn chính xác /
Question 3 Ý nào sau đây là đúng liên quan đến đoạn mã Assembly tính phần dư của phép chia 2 số
Correct nguyên dương (hay phép toán a % b) chứa trong %rax và %rbx, tuân theo giải thuật

Mark 1.00 out of


while(%rax>=%rbx) %rax -= %rbx; kết quả chứa ở %rax
1.00

Flag question

L1:

cmp %rbx,%rax

jb found

sub %rbx,%rax

found:

Select one:
Thiếu lệnh jmp L1 sau lệnh sub

Nhãn found phải đặt là endwhile

Sai ở lệnh cmp %rbx,%rax


Sai ở lệnh jb found

Question 4 Cho đoạn mã Intel Assembly cài đặt chương trình tính tổng một mảng số thực darr kiểu
Incorrect double, có n phần tử (n>1, kiểu unsigned int), kết quả chứa ở thanh ghi xmm0. Ý nào sau
đây là đúng?
Mark 0.00 out of
1.00
xmm0=0;
Flag question

for(ecx=0; ecx<n; ecx++) xmm0+=darr[ecx];

Mã assembly:

xorps $0, %xmm0

/
mov $0, %ecx

while:

cmp %ecx, n

jae endwhile

do:

addsd darr(,%ecx, 8), %xmm0

inc %ecx

jmp while

endwhile:

Select one:
Sai ở lệnh jae endwhile

Sai ở lệnh cmp %ecx, n vì nó ảnh hưởng đến lệnh dưới

Chương trình hoàn toàn chính xác

addsd darr(,%ecx, 8), %xmm0

Question 5 Ý nào sau đây là đúng về đoạn mã Assembly tính toán biểu thức a=b+c; trong đó các biến
Incorrect được khai báo như sau: int a; int c=-25; long b=283;

Mark 0.00 out of


mov b, %rax
1.00

Flag question

add c, %eax
/
mov %eax, a

Select one:
Sai ở lệnh mov b, %rax

Thiếu lệnh khởi tạo giá trị cho a

Sai ở lệnh add c, %eax


Đoạn mã là chính xác

Question 6 Cho đoạn mã assembly thực hiện tính tổng giá trị một mảng số nguyên, giá trị tổng được
Incorrect lưu vào eax biết n là số nguyên không dấu kiểu unsigned int (n>1), a là một mảng số
nguyên kiểu int có dấu có n phần tử. Ý nào sau đây là đúng?
Mark 0.00 out of
1.00
eax=0;
Flag question

ecx=0;

while (ecx < n) eax += a[ecx++] ;

Mã assembly,

mov $0, %eax

xor %ecx, %ecx

while:

cmp n, %ecx

je endwhile

do:

/
add a(, %ecx, 4), %eax

inc %ecx

jmp while

endwhile:

Select one:
Sai ở lệnh add a(, %ecx, 4), %eax

Chương trình hoàn toàn chính xác với điều kiện n>1
Sai ở lệnh cmp n, %ecx

Sai ở lệnh je endwhile

Question 7 Cho đoạn mã Intel Assembly cài đặt chương trình tính tổng n (n>2 và có kiểu unsigned int)
Incorrect số đầu tiên của dãy fibonacy, với 2 số đầu tiên của dãy là 0, 1. Kết quả chứa ở thanh ghi
r8d. Ý nào sau đây là sai?
Mark 0.00 out of
1.00
r8d=1; eax=0; ebx=1;
Flag question

for (ecx=n-2; ecx>0; ecx--){

edx=ebx;

ebx+= eax;

eax=edx;

r8d+=ebx;

}
/
Mã assembly:

mov $1, %r8d

xor %eax, %eax

mov $1, %ebx

mov n, %ecx

sub $2, %ecx

while:

cmp $0, %ecx

jbe endwhile

do:

mov %ebx, %edx

add %eax, %ebx

mov %edx, %eax

add %ebx, %r8d

dec %ecx

/
jmp while

endwhile:

Select one:
Có thể bỏ nhãn do đi mà không ảnh hưởng đến chương trình

Chương trình hoàn toàn chính xác

Sai ở lệnh jbe endwhile


Có thể thay lệnh jbe endwhile bằng lệnh je endwhile vì đã có điều kiện n>2

Question 8 Cho đoạn mã Assembly chuyển đoạn code C tương ứng sau, biết các số lưu trong các
Incorrect thanh ghi rax và rbx là số nguyên không dấu khác 0. Kết quả chứa ở thanh ghi rax Ý nào
sau đây là sai:
Mark 0.00 out of
1.00
while (rax != rbx) if (rax>rbx) rax-=rbx; else rbx-=rax;
Flag question

Mã assembly:

while:

cmp %rbx, %rax

je endwhile

do:

jb else

then:

/
sub %rbx, %rax

jmp endif

else:

sub %rax, %rbx

endif:

jmp while

endwhile:

Select one:
Chương trình bị sai vì phần else không kiểm tra xem rbx có lớn hơn rax hay không.
Nên kết quả là rax sẽ luôn bằng 0.

Đây là giải thuật tìm USCLN của hai số nguyên dương khác 0

Chương trình hoàn toàn chính xác


Có thể sử dụng lệnh jnae thay vì dùng lệnh jb

Question 9 Cho đoạn mã assembly trên kiến trúc Intel thực hiện lệnh sau. Biết các số lưu trong các
Correct thanh ghi là số nguyên có dấu. Ý nào sau đây là đúng?

Mark 1.00 out of


if(eax==1) eax=ebx+1;
1.00

Flag question

else if (eax==2) ebx=eax+ecx+2;

else if (eax==3) ebx=eax+ecx+3;

Mã assembly:
/
if1:

cmp $1, %eax

jne if2

then1:

mov $1, %eax

add %ebx, %eax

jmp endif

if2:

cmp $2, %eax

jne if3

then2:

mov $2, %ebx

add %ecx, %ebx

add %eax, %ebx

/
if3:

cmp $3, %eax

jne endif

then3:

mov $3, %ebx

add %ecx, %ebx

add %eax, %ebx

endif:

Select one:
Chương trình hoàn toàn chính xác

Dấu $ trước các hằng số là sai


Thiếu lệnh jmp endif trước nhãn if3
Lệnh cmp sử dụng hằng số trực tiếp là sai

Question 10 Cho đoạn mã assembly trên kiến trúc Intel thực hiện lệnh sau. Biết các số lưu trong các
Correct thanh ghi là số nguyên không dấu. Ý nào sau đây là đúng?

Mark 1.00 out of


if (eax>ebx) eax-=ebx; else ebx-=eax;
1.00

Flag question

Mã assembly:

if: cmp %ebx, %eax

/
jae else

then:

sub %ebx, %eax

jmp endif

else:

sub %eax, %ebx

endif:

Select one:
Lệnh jae else là sai

Chương trình hoàn toàn chính xác

Lệnh jmp endif là sai

Lệnh sub %ebx, %eax là sai

Question 11 Cho đoạn mã Intel Assembly sau, ý nào sau đây là đúng?
Incorrect
val: .short -13
Mark 0.00 out of
1.00

Flag question
...

sub val, %eax

Select one:
/
Đoạn mã hoàn toàn chính xác

Không có kiểu dữ liệu là short


Lệnh sub trên là sai vì val và eax không cùng kiểu

Lệnh khai báo biến val là sai cú pháp

Question 12 Ý nào sau đây là sai về lệnh add $0xFFFF,%ax


Correct
Select one:
Mark 1.00 out of
1.00 Lệnh này tương đương với lệnh %ax += 0xFFFF; trong C

Flag question Dấu $ dùng để đánh dấu đây là một hằng số

0x dùng để đánh dấu đây là số ở hệ 16

Đây là lệnh cộng hai số nguyên dương với nhau

Question 13 Cho đoạn mã Intel assembly thực hiện tính tổng n số tự nhiên đầu tiên, trong đó a là số
Correct nguyên không dấu kiểu unsigned int và a>0. Ý nào sau đây là đúng:

Mark 1.00 out of


ecx=a;
1.00

Flag question

eax=0;

do {

eax+=ecx; ecx--;
}while(ecx>0) ;

Mã assembly:

KT:

xor %eax, %eax

mov a, %ecx

do:
/
add %ecx, %eax

loop do

Select one:
Chương trình hoàn toàn chính xác

Thiếu lệnh gán eax=0

Thiếu lệnh dec %ecx trước lệnh loop


Thiếu lệnh nhảy để tạo thành vòng lặp

Question 14 Cho đoạn mã assembly trên kiến trúc Intel thực hiện lệnh sau. Biết các số lưu trong các
Incorrect thanh ghi là số nguyên không dấu. Ý nào sau đây là đúng?

Mark 0.00 out of


if(eax>ebx && eax>ecx) eax=ebx+ecx; else ebx=eax+ecx;
1.00

Flag question

Mã assembly:

if:

cmp %ebx, %eax

jbe else

cmp %ecx, %eax

jbe else

then:

mov %ecx, %eax


/
add %ebx, %eax

jmp endif

else:

mov %eax, %ebx

add %ecx, %ebx

endif:

Select one:
Thừa lệnh jmp endif

Lệnh add %ecx, %ebx là sai


Sai ở lệnh jbe else

Chương trình hoàn toàn chính xác

Question 15 Cho lệnh Intel Assembly sau, ý nào sau đây là đúng?
Incorrect
mul $8
Mark 0.00 out of
1.00

Flag question
Select one:
Đây là lệnh nhân số không dấu số bị nhân nằm ở thanh ghi ax, tích được lưu ở thanh
ghi dx:ax
Lệnh sai sẽ bị báo lỗi

Đây là lệnh nhân số không dấu số bị nhân nằm ở thanh ghi eax, tích được lưu ở thanh
ghi edx:eax
Đây là lệnh nhân số không dấu số bị nhân nằm ở thanh ghi al, tích được lưu ở thanh
ghi ax

/
Question 16 Cho đoạn mã Intel assembly thực hiện tính tổng các số dương ở đầu tiên ở đầu của một
Correct mảng số nguyên có dấu a, có n phần tử, n là số nguyên không dấu kiểu unsigned int và
n>1. Kết quả tổng chứa ở eax. Ý nào sau đây là đúng?
Mark 1.00 out of
1.00
eax=0;
Flag question

ecx=0;

while (ecx < n && a[ecx]>=0) eax += a[ecx++] ;

Mã assembly,

mov $0, %eax

xor %ecx, %ecx

while:

cmp n, %ecx

je endwhile

cmp $0, a(, %ecx, 4)

jb endwhile

do:

add a(, %ecx, 4), %eax

inc %ecx

/
jmp while

endwhile:

Select one:
Sai ở lệnh cmp $0, a(, %ecx, 4)

Sai ở lệnh add a(, %ecx, 4), %eax

Sai ở lệnh mov $0, %eax


Chương trình hoàn toàn chính xác với giả thiết n>1

Question 17 Ý nào sau đây là sai liên quan đến khai báo .section .data
Incorrect
Select one:
Mark 0.00 out of
1.00 Đây là khai báo một section của chương trình dùng để chứa dữ liệu

Flag question Các biến được khai báo trong section này là dữ liệu toàn cục

Đây là khai báo vùng mã lệnh của chương trình


Các khai báo biến cần đặt trong section này

Question 18 Cho đoạn mã Intel Assembly cài đặt chương trình tính số hạng thứ n (không kể số a0) của
Correct một cấp số cộng với số hạng đầu là a0 và công sai là b (a0, b và n là các số nguyên dương
kiểu unsigned int, n>0), kết quả chứa ở thanh ghi eax. Ý nào sau đây là đúng?
Mark 1.00 out of
1.00
eax=a0; ebx=b;
Flag question

for(ecx=n; ecx>0; ecx--)eax+=ebx;

Mã assembly:

mov a0, %eax

mov b, %ebx

/
mov n, %ecx

while:

cmp $0, %ecx

je endwhile

do:

add %ebx, %eax

dec %ecx

jmp while

endwhile:

Select one:
Chương trình hoàn toàn chính xác vì đã có ràng buộc n>0

Sai ở lệnh mov n, %ecx

Sai ở lệnh cmp $0, %ecx

Sai ở lệnh jmp while

Question 19 Ý nào sau đây là sai về lệnh subsd s,d


Correct
Select one:
Mark 1.00 out of
1.00 Lệnh tương đương trong C là d -= s;

Flag question Đây là lệnh trừ hai số kiểu double với nhau

Lệnh này bắt buộc d phải là thanh ghi xmm

/
Ví dụ một lệnh là subsd $5, %xmm0 trong đó %xmm0 đang chứa một số kiểu double

Question 20 Ý nào sau đây là sai về lệnh divss s,d


Incorrect
Select one:
Mark 0.00 out of
1.00 Lệnh tương đương trong C là d /= s;

Flag question Lệnh này bắt buộc cả s và d phải là thanh ghi xmm

Ví dụ một lệnh là divss m, %xmm0 trong đó m và %xmm0 đang chứa một số kiểu float

Đây là lệnh chia hai số kiểu float với nhau

Finish review

QUIZ NAVIGATION

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Show one page at a time
Finish review

You are logged in as Đặng Thị Hà Ngân (Log out)


INT2212 4 Autumn 2020

You might also like