Hãy trình bày và giải thích vai trò của các thành phần trong các cấu trúc câu lệnh R-format, I-format, J-format.. Tại sao trong cấu trúc câu lệnh R-format, trường opcode và funct không n
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM THÀNH PHÓ HÒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
-===== [Hl -
© 36 TP HO CHi MINH
BAI THI
KIEN TRUC MAY TINH
VA HOP NGU
Sinh viên thực hiện:
Mã số sinh viên:
Mã lớp học phần:
Lớp sinh viên:
Trang 2Thành phố Hô Chỉ Minh, tháng 12 năm 2021
Trang 3MỤC LỤC
LOI CAM ON
DE THI
NOI DUNG BAI THI
CAU 1 (2 GUGM) eee ces ceccceeseeseceessesscesessvsecsevssssessessessnsersetsesevseseserseseveveesens 5 CAU 2 (3 GUGM) eee eecceccceeseeseceessesscesessvseesevssssessessessnsersetsesevstsesensesevevsesens 8 CAU 3 (5 GIG) eee cecceccececsesecsscessesevssessesevssesessessessessesevensesevevsesevsnsevsnseses II
Trang 4LỜI CẢM ƠN
Lời đầu tiên em xin gửi lời cám ơn đến trường đã tạo điều kiện để sinh viên chúng em có một môi trường học tập thoải mái về cơ sở hạ tầng cũng như cơ sở vật chất
Tiếp theo, em xin gửi lời cám ơn đến các thầy/cô khoa Công nghệ Thông tin đã tạo điều kiện tốt nhất để em tiếp thu kiến thức ngành học của em Em xin gửi lời cám ơn đến thầy AAA, trong suốt quá trình học tập va tim hiéu mén “Kién ứrúc máy tính và hợp ngữ”, em đã nhận được sự giảng dạy tận tình của thay Điều đó giúp em tích lũy được thêm nhiều kiến thức mới cho bản thân Thông qua bài thí này em xin trình bày lại những øì mà bản than em đã được học từ thầy và cũng như những kiến thức mà em đã tìm hiểu trong suốt quá trình học tập
Có lẽ vì kiến thức là vô tận mà sự tiếp nhận kiến thức mỗi người ở mức độ khác nhau Do đó, trong quá trình hoàn thành bài thí chắc chắn sẽ có những hạn chế và
có nhiều sai sót Bản thân em cũng rất mong nhận được những góp ý đến từ thầy đề bai thi của em được hoàn thiện hơn
Cuối cùng, em kính chúc thầy có nhiều sức khỏe, hạnh phúc và thành công hơn trên con đường công tác và giảng dạy của mình
Xin chân thành câm ơn!
Sinh viên thực hiện
Trang 5DE THI
Cau 1 (2 diém)
a Hãy trình bày và giải thích vai trò của các thành phần trong các cấu trúc câu lệnh R-format, I-format, J-format
b Tại sao trong cấu trúc câu lệnh R-format, trường opcode và funct không năm liền nhau?
Câu 2 (3 điểm)
a) Trình bày thuật toán nhân hai số nguyên có đấu (thuật toán Booth) và cho ví
dụ minh họa
b) Trong thuật toán Booth, người ta sử dụng cặp bít QạQ¡ để làm điều kiện phân loại xử lý Hãy trình bảy cơ sở lý thuyết của ý tưởng này:
Q — Multiplier Count — a
Right A,Q,Q,
Count -— Count -1
Trang 6
Câu 3 (5 điểm)
Cho đoạn mã được viết bằng ngôn ngữ ASM
1 MOV N, 10
2 MOV Cx, N
DEC cx
3 MOV SI, 0
4 FOR_I:
5 PUSH CX
MOV CX, N
6 MOV DI, 0
" MOV DL, A[STI]
8 FOR_J:
CMP DL, A[DTI]
9 JB LAP
11 MOV A[DI], DL
12 MOV A[SI], BL
MOV DL, A[SI]
Lộ LAP:
14 INC DI
15 LOOP FOR J
INC SI
16 POP CX
17 LOOP FOR_I
Yéu cau:
1 Hoàn chỉnh chương trình đầy đủ để có thê chạy được, cho | vi du minh hoa cu thé input va output khi thực hiện chương trình hoàn chỉnh
2 Hãy chuyền đôi 3 dòng lệnh bất kỳ của đoạn mã trên sang ngôn ngữ máy
3 Hãy viết lại chương trình băng ngôn ngữ C (hoặc C+~) mà không làm thay đổi đi các công việc chính được thực hiện trong đoạn mã trên
Trang 7NOI DUNG BAI THI CAU 1 (2 diém)
a Hãy trình bày và giải thích vai trò của các thành phần trong các cấu trúc câu lệnh R-format, I-format, J-format
CẤU TRÚC CÂU LỆNH R-FORMAT
opcode (operation code): mi thao tac, cho biét lệnh làm gì
funct (function code): kết hợp với opcode đề xác định lệnh làm gì (trường hợp các lệnh có cùng mã thao tac với opcode)
rs (source register): thanh ghi nguồn, thường chứa toán hạng nguồn thứ |
r (target register): thanh ghi nguồn, thường chứa toán hạng nguồn thứ 2
rd (destination register): thanh ghi đích, thường chứa kết quả lệnh
shamt: chứa số bít cần địch trong các lệnh dịch, nếu không phải lệnh dịch thì trường này có giá trị 0
Nhận xét:
Các trường lưu địa chỉ thanh ghi rs, rt, rd có kích thước 5 bít
> Có khả năng biếu diễn các số từ 0 đến 31
> Đủ để biếu diễn 32 thanh ghi của MIPS
Trường lưu số bít cần dịch shamt có kích thước 5 bít
> Có khả năng biếu diễn các số từ 0 đến 31
> Đủ để dịch hết 32-bit lưu trữ của 1 thanh ghi
Ví dụ:
Biểu diễn machine code cua lénh: sil $t2, $80, 4
Trang 8Biểu diễn lệnh với R-format theo từng trường:
0 0 16 10 4 0
000000 00000 10000 01010 00100 000000
rs = 0 (không dùng trong phép dịch)
rt = l6 (toán hạng nguồn là $s0 ~ $16)
rd = I0 (toán hang dich la $t2 ~ $10)
shmat = 4 (số bít dịch = 4)
CẤU TRÚC CÂU LỆNH I-FORMAT
opcode (operation code); ma thao tác, cho biết lệnh làm gì (tương tự opeode của R-format, chỉ khác không cần thêm trường funct)
Đây cũng là lý do tại sao R-ƒformat có 2 trường 6-bit đề xác định lệnh làm gì thay vì 1 trường 12-bit = Đề nhất quán với các cấu trúc lệnh khác (1-format) trong khi kích thước mỗi trường vẫn hợp ly
rs (source register): thanh ghi nguồn, thường chứa toán hạng nguôn thứ I
rt (target register): thanh øhi đích, thường chứa kết quả lệnh
immediate: 16-bit, co thé biểu diễn số nguyên từ -215 đến (215 - L)
> [format da co thé lưu hằng số 16 bit (thay vi 5-bit nhw R-format) Vidu:
Biéu dién machine code cua lénh: addi $s0, $s1, 10
Trang 9Biểu diễn lệnh với R-format theo từng trường:
opcode = 8: Xac dinh thao tac céng hang sé
rs = L7 (toán hạng nguồn thứ | 1a $31 ~ $17)
tt= l6 (toán hạng đích là $s0 ~ $16)
Iinmediate = 10 (toán hạng nguồn thứ 2 = hằng số = 10)
CẤU TRÚC CÂU LỆNH J-FORMAT
opcode (operation code): ma thao tac, cho biét 1énh lam gì (tương tự opcode cua R-format va I-format)
Đề nhất quán với các cấu trúc lệnh khác (Ñ-ƒormat và ]-ƒormaf)
target address: Lưu địa chỉ đích của lệnh nhảy
Tương tự lệnh rễ nhánh, địa chỉ dich của lệnh nháy tính theo đơn vị word Nhận xét:
Trong cấu trúc lệnh J-format, các lệnh nhảy có thê nhảy tới các lệnh có địa
chỉ trong khoảng 25
Muốn nhảy tới các lệnh có địa chỉ lớn hơn từ 2?” đến 2??
> MIPS hé tro lệnh jr (đọc trong phân thủ tục)
> Tuy nhiên nhu cầu này không cần thiết lắm vì chương trình thường không quá lớn như vậy
Trang 10b Tại sao trong cấu trúc câu lệnh R-format, trường opcode và funet không năm liên nhau?
Trong cấu trúc câu lệnh R-format, trường opcode và funct không nằm liền nhau là để nhất quán với các câu trúc lệnh khác trong khi kích thước của mỗi trường
van hop li
Y
tiếp theo quyết định thanh ghi nguồn Nếu chúng ta kết hợp opcode và funct cho
lệnh R thì định dạng lệnh không nhất quán giữa R và I điều này có thé lam cho thiết
kế của bộ xử lý trở nên phức tạp Cụ thể như sau:
-_ Cái thứ nhất, chiều rộng có định là 32-bít Nó đảm bao rang opcode 6 bits, đối với loại R và I, 5-bit tiếp theo quyết định thanh ghi nguồn Định dạng lệnh đã nhất quán giữa R và I giúp đơn giản hóa bộ nhớ cache và sự hiện diện của trang
- Thứ hai, các lệnh đã có chiều rộng cô định và vị trí cố định Điều nảy làm cho chúng nhanh hơn, ít logic hơn để giải mã và cần thiết trong giai đoạn đầu của
quá trình xử lý thông tin Thanh ghi đích không cần thiết cho đến khi kết thúc
đường dẫn, nên nó có thê ở những vị trí khác nhau trong lệnh R và I
- Cuối cùng, vẫn có thể đặt funct ngay bên cạnh opcode và di chuyên các trường khác Tuy nhiên điều này sẽ đòi hỏi phải chia nhỏ ngay lập tức cho loại I Chia nhỏ để giảm sự trộn lẫn cần thiết cho việc giải mã và đơn giản hóa phần mở rộng ký hiệu phần mềm thông qua dịch chuyên bên phải số học bằng cách đặt bít trên cùng của phân mêm ngay lập tức ở ngoài cùng bên trái
Trang 11CÂU2 (3 điểm)
a Trình bảy thuật toán nhân hai số nguyên có dấu (thuật toán Booth) và cho ví
dụ minh họa
THUẬT TOÁN BOOTH
Các số hạng trong phép nhân phải có dấu Vậy nếu là Số dương bít lớn
nhất ; S6 4m bit lớn nhất
Các số hạng có độ dài bit giống nhau
Khởi tạo
Khi hay đời bít sang phải giảm số hạng nhân là
Khi thì dời bít sang phải giảm số hạng nhân là
Khi thì dời bít sang phải giảm số hạng nhân là
Khi đời bít giữ đấu của
Khi nhân hết số hạng kết quả là giá trị được nối giữa hai giá trị
VÍ DỤ:
Chuyến số thập phân sang nhị phân có dấu:
Thông thường trong máy tính các số hạng có dạng +, 8, 16, 32, 64 bils nhưng
đề đơn giản và không ảnh hưởng thuật toán ta có thể chuyên sang số nhị phân có
số bịt 2 số hạng bằng nhau và có dấu
Thực hiện
Trang 12
b Trong thuật toán Booth, người ta sử dụng cặp bít QuQ¡ để làm điều kiện
phân loại xử lý Hãy trình bảy cơ sở lý thuyết của ý tưởng này:
Right: A, Q Q,
Count — Ceunt ~ 1
Ý TƯỞNG THUẬT TOÁN BOOTH
Positive
Negative
Trang 13CƠ SỞ THUẬT TOÁN BOOTH
Chia y:
- n là số bít của số đó sau khi chuyến thành hệ nhị phân (ví đụ : 4 bits, 8 bits, 16 bits )
- _ Thứ tự của các bịt trong hệ nhị phân được bat dau tir 0,1,2,3 Nén bit cuối cùng của | so la bỊt có vị trí n -Ï
Bước 0
Bước Ì
Bước 2
Bước 3
Bước
Vì và chính là bít xác định đấu nên phần trong dấu ngoặc chính là Vậy
Vi vay, cap được chọn làm điều kiện phân loại xử lý ( hoặc )
CÂU3 (5 điểm)
Cho đoạn mã được viết bằng ngôn ngữ ASM
Trang 14MOV N, 10 ; MOV CX, N
DEC CX MOV SI, 0 FOR_I:
PUSH CX MOV CX, N MOV DI, 0 MOV DL, A[SI]
FOR_J:
CMP DL, A[DI]
JB LAP MOV BL, A[DI]
MOV A[DI], DL MOV A[SI], BL MOV DL, A[STI]
LAP:
INC DI LOOP FOR J INC SI POP CX LOOP FOR_I
Yêu cầu:
1 Hoàn chỉnh chương trình đầy đủ đề có thế chạy được, cho I ví dụ minh họa
cu thé input va output khi thực hiện chương trình hoàn chỉnh
CHƯƠNG TRÌNH HOÀN THIỆN
1 ‹MODERL SMALL
2 STACK 100H
3 DATA
6
7
8
9
1 - CODE
0
1 PS:
1
1 MOV N, 10
2
3
1 DEC CX
4
Trang 15€@G@
END
MOV SI, 0
FOR I:
PUSH CX
MOV CX, N
MOV DI, 0 MOV DL, A[ST]
FOR J:
CMP DL, A[DI]
JB LAP MOV BL, A[DI]
MOV A[DI], DL MOV A[SI], BL
MOV DL, A[ST]
LAP:
INC DI
LOOP FOR_J
INC SI
POP CX
LOOP FOR_I
Trang 16
VÍ DỤ
2 Hãy chuyền đôi 3 dòng lệnh bất kỳ của đoạn mã trên sang ngôn ngữ máy
MOV N, 10
Chuyên đổi:
MOVCX,N
Chuyên đôi:
LOOP FOR_I
Chuyên đổi:
3 Hãy viết lại chương trình bằng ngôn ngữ C (hoặc C++) mà không làm thay đôi đi các công việc chính được thực hiện trong đoạn mã trên
1 #include <iostream>
2 using namespace std;
5 int temp, i, 1, k;
6 for (3 = 0; j < count; +13)
8 for (k = 43 + 1; k < count; ++k)
9 {
1 if (number[j] > number[k])
Q
1
1 temp = number[j];
2
1 number[j] = number[k];
3
1 number[k] = temp;
4
Trang 17FWOWUONODANHAINAN
int
}
cout << "Result after sorting: ";
for (i = 0; i < count; ++i)
Ww,
r
cout << number[i] << "
main()
int i, count, number[10];
cout << "Number of elements in the array: ";
cin >> count;
cout << "The value of each element in the array: for (i = 0; i < count; ++i)
cin >> number[i];
sort_numbers_ascending (number, count);
ự