TOM TAT KHÓA LUẬNKhóa luận “ Nghiên cứu quá trình biên dịch cho Mips core 32 bit” là khóa luận nghiên cứu tập trung tìm hiểu xây dựng hoàn chỉnh quá trình biên dịch cho Mips core 32 bits
Trang 1ĐẠI HỌC QUOC GIA TP HO CHÍ MINH TRUONG DAI HOC CONG NGHE THONG TIN
KHOA KY THUAT MAY TINH
HO NHAT MINH
KHOA LUAN TOT NGHIEP
NGHIEN CUU QUY TRINH BIEN DICH CHO MIPS
CORE 32 BITS
RESEARCH THE COMPILER FOR MIPS CORE 32 BITS
KY SU KY THUAT MAY TiNH
TP HO CHÍ MINH, 2022
Trang 2ĐẠI HỌC QUOC GIA TP HO CHÍ MINH
TRUONG DAI HOC CONG NGHE THONG TIN
KHOA KY THUAT MAY TÍNH
HO NHẬT MINH - 17520746
KHOA LUAN TOT NGHIEP
NGHIEN CUU QUY TRINH BIEN DICH CHO MIPS
CORE 32 BITS
RESEARCH THE COMPILER FOR MIPS CORE 32 BITS
KY SƯ KY THUAT MAY TÍNH
GIANG VIEN HUONG DAN
NGUYEN MINH SON
TP HO CHÍ MINH, 2022
Trang 3THONG TIN HOI DONG CHAM KHÓA LUẬN TOT NGHIỆP
Hội đồng cham khóa luận tốt nghiệp, thành lập theo Quyết định số 62/QD-DHCNTT
ngày 14 tháng 02 năm 2022 của Hiệu Trưởng Trường Dai Học Công Nghệ Thông Tin.
Trang 4LOI CAM ON
Dé hoàn thành khóa luận tốt nghiệp này, chúng em xin gửi lời cảm ơn chân
thành tới quý thầy cô khoa Kỹ thuật Máy tính nói riêng và các thầy cô trường Đại học
Công nghệ Thông tin- Đại học Quốc gia Thành phố Hồ Chí Minh nói chung đã dạy chúng em những kiến thức và truyền đạt những kinh nghiệm vô giá trong suốt chặng
đường học tập vừa qua.
Đặc biệt chúng em cũng xin chân thành cảm ơn thầy T.S Nguyễn Minh Sơn
và thầy TS Đoàn Duy đã giúp dành thời gian hướng dẫn và chỉ bảo chúng em trong suốt quá trình làm khóa luận để chúng em hoàn thành khóa luận tốt nghiệp, một lần
nữa em xin chân thành cảm ơn Thay.
Xin cảm ơn các anh chị, bạn bè, những người đã giúp đỡ chúng em trong tìm
kiếm thông tin trong suốt thời gian thực hiện khóa luận này Cảm ơn các bạn đã cùng đồng hành trong suốt chặng đường 5 năm học vừa qua.
Một lần nữa chúng em xin chân thành cảm ơn tới tất cả mọi người đã giành
thời gian, công sức giúp đỡ chúng em trong quá trình làm khóa luận tốt nghiệp Chúng
em xin gửi lời xin lỗi tới tat cả mọi người đo trong quá trình thực hiện khóa luận cũng không tránh khỏi những sai lầm và thiết sót, chúng em mong thay cô, các anh các chị, các bạn có thể bỏ qua và thứ lỗi.
Sinh viên thực hiện
Hồ Nhật Minh
Khoa Kỹ thuật Máy tính
Trang 5MỤC LỤC
Chương 1 TONG QUAN 22522222 22xt 22 2212212122 re 3
1.1 Tình hình nước ngoài -eceeeeerrrrrrierretrrririiriirrirrrrririiirrrrriiT) 1.2 Tình hình trong nước eeeeeeeerrrrrrirrrrrrrrrrrrrrrrrrrrrei
1.3 LY do chon chẽ
Tu nao nh cố ẽẽẽ
Chương2 CƠ SỞ LÝ THUYẾT -22¿+2VE+++t222EEE+ttEEESzrrtrrrecree 6
2.1 Sơ lược về kiến trúc tập lệnh MIPS 32 bit -sseceeeeeex Ô
2.1.1 Quan điểm lịch sử -eeeeeeereereereereereererreereere.Ổ
2.1.2 Giới thiệu về kiến trúc MIPS 32 bit.
2.2 Các thành phần của kiến trúc bộ lệnh MIPS 32 bit Ở 2.2.1 _ Kiến trúc tập lệnh (ISA)
2.2.2 Kiến trúc tài nguyên phân quyền(PRA) 12 2.2.3 Các thành phan mở rộng tùy chon cho ứng dụng(ASE).
2.2.4 Câu lệnh được người dùng định nghĩa(UDIS) LS
2.2.5 Đồ hình truyền đữ liệu s-.eseeseereeeeeeeee 13 2.3 Kiến trúc lệnh và tập thanh ghi trong MIPS 14
2.3.1 Thanh ghi CPU ceeeeeeeeeerrrrrrrrrrrrrrrrseov LA 2.3.2 Thanh ghi chương trình(PC) sceeeeeeeeeerrrrrrrreeseeee LO 2.3.3 Các thanh ghi lệnh -.-eeeeeeeeeeeerrrree TỐ,
Trang 62.3.5.1 Dữ liệu trong thanh ghi FPU -cccccees««c.ee-eee x LO
2.3.6 0n 0 2.3.7 Cách thức đánh dia chỉ -ecccceeeeceseeeeeseeeseeeee 20 2.3.8 Tập lệnh của MIIPS e-ecsceererkrirriiiiriririiiiirriirirrrirrerseeroe 22
2.3.9 Các định dạng lệnh cơ bản eeeeeerrrrrrreorruu DA
2.3.10 Các lệnh cơ bản trong MIPS òceceeeeeerrrrrrrrreooe 2D
2.3.11 Quan lý bộ nhớ -ccscseeiereeereiriiirriiiiirrrriruee OL 2.3.12 Pipeline e2 Ï
2.4 Sự phát triển của kiến trúc - -.eereeeeeeeereeeereeeereeeeeee 3D
2.5 Trình biên dịch và các công cụ trong trình biên dịch 7
2.5.2 Khái niệm và các loại trình biên dịch ‹ see-cxves«eecxvee SO 2.5.2.1 Khái niệm eo OO! 2.5.2.2 Các loại trình biên dịch eo, 2
Chuong 3 PHÂN TÍCH THIẾT KE HE THÓNG - 40
3.1 Mô tả môi trường biên dịch -eesestrtrrrrrtrrrrrrrrrrrrrrrrreee LÔ 3.1.1 Các quá trình có trong môi trường biên dịch cho MIPS32 40
3.1.2 Thành phan môi trường biên dich.
3.1.2.1 Toolchain e«ccrkxeeereriiererriirrrrrrrrre 2 3.1.2.2 Linker
3.1.2.3 BOotlOadei eeeeeerrrrsrsaoue 4A 3.2 Xây dựng môi trường biên dich cho MIPS 32 BIT
3.2.1 Xay dung toolchain trên kernel Linux -. - 4O,
Trang 73.2.2 _ Tích hợp toolchain vào công cụ EcÏipse . -+
Chương 4 | KET QUA THỰC NGHIỆM VÀ KIEM THỬ
4.1 Kết quả từ môi trường biên dịch -ss.trresrrerrerrerrerrrrre
4.2 Kịch bản kiểm thử và kết quả kiểm thử s.errerrerrere
4.2.1 _ Kịch bản kiểm thử -escesreererrerrereerrrrrrrore 4.2.2 Kết quả kiểm thử với công cụ Mars 4.5 esereee
4.2.3 So sánh với trình biên dịch COMPILER EXPLORER
Chương 5 KÉT LUẬN VÀ HƯỚNG PHÁT
TRIẺN -5.1.2 Hướng phát triển eceeeeeeereererrrrerrerrrrrrrrre
50 51 51
52
52
54 61 64 64 64
Trang 8DANH MỤC HÌNH
Hình 1.2.1: Giao diện của Mars 4.5 .essscssssssssssssssssssssscsssssesssssssssssessessessessscsacssssessassssssecssssaesaeees 4 Hình 1.2.2: Giao diện của Compiler Explorer cesses 4
Hình 2.1: Kiến trúc phan cứng của một MIPS 32 bit cơ bản s - 9
Hình 2.2: Các lệnh MIPS 32 cơ bản .cccccccccscceerstrserteritrtstrktrrrrrrrrrrrrrrrserkee 12
Hình 2.3: Sơ đồ truyền dữ liệu của MIPS32 -ccccccrrirceevvrrrrrrrereerrrrie 13
Hình 2.4: Quy ước các thanh gÌh1 -«-©-e<cerxetrrrxerrrxerrrrsrtrrkerrrrkerrrkerrrrkerrrke 17
Hình 2.5: Phân bồ trong thanh ghi của các lệnh -+ ss.+ccssrccztree 24
Hình 2.6: Ý nghĩa của các trường trong thanh ghi -. cceceerreeceerrcee 25
Hình 2.7: Lệnh nap ghl ss-s-+s<+xxEE xà HH Hà Hàng nà HH nnhườt 26
Hình 2.8: Các lệnh số học kiểu Immediate iicccccccccvvvvvvSvEvEEEEEEEEEEEEEEEEEEErrrrrrre 26
Hình 2.10: Các lệnh nhân và Chia - ¿5 c5c+Sc++tsecsErsersertersertsrtsrksrrsrrsersersrrssrk 27
Hình 2.11: Các lệnh nhãy và rẻ nhánh -«-c-«<+cxesekrxetsktetrrirkkririrrirke 28
Hình 2.12: Ví dụ về không có pipeline -«cestreeeerreeerrrererreretrrrrerrre 32
Hình 2.13: Ví đụ về có pipeline -+ccccstreceverrrreevvrrrrrrrrrrrrrrrrrrrrrrrrree 33
Hình 2.14: Đường dữ liệu trong DID€ÌIT€ e« ssc5s<esetskeerketkkeirrkrrtkeiirkrrrree 35
Hình 2.15: Sự phát trién của kiến trúc MIPS .ccesreeeerreeeerrreerrre 37Hình 2.16: Sơ đồ biên dịch cơ DAM cessssssssssssssssssssssssssssssssssssssssssssssssssssssssssssersesseseeseeeeeee 39
Hình 3.1: Các bước có trong môi trường biên dịch cơ bản . -« 41
Hình 3.2: Môi trường biên dịch cho IMIIPS32 -secccsetsrxirrkeierkerirrierrrke 42 Hình 3.3: Nguyên lý vận hành của LInIK€T - -ssc-5s<esetskeEEketkkeierkrtkeiirkrrrree 44
Hình 3.4: Các thư viện và phiên bản được sử dụng . -cc-cxeeeerseerxee 46
Hình 3.5: Lưu trữ các thư VIỆN c5 s55 Ssccs+tereEstttrErsrksrktrsrrsrkrrsrrrkrrsrrsrerrkrrsrkee 48 Hình 3.6: Cài đặt công cu gece và các thư viện trên Ïinux -« -ee «+ 48 Hình 3.7: Cai đặt ØlIDC cs-ccxe+crrxtrrkrtkrrtrrtirtkrirtrtirtrrrrrrtirrrkrtrrirrrrrerrrrierrree 49 Hinh 3.8: Cai dat kernel] LImuX 07 49
Hinh 3.9: Cai dat Binutils cc 49
Trang 9Hình 3.10: Tích hợp toolchain vào ECÏIDSe -«-55<esetekeEkktkkirrirtikiirree 50
Hình 4.1: Chương trình C++ được dùng trong quá trình biên dịch 51
Hình 4.2: Kết quả biên dich từ Eclipse -ecccecrrreeeevverrrreeevvrrrrrrerrerrrrrre 52Hình 4.3:Kịch bản kiểm thử -:++2222SE22221511212121111712.1.24111172 21111.1 e 53Hình 4.4: Công cụ COMPILER EXPLORER dùng dé so sánh 53Hình 4.5: Công cu Mars 4.5 dùng dé kiểm thử -cccesrrecceerrreeere 54
Hình 4.6: Kết quả biên dịch của chương trình cộng -s-+- 54
Hình 4.7:Kiém thử trên Mars 4.5 của chương trình cộng - 55
Hình 4.8:Biên dịch cho chương trình phép nhân .‹ -cc+csscccsvccesecseecseee 55
Hình 4.9: Kiểm thử trên Mars 4.5 cho chương trình phép nhân 56
Hình 4.10:Biên dịch cho chương trình If-eÌS€ -.-cc ©cccesesecxeerrrrrvsrrrrreerre 56
Hình 4.11: Kiểm thử trên Mars 4.5 cho chương trình is else -s 57
Hình 4.12:Biên dịch cho chương trình switch CaSe «ccccccsreereeerieerreeriee 57
Hình 4.13: Kiểm thử trên Mars 4.5 cho chương trình Switch case - 58
Hình 4.14:Biên dịch cho chương trình ÍOF -cscccsccccevecxeevreeerxeerreeerrserrerrrsree 58
Hình 4.15: Kiểm thử trên Mars 4.5 cho chương trình for s 59
Hình 4.16:Bién dịch cho chương trình whIÏe -cse<cccssrerxeerrrxerxrxerrrreeree 59
Hình 4.17: Kiểm thử trên Mars 4.5 cho chương trình while -ss 60
Hình 4.18:Biên dịch cho chương trình ham COH -. -ssc5ssscxesercvsrsrxeerrrssree 60
Hình 4.19: Kiểm thử trên Mars 4.5 cho chương trình hàm con 61
Hình 4.20: Ví dụ chương trình biên dịch có chứa hàm local của trình biên dịch .61
Hình 4.21:So sánh về thời gian của hai trình biên dịch s - 62Hình 4.22: Ví dụ về sự khác nhau ở các địa chỉ lưu trữ ccceer.rccse 62
Hình 4.23: So sánh kết quả nhị phân của COMPILER EXPLORER (trai),
901050000 63
Trang 10Số dấu cham động chính sát kép ¿- ¿2+ ©+++++zx++xxezxesres 19
Số dấu cham động chính sát kép -¿- ¿+ ©+++++zx++xx+zxesres 19
I5 troy Cap oo 29
Lệnh nạp .- 5 G111 HH TH HH HH re 30
10127 aa 3I
Di chuyền dữ liệu 2 25522222 22+2EE2EEE2EEEEEEEEESEErErkerrrerkrervee 31
Trang 11DANH MỤC TỪ VIET TAT
Chữ viết tắt Chữ tường minh
GCC GNU Compiler Collection
MPFR Multiple-Precision Floating-Point
GMP GNU Multiple Precision
MPC Multiple-Precision Comple
GLIBC GNU Library C
CPU Central Processing Unit
ISL Interger Set Libary
GLOOG Chunky Loop Generator
MIPS Microprocessor Without Interlocked Pipeline Stages
GNU GNU's Not Unix
PRA Privileged Resource Architecture
ASE Modules and Application Specific Extensions
UDIs User Defined Instructions
FPU Floating Point Unit
ALU Arithmetic and Logic Unit
SIMD Single Instruction Multiple Data
MT Multi-Threading
DSP Digital Signal Processing
EVA Enhanced Virtual Addressing
ISA Instruction Set Architecture
Trang 12TOM TAT KHÓA LUẬN
Khóa luận “ Nghiên cứu quá trình biên dịch cho Mips core 32 bit” là khóa
luận nghiên cứu tập trung tìm hiểu xây dựng hoàn chỉnh quá trình biên dịch cho
Mips core 32 bits trên kernel của linux, ứng dụng các thư viện và các công cụ dé
xây dựng môi trường biên dịch hoàn chỉnh từ chương trình bật cao C++ thành
Assembly và từ Assembly thành mã nhị phân từ đó Mips core có thé vận thành theo
chương trình đã được biên dịch.
Trong nghiên cứu này ,nhóm đã quyết định thực hiện 3 phần chính Phần đầunhóm tìm hiểu về các thư viện cần có đề biên dịch thành công đoạn mã C++ thành
Assembly sau đó là tìm cách liên kết chúng với nhau đề chúng có thể hoạt động
được với nhau từ đó xây dựng chúng trên kernel của linux dé tạo thành một môi
trường có thé biên dịch Phan tiếp theo xây dựng công cụ Binutils trên môi trường
dé chuyên Assembly thành kết quả cuối cùng đó là đoạn mã nhị phân là đầu vào củaMips core dé nó có thé hoạt động Phần cuối cùng là tích hợp môi trường đã được
xây dựng vào một editor cụ thé là Eclipse dé quá trình biên dịch được tự động hóa
và dé dàng thiết kế mã C++ hơn
Trang 13Chương 1 TONG QUAN
1.1 Tinh hình nước ngoài
Ngày nay trong ngành công nghiệp bán dẫn chúng ta không còn xa lạ gì với
Mips core Các nước trên thé giới đang chạy đua về mặc công nghệ và cải tiễn Mips
nhăm nâng cao hiệu suât và ứng dụng của nó
Nhằm nâng cao hiệu suất và tối đa hóa tính ứng dụng của Mips một phần
không thê thiếu trong vận hành cũng như kiểm thử chức năng của chip đó là quá
trình biên dịch hiện nay trên thế giới đã có những công cụ biên dịch cho mips có độ
hoàn thiện cao như Mars 4.5, Compiler Explorer
MARS, Mips Assembly và Runtime Simulator, sẽ lắp ráp và mô phỏng việcthực thi các chương trình hợp ngữ MIPS Nó có thể được sử dụng từ một dòng lệnhhoặc thông qua môi trường phát triển tích hợp (IDE) MARS được viết bằng Java và
yêu cầu ít nhất Bản phát hành 1.5 của Môi trường chạy Java J2SE (JRE) để hoạt
động Nó được phân phối dưới dạng tệp JAR thực thi Trang chủ của MARS là
http://www.cs.missouristate.edu/MARS/ Tài liệu này có sẵn dé in ở đó Ké từ
Phiên bản 4.0, MARS lắp ráp và mô phỏng 155 lệnh cơ bản của tập lệnh MIPS-32,khoảng 370 lệnh giả hoặc biến thể lệnh, 17 chức năng syscall chủ yếu dành cho
bảng điều khiển và tệp I / O được định nghĩa bởi SPIM và thêm 22 syscalls cho các
mục đích sử dụng khác như đầu ra MIDI, tạo số ngẫu nhiên và hơn thế nữa Chúng
được liệt kê trong các tab trợ giúp riêng biệt.
Compiler Explorer là công cụ biên dịch được phát triển và tài trợ bởi Intel,
Solids Sands
Trang 14Elle Edit Bun Settings Tools Help
Take one dovn pass it around, 68 Bottles of beer on the vail
2 ane down pass it around, 97 battles of beer on the vall
around, 96 battles of beer on the vall
1, 96 bottles of beer around, $5 bottles of beer on the vall
» 95 bottlers of beer, around, 94 bottles of beer on the wall bottles of & LU, 9 bottles of beer, Take ane dovn pass 1t around, 83 bottles of beer on the vall
bottles of of beer, Take one dovn pats it around, 92 bottles of beer on the vall
bottles of es of heer Take ane don pass it around, 61 bottles af beer on the vall
bottles of beer SL bottles of beer Take one dovn [bo bottles of beer of
it around, 90 bottles of beer on the vatL
S0 bottles af beer Take ane dovn pass it around, 82 bottles of beer on the vall
& bottles of beer Take one down pass it around, 68 bottles of beer on the vall
#8 bottles of beer Take ane dovn pass it around, 67 bottles af beer on the vall
of beer, Take one dovn pass it around, B5 bottles of beer on the vall
[Bs bottles of bee af beer, Take ane dovn pass 1% around, 65 bottles of beer on the vall
fis bottles of beer of the wal of beer, Take ane dovn pass it around, 64 bottles of beer on the vall
[aa nasties af heer nf the wall B4 hatsles af heat Take ane smn ass i2 armind #2 battles nf heer nthe xa}1
Hình 1.2.1: Giao diện của Mars 4.5.
Mơre * [Support avert in C++ with fncude <-> +] | spsintel ASA | share~ Policies ~
ee cae = x | MPffSeS (øjf cauetff OSWBiere+) x a sng-ormal #1 with MiPSipee 54 (e) X Dutput of MIPS góc 54 (el) (Compiler #1) ox
he er eee = Ì MIPS gee 5.4 (el ^ @ Compiler optic | | A7 CWraplines > Arguments 495tdin A> [Wnaplines
ee nan z Seas edior retinal vi
2 using namespace std; L using namespace std;
3 int mginQ( Fe ane maing) ¢
A |
3 | tne man, sa; ' uy JES ine mt = 3, —.
: COUR Kista 9iiS6E34/200@56P6161/5<<( _ Bs MIFSE# 900 54 °' B cout €€ "sum of entered numbers is: " << (numi + nunz
; MIPS gec 5.4 (el) # E return 8;
406930 'jal 400ca0 <
~ BÁC IPS ace Shel tte fa
Hình 1.2.2: Giao diện cua Compiler Explorer.
1.2 Tình hình trong nước
Quá trình biên dich cho các chip sử lý trong nước cũng nhận được rất nhiều sự
quan tâm nhưng chủ yếu xử lý quá trình biên dich cho ARM là chủ yếu vì độ phổ
biến của dòng chip nay Mặc cho tìm năng rat lớn trong ứng dụng cũng như cải tiễn
Trang 15vê mặc hiệu năng các nghiên cứu về trình biên dich cho mips core chưa nhận được
nhiêu sự quan tâm
1.3 Lý do chọn đề tài
Trong quá trình phát triển và hoàn thiện các chức năng cũng như dé ứng dụng
và phát triển MIPS chúng ta cần thử nghiệm và phát triển ứng dụng bang các ngônngữ bật cao như C ,C++.Đề kiểm dinh và tối ưu ứng dụng chúng ta di sâu vào
nghiên cứu quá trình biên dịch từ ngôn ngữ bật cao sang nhị phân được đưa vào
chạy trên Chip từ đó ta hiểu sâu thêm về phương thức vận hành cũng như luồng
hoạt động từ lúc phát triển code đến lúc code được xử lý trong chip và từ đó điều
khiển các thiết bị ngoại vi.Hiện nay vì độ phô biến cũng như ứng dụng cao của
ARM core cũng đã có những nghiên cứu về biên dịch trên ARM core, nhận thấy tìmnăng của MIPS core trong tương lai sẽ phát triên nên nghiên cứu này sẽ cho ta cái
nhìn tông thê về nó.
1.4 Mục tiêu.
Mục tiêu của đề tài là nghiên cứu và xây dựng thành công môi trường biên
dịch trên kernel của linux bằng cách cài đặt các thư viện, công cụ kết hợp với nhau
dé có thé biên dịch từ ngôn ngữ bật cao C++ thành Assembly và từ Assemply thành
mã nhị phân từ mã nhị phân này qua bộ Bootloader từ đó mã được tải vào memory
của MIPS 32 bits Sau đó MIPS sẽ vận hành theo chương trình đã được biên dịch.
Từ nghiên cứu hiểu thêm về quá trình vận hành của máy tính từ chương trình
bật cao đên mã máy lây nó làm cơ sở đê kiêm thử và phát triên MIPS core vê sau.
Trang 16Chuong 2 CƠ SỞ LÝ THUYET
2.1 Sơ lược về kiến trúc tập lệnh MIPS 32 bit
2.1.1 Quan điểm lich sử
Kiến trúc Bộ hướng dẫn MIPS (ISA) đã phát triển theo thời gian từ MIPS I
TM [SA ban đầu, thông qua MIPS V ISA, đến Kiến trúc MIPS32 và MIPS64 hiện
tại Khi ISA phát triển, tất cả các phần mở rộng đã tương thích ngược với các phiên
bản trước của ISA Trong cấp MIPS III của ISA, các số nguyên và địa chi 64-bit đã
được thêm vào tập lệnh.
Các cấp độ MIPS IV và MIPS V của ISA đã b6 sung các hoạt động dau phâyđộng được cải tiến, cũng như một tập hợp các hướng dẫn nham cải thiện hiệu quả
của mã được tạo và di chuyên dữ liệu Do yêu cầu tương thích ngược nghiêm ngặtcủa ISA, những thay đổi như vậy không có sẵn cho các triển khai 32-bit của ISA,
theo định nghĩa, các triển khai MIPS I hoặc MIPS II Mặc dù ISA ở chế độ người
dùng luôn tương thích ngược, nhưng môi trường đặc quyền được phép thay đổi trên
cơ sở môi lân triên khai.
Do đó, môi trường đặc quyền R3000® khác với môi trường đặc quyền
R4000 và các triển khai tiếp theo, trong khi tương tự với môi trường đặc quyền
R4000, bao gồm những khác biệt nhỏ Bởi vì môi trường đặc quyền không bao giờ
là một phần của MIPS ISA, một triển khai có thé linh hoạt dé thực hiện các thay đổicho phù hợp với việc triển khai cụ thé đó Thật không may, phần mềm hạt nhân bắt
buộc này sẽ thay đổi đối với mọi hệ điều hành hoặc môi trường hạt nhân mà việc
triển khai đó dự định chạy
Nhiều triển khai MIPS ban đầu được nhắm mục tiêu vào các ứng dụng giốngmáy tính như máy trạm và máy chủ Trong những năm gần đây, việc triển khai
MIPS đã đạt được thành công đáng kể trong các ứng dụng nhúng Ngày nay, hầu
hết các bộ phận MIPS được vận chuyên đều đi vào một số loại ứng dụng nhúng
Các ứng dụng như vậy có xu hướng có sự đánh đôi khác với các ứng dụng giông
Trang 17như máy tính bao gồm tập trung vào chỉ phí thực hiện và hiệu suất như một hàm củachi phí và năng lượng Kiến trúc MIPS32 và MIPS64 nhăm giải quyết nhu cầu về
tập lệnh MIPS hiệu suất cao nhưng nhạy cảm về chỉ phí Kiến trúc MIPS32 dựa trênMIPS II ISA, thêm các lệnh được chọn từ MIPS III, MIPS IV va MIPS V dé cải
thiện hiệu quả của mã được tạo và di chuyên dữ liệu.
Kiến trúc MIPS64 dựa trên MIPS V ISA và tương thích ngược với Kiến trúcMIPS32 Cả hai Kiến trúc MIPS32 và MIPS64 đều đưa môi trường đặc quyền vào
định nghĩa Kiến trúc dé giải quyết các nhu cầu của hệ điều hành và phần mềm hat
nhân khác Cả hai cũng bao gồm điều khoản bổ sung Tiện ích mở rộng dành riêng
cho ứng dụng MIPS (ASE), Hướng dẫn do người dùng xác định (UDI) và bộ đồng
xử lý tùy chỉnh đề giải quyết nhu cầu cụ thé của các thị trường cụ thé.
Kiến trúc MIPS32 và MIPS64 cung cấp lợi thé về chi phí / hiệu suất đáng ké
so với việc triển khai bộ vi xử ly dua trên kiến trúc truyền thống Lợi thé này là kếtquả của những cải tién được thực hiện trong một số lĩnh vực liền kề: công nghệ quytrình VLSI, tổ chức CPU, kiến trúc cấp hệ thống, hệ điều hành và thiết kế trình biên
dịch.
2.1.2 Giới thiệu về kiến trúc MIPS 32 bit
Kiến trúc MIPS32 là một kiến trúc tiêu chuẩn công nghiệp có hiệu suất cao, làtrung tâm của hàng tỷ sản phẩm điện tử, từ vi điều khiển nhỏ đến thiết bị mạng caocấp Nó cung cấp một bộ hướng dẫn mạnh mẽ, khả năng mở rộng từ 32 bit đến 64
bit, một phô rộng các công cụ phát triển phần mềm và sự hỗ trợ rộng rãi từ nhiều
đôi tác và người được câp phép.
Kiến trúc MIPS32 cung cấp khả năng tương thích trở lên liền mạch với kiến
trúc MIPS64 64-bit, mang lại các tính năng mạnh mẽ, hướng dẫn chế độ đặc quyền
được tiêu chuẩn hóa và hỗ trợ cho các phiên bản ISA trước đây Kiến trúc MIPS32
kết hợp các chức năng quan trọng bao gồm SIMD (Đa dữ liệu hướng dẫn đơn) va ảohóa Những công nghệ này, kết hợp với các công nghệ như đa luồng (MT), phần mởrộng DSP va EVA (Địa chỉ ảo nâng cao) làm phong phú thêm kiến trúc dé sử dụng
Trang 18với khôi lượng công việc phân mêm hiện đại yêu câu kích thước bộ nhớ lớn hơn,
tăng mã lực tính toán và môi trường thực thi an toàn.
Kiến trúc MIPS32 dựa trên tập lệnh có độ dài có định, được mã hóa thường
xuyên va sử dụng mô hình dữ liệu tải / lưu trữ Kiến trúc được sắp xếp hợp lý dé hỗtrợ thực thi tối ưu hóa các ngôn ngữ cấp cao Các phép toán số học và logic sử dụng
định dang ba toán hạng, cho phép trình biên dịch tối ưu hóa việc xây dựng các biểu
thức phức tạp Sự sẵn có của 32 thanh ghi có mục đích chung cho phép trình biên
dịch tối ưu hóa hơn nữa việc tạo mã cho hiệu suất băng cách giữ dữ liệu được truy
cập thường xuyên trong thanh ghi.
Một tập hợp các thanh ghi phan ánh cau hình của bộ nhớ đệm, MMU, TLB vàcác tính năng đặc quyền khác được triển khai trong mỗi lõi Bang cách tiêu chuan
hóa chế độ đặc quyền và quản lý bộ nhớ và cung cấp thông tin thông qua các thanh
ghi câu hình, kiến trúc MIPS32 cho phép các hệ điều hành thời gian thực, các công
cụ phát triển khác và mã ứng dụng được triển khai một lần và được sử dụng lại với
các thành viên khác nhau của ca MIPS32 và bộ xu lý MIPS64 các gia đình Tinh
linh hoạt của bộ nhớ đệm hiệu suất cao và sơ đồ quản lý bộ nhớ là điểm mạnh của
kiến trúc MIPS Kiến trúc MIPS32 mở rộng những ưu điểm này với các tùy chọn
kiêm soát bộ đệm được xác định rõ.
Kích thước của lệnh và bộ nhớ đệm dữ liệu có thé nằm trong khoảng từ 256
byte đến 4 MB Bộ đệm dữ liệu có thể sử dụng chính sách ghi lại hoặc ghi qua Một
tùy chọn không có bộ nhớ cache cũng có thể được chỉ định Cơ chế quản lý bộ nhớ
có thé sử dụng chính sách TLB hoặc chính sách Dịch địa chỉ khối (BAT) Với TLB,kiến trúc MIPS32 đáp ứng các yêu cầu quản lý bộ nhớ Windows CE, Linux và
Android.
Trang 19Hình 2.1: Kiến trúc phần cứng của một MIPS 32 bit cơ bản.
2.2 Các thành phan của kiến trúc bộ lệnh MIPS 32 bit
Máy tính làm việc bởi lây lệnh ngôn ngữ máy từ bộ nhớ, giải mã và tính toán
chúng Ngôn ngữ máy và các giá trị sẽ được tính toán và mã hóa thành mã nhị phân.
Máy tính chỉ làm việc với các giá trị nhị phân, dé thực hiện xây dựng một kiến trúcmáy tính sử dụng kiến trúc MIPS thì các thành phần cơ bản phải bao gồm là:
- Program counter (PC): con trỏ chương trình.
- Mem: Bộ nhớ.
- Instruction Register: tập các thanh ghi lệnh.
- Register File: tập các thanh ghi.
- ALU: Khối đơn vị số học va logic
- CU: khối don vi kiểm soát
Trang 202.2.1 Kiến trúc tập lệnh (ISA)
Kiến trúc Bộ lệnh MIPS32 và MIPS64 xác định một họ lệnh tương thích xử lý
dữ liệu 32 bit va dữ liệu 64 bit (tương ứng) trong khuôn khổ của Kiến trúc MIPS
tong thé Bao gồm trong ISA là tat cả các hướng dẫn, cả đặc quyền va không đặc
quyên, theo đó người lập trình giao tiếp với bộ xử lý ISA đảm bảo khả năng tươngthích mã đối tượng cho các chương trình không có đặc quyền thực thi trên bat kỳ bộ
xử lý MIPS32 hoặc MIPS64 nào; tất cả các hướng dẫn trong MIPS64 ISA tương
thích ngược với các hướng dẫn trong MIPS32 ISA Trong nhiều trường hợp, các
chương trình đặc quyền cũng tương thích với mã đối tượng — sử dung macro hợp
ngữ hoặc biên dịch có điều kiện, thường có thể viết các chương trình đặc quyền
chạy trên cả triển khai MIPS32 và MIPS64
Trong triển khai Bản phát hành 6, khả năng tương thích mã đối tượng khôngđược dam bảo khi thực thi trực tiếp mã trước Bản phát hành 6, vì một số mã hóa
lệnh trước Ban phát hành 6 nhất định được phân bổ cho các hướng dẫn hoàn toàn
khác trên Bản phát hành 6.
Tuy nhiên, có một tập hợp con hướng dẫn hữu ích có các mã hóa giống nhau
trong cả Bản phát hành 6 và Bản phát hành trước 6 và một tập hợp con thậm chí còn
lớn hơn có thể được lưu giữ và mô phỏng Hơn nữa, sử dụng macro hợp ngữ hoặc
biên dịch có điều kiện, thường có thể viết phần mềm chạy trên cả triển khai Bản
phát hành 6 và Bản phát hành trước 6 Khả năng tương thích nhị phân có thê thu
được bang cách dịch mã nhị phan
Phiên bản 6 được thiết kế dé thay thế lệnh đơn giản có thê thực hiện tất cả cácbản dịch nhị phân như vậy, giảm thiêu ánh xa lại các địa chỉ lệnh Ví dụ: dé dịch /
vá nhị phân bản nhi phân trước Ban phát hành 6, các lệnh nhánh nhỏ gọn trong Ban
phát hành 6, không có khe trễ, có nghĩa là bat kỳ lệnh nào cũng có thé được thay thếbằng lệnh gọi lệnh đơn BALC đến một hàm mô phỏng - giả sử rằng hàm giả lập có
10
Trang 21thé đạt tới mục tiêu nhánh với khoảng 26 bit / 256MB của nó và thanh ghi liên kết
có thê được ghi đè - điều mà một trình dịch nhị phân thường có thê sắp xếp Một chỉ
dẫn BC duy nhất tránh sử dụng thanh ghi liên kết, với chỉ phí tăng thêm điểm
đầu vào mô phỏng JC / JIALC cũng có thể được sử dụng, mặc dù độ lệch 16 bit
nhỏ hơn của chúng có thê yêu cầu trình dịch nhị phân sử dụng thêm một thanh ghi.Bản phát hành 6 và các bản phát hành tiếp theo sẽ tương thích ngược về sau, tức là
mã Bản phát hành 6 sẽ chạy trên tất cả các bản phát hành tiếp theo
11
Trang 221 Pull along perforation to separate card 2 Fold bottom side (columns 3 and 4) together
MIPS Reference Data Card (“Green Card”)
@® ARITHMETIC CORE INSTRUCTION SET @ orcove
Reference Data NAME, MNEMONIC MAT OPERATION (Hex)
Brinch On FPTrue belt FI iF Pcond)PC=PC+4+BranchAddr (4) 1L/8/1/—
CORE INSTRUCTION SET OPCODE
FOR- /FUNCT Brinch On FP False bere Fl if(!FPeond)PC=PC+4+BranchAddr(4) II/&M=
NAME, MNEMONIC MAT OPERATION (in Verilog) (Hex) —-Dividle div Ro LœR[nJ/R[n]: Hi=R[s]*4R[n] (M /1a
Pet att Ro R[ml=Rfn]+Rin| (1) 0/20,q, Divide Unsigned divs R Lo=R[mJ/E[n] Hi=R[s]SR[n] (6) ais
Add tmmediate sả T RỊi]=R[mjtSimEximm (l2) Be, EAU CC adda FR HINH EA Nà:FP Add dad pe TRIMLFIfM*I]I ={FI&FIS+H]} safilz
Add Imm, Linsigned addio 1 Rịm]= R[mj+ SignExtimm (2) Sex Double 8: {FIfJ.FIf+1])
Add Unsigned dạo Ro Rfrd]=Rfn]+Rin] 0/2),, FP Compare Single cx.s* FR FPcond=(F[fs] op FIf])? 1-0 LAD/—/y
nay FP Compare FPeond = ( {FUEfS).F[fs+1]} ap
And and R R[ml]=R[m]& Ri] 0/2 Hoable cxd* FR ee ee - 1<
And Immediate andi Í Rirt] = B{rs] & ZeroExtimm G) Chex * (xis eq, Lt or Le) (op is =, <, or <=) y is 32, 3c, or 3e)
if[R[rsịE=R[rt]) FP Divide Single 4:iv.s FR F[fd]=F[fs]/F[R] 11/103
Brinch On Equal beqs ÏÌ pCCp-+¿:DranchAddr (4) he FP Divide "“ÔÔÔ.Ô k na.
if[R{rs}'=R[r}) Double : {F[8].F[f+I]) :
Branch On NotEqualene 1 E ny4sHianchAddr (4) Fx FP Multiply Single murs FR F[fd]=F[f] * E[f] 11/10/-/2
s FP Multiply {FIMIFTfM*l]† = (FLAs].FLfs+1]} *
Jump 4 1 PC=lumpAdiẻr CG) new bret mai.d FR (aye) 2
Jump And Link jal 1 R31]-PCH8;PC=lampAddr (5) Sex FP Subtract Single sub FR F[fd}-F[ts] - F [A] 11/18/41
Jump Register jr R PC=R[n] 0/8, „ FP Subtract won ag FR PPLE) = CRUEL) = yyy
Ề R[rt]={24'b.MIR{rs] , Double {F[fJ,FIf+1])
Load Byte Unsigned abu I +SignExtizwm](T:0] 2) “Ẩh=ẽ = Load FP Single xe: Ï FIHEEM[E[mltSignEximm] (2) 3l+/—/~
: Load FP F[n}CMIR[r]+SignExtlmm]; (2!
Load Halfword rt}={ 16°bO, MIR[rs| " 1 35-J-'~ his mà Ị M16 OME m 15:0) - Ơy 25km mem h a a
bị Move From Hi — m£hi =Hi 0/~/-/10
Load Linked a1 1 Rịn]=M[R[njsSigaEximm] (27) nee Mtoe FromLo = afle R Ried] =Lo 0/~/-/13
Load Upperimm lui 1 Rirt] = |imm, 16°b0} Thạc Move From Control méco R R[rd]= CR{rs] 10 /0/-/0)
Load Word Iw l Rit]=M[R[rs}+SignExtimm) (2 23, Multiply sult Ro {Hilo} “R[m]* Rịn] 0/18
= so Multiply Unsigned euitu R {Hilo} =R[rs]* Rịn| (6) f=~1
Ề 0/27 là
Nor nor = R_OR[rd] =~ (Rfrs] | Rit) tinal ShiftRight Ante ara R Rnd] = Rt] >> shart Para
Or or R Rfrd] = Bes] | Rist] *hex Store FPSingle svc: | M[R[rs}+SignExtimm]=F[rt} (2) 39-2¬/~
Or Immediate øri 1 R[n]=R[]|ZeroExtimm B) địa Store FP sac; 1 MUR[es}+SignExthmm)=F[rt}; (2) sa
Set Less Than sit oR R[n|“(R[m]<R[d])?1:0 O/ 2a, Double M[R{[rs}+SignExthmm+4)=F[rt+1) ˆ Set Less Thanimm siti I R{n]=(R{rs]<SignExtimm)?120(2) mex FLOATING-POINT INSTRUCTION FORMATS
Set Less Than Imm ; Rịn] = (Rj{m] < SignExtimm) FR | opcode fmi ñ 5 fd funct
mu 1 1
Unsigned “It 21:0 G6 e ls A eee D
Set Less Than Unsig.nito R R[rd]=(R[m]<R[n]l?l!;0 (6) OF *bụe, Fl | opcode frm ft immediate
Shift Left Logical = 411 R Ried] = Rịm]<< shame 07 00,5 Ty 2 25 HE] Tạ 15 ụ
Shift Right Logical sri R|nl[=R[n]>>>shamt O/ 02h PSEUDOINSTRUCTION SET
MUR{[rs}+SignExtimm|(7-0) = NAME MNEMONIC OPERATION
Store Byte ab 1 Rịn]j70) eị Zhe Branch Less Than bìt — ifR[rj=R[n])PC = Label
" MỊ SignExtimm] = Rint] Branch Greater Than bạt 1f{R[rs†=R[r]) PC = Label
Store Conditional osc — I an: ee cae ri a7 78h Branch Less Than of Equal Eie — iffR[rs}<"R{rt]) PC = Label
HS = Branch Greater Than or Equal be 1f[R[rs†>=R[r]) PC = Label
StoreHalfwond = anh yee Pee coe 2) res Load immediate Le Ried - immediate
Store Word aw 1 MiR|nl+SignEximm]=Rịn (2) #ụ„ : ert ences
TER NAME, NUMBER, USE, CONVENTION
Subtract sub — #ˆ R[nd|= Rịm}-Rịn] lý mg NAME, nh meee- FNAME NUMBER USE PRESERVEDACROSS
Subtract Unsigned subu R Rịrd|=R{[s]-Rj{rt| 0/2 NAM Ọ A CALL?
(1) May cause overflow exception aero 0 The Constant ữ NA.
(2) SignExtlmm = | |6{immediate[14]}, immediate } [Sar seem ler Temporary]
(3) #eraExtlmm = ( 16{1b'O}, immediate } Values for Fi Tenh
(4) BranchAddr={ 14{immediate[15]}, immediate, 2°b0 | SUSI 23 TT a asa : No
(6) JumpAddr= | PC+4[31-28), address, 2°60 } se on =° =
(BỊ Operands considered unsigned numihers (vs 2's comp.) wees Srp No
Ss7 16-23 Saved Temporanes es
INSTRUCTION FORM,
BARC =5 [S850 —7a-75 —Temnporaries Ne
R [opcode | os | on mỊ | Hhưm | Re SEO-SEI 26-27 Reserved for OS Kemal N6
M mm zim eis Lu i as " Sep Bi] Global Pouster Yes
1 opcode rs nm immediate Sp Br) Stack Pointer Yer
1 mis zi we is Lễ Sip 3 Frame Pointer Yes
4 [ ma] mâm | SaaS RewnAdiee Ye
n urs o
Copyright 2009 by Elsevier, Inc,, All rights reserved From Patterson and Hennessy, Computer Organization and Design, 4th ed.
Hình 2.2: Các lệnh MIPS 32 co ban.
2.2.2 Kiến trúc tài nguyên phân quyén(PRA)
Nó đưa ra một tập các môi trường đảm bảo cho ISA hoạt động PRA cung cấp
các cơ chê cân thiét đê quan lý các tài nguyên của bộ xử lý: bộ nhớ ảo, cache, các
ngoại lệ
12
Trang 232.2.3 Cac thành phần mở rộng tùy chon cho ứng dụng(ASE)
Kiến trúc MIPS32 và MIPS64 cung cấp hỗ trợ cho các thành phần tùy chọn
-được gọi là Mô-đun hoặc phần mở rộng ứng dụng cụ thé Là phan mở rộng tùy chọn
cho kiến trúc cơ sở, Mô-đun / ASE không tạo gánh nặng cho mọi việc triển khai
kiến trúc với các hướng dẫn hoặc khả năng không cần thiết trong một thị trường cụ
thé Một ASE / Mô-đun có thé được sử dụng với ISA va PRA thích hợp dé đáp ứngnhu cầu của một ứng dụng cụ thé hoặc toàn bộ lớp ứng dụng
2.2.4 Câu lệnh được người dùng định nghia(UDIs).
Đây là các câu lệnh đặc biệt cho các úng dụng khác nhau cho mục đích ứng
dụng khác nhau khi một bộ xử lý áp dụng kiến trúc MIPS.
2.2.5 Đồ hình truyền dữ liệu
Day là một minh họa về đường đi của dữ liệu trong kiến trúc MIPS Ngày nay
việc cài đặt đường ông và siêu vô hướng là chung nhât cho các bộ xử lý hiệu năng
cao.
Hình 2.3: Sơ đồ truyền dữ liệu cua MIPS32
13
Trang 242.3 Kiến trúc lệnh và tập thanh ghi trong MIPS
Thuật ngữ register để ám chỉ một thành phần nhớ điện từ Kiến trúc MIPScung cấp một tập hợp gồm 32 thanh ghi chung, một thanh ghi chương trình (hay cònđược gọi là con trỏ chương trình PC), và có thêm hai thanh ghi đặc biệt Tất cả các
register của kiến trúc Mips đều là thành phần với khả năng năm giữ 32-bits số nhị
phân Mỗi register có khả năng nắm giữ một giá trị 32-bits Khi viết ở mức hợp ngữ,hầu hết các lệnh yêu cầu một chương trình đặc biệt mà các thanh ghi trong tập thanh
ghi (register file) sẽ được sử dung trong quá trình tính toán lệnh Một sự thỏa thuận
sẽ được thông qua dé chi tiết rằng thanh ghi nào sẽ được sử dụng tương ứng với mộtngữ cảnh cụ thê Các thanh ghi sẽ được gọi bằng tên tương ứng, cái mà sẽ giúp nhắc
nhở chúng ta về sự thỏa thuận này
2.3.1 Thanh ghi CPU
Tên Số Ý Nghĩa
$zero $0 hăng số 0
$at $1 Asembler Temporary
$v0-$v1 $2-$3 Gia tri tra lai cua ham
hoặc biểu thức
$a0-$a3 $4-$7 Các tham số của hàm
$tO-$t7 $8-$15 Thanh ghi tam
$s0-$s7 $16-$23 Thanh ghi lưu trữ
$t8-$t9 $24-$25 Thanh ghi tam
$k0-$k1 $26-$27 Dự trữ cho nhân OS
$gp $28 Con trỏ toan cục
$sp $29 Con tro stack
14
Trang 25$fp $30 Con tro frame
$ra $31 Dia chi tra vé
Bang 2.1: Tap thanh ghi MIPS32
Thanh ghi zero có tên là $zero là đặc biệt, nó là nguồn gốc của giá tri zero
Không có một giá trị nào được ghi vào thang ghi zero.
Thanh ghi | có tên là $at, được gọi cho hợp ngữ tạp thời, thanh ghi này dành cho tính toán các lệnh marco, và không nên được sử dụng cho các chương trình hợp
ngữ.
Các thanh ghi $k0 và $k1 được sử dụng bởi các nhân(kernel) của hệ điều
hành, và không nên bị thay đôi bởi chương trình người dùng
Thanh ghi cuối cùng $31 được sử dụng giống như là một thanh ghi liên kết bởi
lệnh nhảy và lệnh liên kết, cái mà sẽ được sử dụng dé gọi một thủ tục
Thanh ghi $31 được sử dụng dé ghi nhớ dia chỉ tra về của một thủ tục được
gọi Các thanh ghi $v0 và $v1 dùng để lưu trữ giá trị trả về của hàm
Các thanh ghi $t0-$t9 là các thanh ghi có nhớ lời gọi.
Dùng cho các giá trị tạm thời mà không cần phải nhớ mỗi khi có lời gọi
Các thanh ghi $s0-$s7 là các thanh ghi có nhớ lời gọi.dùng cho các giá tri
không thay đổi mỗi khi có lời gọi
Thanh ghi $sp là con trỏ stack, trỏ tới vị trí cuối cùng trỏ tên stack Thanh ghi
$rp là con trỏ frame.
Thanh ghi $ra ghi lại địa chỉ trả về mỗi khi có lời gọi hàm Thanh ghi $gp làcon trỏ toàn cục trỏ tới vi trí giữa cua khối bộ nhớ 64K vùng heap, nơi chứa các
biên và hăng sô toàn cục.
Hai thanh ghi đặc biệt được gọi là thanh ghi HI và thanh ghi LO, chúng được
sử dụng đê kiêm soát kêt quả của một lệnh thực hiện nhân hoặc chia sô nguyên.
15
Trang 262.3.2 Thanh ghi chương trinh(PC)
Sau khi một chương trình được viết như là một chương trình bằng ngôn ngữhợp ngữ sử dụng một trình tạo văn bản, chương trình được chuyên thành mã máy
bang một chương trình sử dụng gọi một trình biên dịch hợp ngữ Mã của ngôn ngữ
máy được ghi vào một file trên đĩa Khi mà một người muốn thực hiện chương trình
này, một chương trình sử dụng khác, gọi một đường dẫn nạp chương trình, sẽ nạp
và liên kết với tất cả các khối ngôn ngữ máy cần thiết bên trong bộ nhớ chính Cáclệnh riêng biệt sẽ được ghi nhớ tuần tự vào bộ nhớ Con trỏ chương trình( PC) là
một thanh ghi được khởi tạo bởi hệ điều hành đến địa chỉ của lệnh đầu tiên của
chương trình trong bộ nhớ Chú ý rằng địa chỉ trong con trỏ chương trình được gửiđến đầu vào địa chỉ của bộ nhớ thông qua một bus Sau khi một lệnh được lay từ bộnhớ và được nạp vào thanh ghi lệnh( IR) con trỏ PC sẽ được tăng dé CPU có đượcđịa chỉ cho lệnh tuần tự tiếp theo cho quá trình lây lệnh
2.3.3 Các thanh ghi lệnh.
Thanh ghi lệnh IR là thanh ghi 32-bits dùng dé nắm bản sao chép của lệnh
được gọi đến gần đây nhất Trong kiến trúc MIPs thì có 3 định dạng lệnh khác nhau
được định nghĩa: định dạng R, định dạng I và định dang J.
16
Trang 272.3.4 Quy ước sử dụng các thành ghi.
Register name Number Intended usage
9t0-$t7 Temporary (not preserved across call)
$s0-$s7 Saved temporary (preserved across call) Št8,§t9 Temporary (not preserved across call)
5k0, $k1 Reserved for OS kernel
Sgp Pointer to global area
Ssp Stack pointer
Sfp Frame pointer (if needed):
otherwise, a saved register $s8
Sra Return address (used to return from a
procedure)
Hình 2.4: Quy ước các thanh ghi.
Thanh ghi $v0 và thanh ghi $v1 được sử dung trả về kết quả cho một thủ tục.Các thanh ghi từ $a0 đến $a3 được sử dụng dé gọi bốn tham số đầu của một thủ tục
Các tham số duy trì được gọi thông qua stack Những thanh ghi nay là không dành
riêng cho lời gọi một thủ tục duy nhất
17
Trang 28Lời gọi một thủ tục có thê thay đổi giá trị của các thanh ghi này Các thanh
ghi từ $t0 đến $t9 là các thanh ghi tạm thời, không dành riêng cho các lời gọi các
thủ tục Các thanh ghi này sẽ được bảo đảm để được ghi nhớ bởi một lời gọi Thêm
vào đó thì các thanh ghi từ $s0 đến $s7 được gọi là các thanh ghi lưu trữ, những
thanh ghi này có thê được dành riêng cho lời gọi các thủ tục
Thanh ghi $sp là con trỏ stack, đây là thanh ghi rất hữu dụng cho việc cài đăt
stack Nó luôn trỏ tới đỉnh của một stack Trình biên dịch MIPS không sử dụng một
con trỏ nền (frame pointer) Đối với một kết quả, các thanh ghi con trỏ nền $fp được
sử dụng như là lưu trữ lời gọi thanh ghi $s8 Thanh ghi $ra được sử dụng dé lưu giátrị địa chỉ trả về trong một thủ tục
Thanh ghi $gp trỏ đến vùng nhớ được dùng dé lưu trữ các biến toàn cục va
các biến hằng Thanh ghi $at được dành cho trình biên dich hợp ngữ Trình biên
dich hợp ngữ thường sử dụng thanh ghi này dé thông dịch lệnh giả mã Các lệnh gia
mã không phải là các lệnh của bộ xử lý, đó chỉ là các lệnh được hé trợ bởi trình biên
dịch hợp ngữ Mỗi một giả mã được thông dịch bởi trình biên dịch hợp ngữ thành
một hoặc nhiêu lệnh của bộ vi xử lí.
2.3.5 Thanh ghi FPU.
Kiến trúc MIPS đưa ra các thanh ghi FPU sau:
- 32 thanh ghi dau cham phay động Các thanh ghi này có độ dai 32-bit nếu là
bộ FPU 32-bit hoặc 64 bit nếu là bộ FPU 64-bit
- 5 thanh ghi điều khiển FPU dùng dé nhận diện và quản lý FPU
- 8 bộ mã điều khiển số dấu cham động là các thành phan của thanh ghi FCSR,
FP control/status register.
18
Trang 292.3.5.1 Dir liệu trong thanh ghi FPU.
FPU hỗ trợ hai dạng dữ liệu: số dấu chấm động và số dấu chấm tĩnh:
- _ Số dau châm động độ chính xác đơn và kép được định nghĩa theo chuẩn IEEE
- Số dau chấm tinh là các số nguyên có dau hỗ trợ bởi kiến trúc CPU
Các dạng số dấu chấm động được cung cấp bởi FPU là:
- _ Số dấu chấm động ching xác đơn 32-bit (kiểu S):
S (bit dau) Phan mii Phan lẽ
Lbit 8bit 23bit
Bang 2.2: Số dau cham động chính sat đơn
- Số dau cham động chính sát kép kiểu D:
S (bit dau) Phan mũ Phan lẽ
Ibit 11bit 52bit
Bang 2.3: Số dau cham động chính sát kép
- _ Số dau chấm động kẹp đôi(kiêu PS):
S(bitdấu) | Phần mũ Phần lẽ S(bit dau) | Phan | Phần lẽ
mu
Ibit 8bit 23bit Ibit §bit 23bit
Bang 2.4: Số dau cham động chính sát kép
2.3.6 Bộ nhớ
Tât cả các bộ xư lý hiện đại đêu làm việc với bộ nhớ cache Bộ nhớ cache
được đặt trên chip CPU Bộ nhớ cache cung cấp bộ nhớ nhanh đề truy cập đến các
19
Trang 30lệnh và dữ liệu thay vì CPU phải truy cập vào bộ nhớ chính Bộ nhớ cache có chức
năng giống như là một cái mảng đĩa phương rộng nơi mà thông tin được lưu trữ và
lay ra theo từ nhớ( word), một từ nhớ(word) là tương ứng với 32-bits Mỗi vùng
trong bộ nhớ có 32-bits dia chỉ.
Trong kiến trúc MIPs, địa chỉ của bộ nhớ được đánh từ 0 đến 4,294,967,295.Trong kiến trúc Mips thì một từ nhớ là 32-bits và một byte là 8-bits Như vậy trongkiến trúc MIPs thì một từ bao gồm 4-Bytes, và đơn vi địa chỉ nhỏ nhất có thể của
thông tin được tham biến trong bộ nhớ là một byte Địa chỉ của byte đầu tiên trong
từ nhớ cũng là địa chỉ của từ nhớ Tất cả các lệnh trong kiến trúc MIPs đều có
32-bits độ dài Vì vậy con trỏ chương trình được tăng lên 4 sau khi mỗi lệnh được thực
hiện.
2.3.7 Cách thức đánh dia chỉ.
Kiến trúc Mips được biết đến với tập lệnh máy tính đơn giản Các nhà thiết
kế kiến trúc Mips cung cấp một tập hợp các lệnh cơ bản Trong trường hợp muốn
gọi một giá trị từ bộ nhớ chính hoặc ghi một giá trị vào bộ nhớ chính, chỉ một
phương thức đánh địa chỉ được cài đặt trong phần cứng của máy tính Phương phápđánh địa chỉ này được hiểu như là phương pháp đổi chỗ nhiều địa chi cơ sở Phươngthức đánh địa chỉ đưa ra cách thức dé biết được làm thé nào mà một toán hạnh được
xác định.
Như chúng ta đã biết thì đối với một toán hạng nó có thê có 3 vị trí: trongthanh ghi, trong bộ nhớ, hoặc nằm ngay trong phần của câu lệnh và được hiểu như
là một hang số Việc xác định một hang số được coi như một toán hạng được gọi là
phương thức đánh địa chỉ tức thời Tương tự như vậy, việc xác định một toán hạnh
được lưu trong thanh ghi gọi là phương thức đánh địa chỉ thanh ghi Mọi bộ xử lý
đều chấp nhận hai phương thức đánh địa chỉ này Sự khác nhau giữa bộ xử lí RISC
và CISC là làm thế nào chúng xác định được một toán hạng trong bộ nhớ Việc thiết
kế CISC sự biến đổi rộng rãi của phương thức đánh địa chỉ bộ nhớ Còn việc thiết
20
Trang 31kế RISC chỉ chấp nhận duy nhất một hoặc nhiều nhất là hai kiểu phương thức đánhđịa chỉ trong câu lệnh nạp và ghi bộ nhớ Tất cả các kiến trúc MIPS chấp nhận hai
phương thức đánh địa chỉ sau đây:
- Dia chỉ của toán hạng được tính toán bởi phép cộng nội dung của một thanh
ghi và một hằng số Nếu như là hăng số bằng 0, nội dung của thanh ghi được
sử lí giống như là địa chỉ của một toán hạng Trong phương thức này, địa chỉ
bộ nhớ được tính toán giống như sau: Address = contents of a register +
constant.
- Dia chỉ của toán hạng bộ nhớ được tinh toán bởi phép cộng nội dung của hai
thanh ghi Nếu như một thanh ghi là bằng 0, phương thức đánh địa chỉ nàytrở thành giống nhưa phương thức trên với hằng số 0 Trong phương thức
này, dia chỉ được tính toán như sau: Address = contents of register 1+
contents of register 2.
Kiến trúc Mips là một kiến trúc nạp và ghi( Load/Store architecture), điềunày có nghĩa là tất cả các lệnh truy cập vào bộ nhớ chính đều là các lệnh nạp và ghi(
Load/store instruction).
Một lệnh nạp truy cập giá tri từ bộ nhớ va đặt một bản copy của giá tri tim
thấy trong bộ nhớ vào một trong số tập hợp các thanh ghi Ví dụ:
Lw $s1,8($a0)
Lệnh này sé tinh toán dia chỉ that của vùng nhớ được truy cập bởi thao tác
cộng nội dung của thanh ghi $a0 ( thanh ghi cơ sở) và 8 giá trị hằng( sự đổi chỗ)
Một bản copy của giá trị truy cập từ bộ nhớ chính tại địa chỉ thực sẽ được nạp vào
trong thanh ghi $s1 Một lệnh gia mã tương đương như sau:
Trang 32này có thể nhân các giá trị từ -32,768 đến +32,767 Trong trường hợp lệnh nạp một
từ nhớ, địa chỉ thực cần phải là một con số mà là kết quả của một phép nhân với 4,
bởi vì một từ nhớ bao giờ cũng bao gồm 4 byte Cau trúc lệnh nạp của ngôn ngữ
hợp ngữ có vài cái dé nhằm lẫm Nếu ai đó viết một trình biên dịch hợp ngữ cho
kiến trúc Mips mới, cấu trúc sau đây sẽ làm việc tốt hơn của vân chuyền đến người
dùng những gì mà lệnh thực hiện hiện thời:
Lw $s1,[$a0+8]
Sau đây là một ví dụ về lệnh nạp từ nhớ:
Sw $s1, 12($a0)
Khi mà phan cứng tính toán lệnh này, nó sẽ tinh dia chi thật của vùng nhớ tới
bang cách cộng nội dung của thanh ghi $a0 và giá trị hằng 12 Một bản copy nội
dung của thang ghi $s1 được ghi vào bộ nhớ chính tai địa chỉ thực, một lệnh giả mã
tương ứng như sau:
Mem[$a0+12]=$s 1
Từ quan diém của người lập trình hợp ngữ, bộ nhớ có thé được thông đếngiống như là một mảng tuyến tính dài, và địa chỉ thực là một con trỏ đến một vài
vùng của mảng mà hệ điều hành chỉ định giống như là một khối dữ liệu Con trỏ
chương trình PC là con trỏ trong cùng một mảng, nhưng đến một khối khác được
gọi khối chương trình Hệ điều hành cung cấp một mảng khác trong bộ nhớ được
gọi là khôi ngăn xêp.
2.3.8 Tap lệnh của MIPS
Tập lệnh (Instruction Set) luôn là phần thiết yếu không thẻ thiếu của bất kì
một kiến trúc nào Một lệnh trong MIPS32 có độ dài 32 bits, còn trong MIPS64 là
64 bits Lệnh được mô tả bằng hợp ngữ
22
Trang 33Chúng ta có một danh sách các lệnh cho kiến trúc Mips, mỗi một lệnh sẽ
được gán một mã nhị phân duy nhất, để có một danh sách các tập lệnh đầy đủ của
kiến trúc Mips, chúng ta có thể tham khảo cuốn “MIPS RISC Architecture” của tác
giả Kane va Heinrich Một máy tính sẽ có 2 lệnh cơ bản là cộng(add) va
trừ(substract) Các giá trị của các phép toán(source values) sẽ được lấy ra từ registerfile và sau khi tính toán thì kết quả sẽ được lưu lại vào register file Khi lập trình
bang hợp ngữ, chúng ta sử dung một kiểu gợi nhớ dé cho biết rằng với phép toán
nào đó thì chúng ta muốn máy tính thực hiện và chúng ta cụ thé vùng nhớ cụ thể
register file nào thì sẽ được sử dụng tên của vùng nhớ đó Chúng ta giả sử rằng mộtngười lập trình hợp ngữ muốn cộng nội dung của thanh ghi $al to nội dung của
thanh ghi $s1, va kết quả nhận được sẽ được đặt vào thanh ghi $v1, khi đó chúng ta
sẽ có lệnh của ngôn ngữ lập trình hợp ngữ đề làm việc đó như sau:
add $v1,$a1,$s1
Một lệnh giả mã tương ứng sẽ có dang: $vl = $al + $s1
Kiến trúc MIps bao gồm các lệnh bit logic như: “AND”, “OR”, và
“Exclusive-OR”, và có các lệnh đê thực hiện các câu trúc kiêm soát như:
“if then else ”
Các lệnh nhân thực hiện nhân hai gia tri 32-bits và san sinh ra một kết quả là
64-bits, kết quả này sẽ được ghi nhớ vào hai thanh ghi High và Low Đoạn mã sau
đây sẽ chỉ ra cách làm thé nào dé 32-bits thấp của $s1 có thé được di chuyền vào
Trang 34ghi thấp( Low) và số dư của phép chia được ghi nhớ vào thanh ghi cao( High) Khối
mã sau đây sẽ chỉ ra làm thé nào thương của phép chia được di chuyên vào trong
thanh ghi $v0 và số dư của phép chia vào trong thanh ghi $v1:
31 26 25 0
31 2625 2120 1615 1110 65 0
R-Type (Register) op rs | rt rd sa - funct
Hình 2.5: Phân bồ trong thanh ghi của các lệnh
24
Trang 35Ý nghĩa
6-bit chỉ ra mã lệnh 5-bit chỉ ra thanh ghi dich
5-bit chỉ ra thanh ghi nguôn
5-bit chỉ ra thanh ghi kêt quả
(nguén/dich) hoặc dùng dé chỉ ra các hàm trong phạm vi REGIMM của opcode
16-bit dau immediate dùng cho các toán
hạng logic, phép toán có dấu, nạp/nhớ các
byte độ lệch dữ liệu, và các dấu hiệu rẽ
nhánh - ;
26-bit chỉ sô dịch trái 2 bit để cung câp
28 bit thấp của địa chỉ đích trong lệnh
JUMP
5-bit s6 lượng bit phải dich
6-bit chỉ ra hàm trong phạm vi SPECIAL
Hình 2.6: Y nghĩa của các trường trong thanh ghi
2.3.10 Các lệnh cơ bản trong MIPS
Các lệnh nạp và ghi (Load and Store Instructions) là các lệnh di chuyên ditliệu giữ bộ nhớ và các thanh ghi chung Chúng đều là các lệnh có định dạng kiêu
immediate (I-type), do đó phương thức đánh địa chỉ duy nhất được hỗ trợ là thanh
ghi cơ sở cộng 16 bit, có bù định dang immediate có dấu.
25
Trang 36OpCode Description
LB Load Byte
LBU Load Byte Unsigned
LH Load Halfword LHU Load Halfword Unsigned
LW Load Word
LWL Load Word Left
LWR Load Word Right
SB Store Byte
SH Store Halfword
SW Store Word SWL Store Word Left
SWR Store Word Right
Hinh 2.7: Lénh nap ghi.
Các lệnh điện toán (Computational Instructions) thực hiện các phép tính số
học, logic, dịch chuyền, nhân, va chia trên các giá tri của các thanh ghi Các lệnh
này bao gồm lệnh định dạng kiểu thanh ghi (kiều R-type, trong đó đã bao gồm đồng
thời các toán hang và kết quả được lưu trữ trong các thanh ghi) và định dang kiểu
immediate (I-type, trong đó đã bao gồm một toán hạng có là một giá trị định dạng
immediate với 16 bit).
OpCode Description ADDI Add Immediate
ADDIU Add Immediate Unsigned
SLTI Set on Less Than Immeciiate
SLTIU Set on Less Than Immediate Unsigned ANDI AND Immediate
ORI OR Immedcliate
XORI Exclusive OR Immediate
Hình 2.8: Các lệnh số học kiểu Immediate
26
Trang 37OpCode Description
ADD Add
ADDU Add Unsigned
SUB Subtract SUBU Subtract Unsigned SLT Set on Less Than
XOR Exclusive OR NOR NOR
Hình 2.9: Các lệnh số học kiểu toán hạng
OpCode Description MULT Multiply
MULTU Multiply Unsigned
DIV Divide
DIVU Divide Unsigned
MFHI BELTE From HI
MTHI Move To HI
MFLO Move From LO
MTLO | Move To LO Ì l
Hình 2.10: Các lệnh nhân va chia.
Các lệnh nhảy và rẽ nhánh (Jump and Branch Instructions) là các lệnh thay
đôi dòng kiểm soát của một chương trình Lệnh nhảy luôn được làm đến một trang,
dạng địa chỉ tuyệt đối bởi một biên dịch địa chỉ 26-bit, với các bit cao của con trỏ
chương trình (kiểu J-type) hoặc địa chỉ thanh ghi (dạng R-type) Các lệnh rẽ nhánh
có bù 16-bit liên quan đến con trỏ chương trình (dạng I-type) Các lệnh nhảy và liên
kết được nhớ giá trị trả về của chúng trong thanh ghi 31
27