Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
78
Dung lượng
1,05 MB
Nội dung
KIẾN TRÚC MÁY TÍNH KIẾN TRÚC BỘ LỆNH 03/2017 Copyrights 2017 CE-UIT All Rights Reserved Kiến trúc lệnh Mục tiêu: Hiểu cách biểu diễn cách thực thi lệnh máy tính Chuyển đổi lệnh ngôn ngữ cấp cao sang assembly mã máy Chuyển đổi lệnh mã máy sang ngôn ngữ cấp cao Biết cách lập trình ngơn ngữ assembly cho MIPS Slide dịch hình lấy từ sách tham khảo: Computer Organization and Design: The Hardware/Software Interface, Patterson, D A., and J L Hennessy, Morgan Kaufman, Revised Fourth Edition, 2011 03/2017 Copyrights 2017 CE-UIT All Rights Reserved Kiến trúc lệnh Giới thiệu Các phép tính Tốn hạng Số có dấu không dấu Biểu diễn lệnh Các phép tính Logic Các lệnh điều kiện nhảy 03/2017 Copyrights 2017 CE-UIT All Rights Reserved Giới thiệu v Để lệnh cho máy tính ta phải nói với máy tính ngơn ngữ máy tính Các từ ngơn ngữ máy tính gọi lệnh (instructions) tập hợp tất từ gọi lệnh (instruction set) vBộ lệnh chương MIPS, lệnh kiến trúc máy tính thiết kế từ năm 1980 Cùng với hai lệnh thông dụng ngày nay: § ARM (rất giống MIPS) § The Intel x86 03/2017 Copyrights 2017 CE-UIT All Rights Reserved Kiến trúc lệnh Giới thiệu Các phép tính Tốn hạng Số có dấu khơng dấu Biểu diễn lệnh Các phép tính Logic Các lệnh điều kiện nhảy 03/2017 Copyrights 2017 CE-UIT All Rights Reserved Phép tính (Operations) Ví dụ: add a, b, c Phép tính (operations) 03/2017 Chỉ dẫn cho máy tính thực cộng biến b với c ghi kết vào biến a, a = b + c è Toán hạng (operands) Copyrights 2017 CE-UIT All Rights Reserved Phép tính (Operations) Ví dụ C/Java a = b + c; d = a – e; 03/2017 C/Java f = (g + h) – (i + j); MIPS add a, b, c sub d, a, e Ví dụ add t0, g, h add t1, i, j sub f, t0, t1 Copyrights 2017 CE-UIT All Rights Reserved MIPS Ví dụ số lệnh MIPS 03/2017 Copyrights 2017 CE-UIT All Rights Reserved Kiến trúc lệnh Giới thiệu Các phép tính Tốn hạng Số có dấu khơng dấu Biểu diễn lệnh Các phép tính Logic Các lệnh điều kiện nhảy 03/2017 Copyrights 2017 CE-UIT All Rights Reserved Tốn hạng Có loại tốn hạng: Toán hạng ghi (Register Operands) Toán hạng nhớ (Memory Operands) Toán hạng (Constant or Immediate Operands) 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 10 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Xem thêm cách bố trí vùng Stack, Heap, Data Text Segment nhớ chương trình v Heap: Là khu vực nhớ cấp phát động, cấp phát thêm đạt đến giới hạn v Text segment: Đoạn mã chương trình Cấp phát nhớ cho chương trình liệu kiến trúc MIPS 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 64 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCác khái niệm tên gọi: § Stack pointer (SP): Địa phần tử cấp phát gần (tức phần tử cấp phát cuối thời điểm tại) Trong MIPS, giá trị lưu ghi $sp (29) § Trong đó, ghi $fp ($30) dùng làm trỏ frame (Frame pointer) Stack gồm nhiều frame; frame cuối stack trỏ tới $sp, frame (cho vùng lưu ghi biến cục bộ) trỏ tới $fp (xem hình slide trước) § Stack xây dựng theo kiểu từ địa cao giảm dần xuống thấp, frame pointer ln stack pointer Đây quy ước MIPS Tất nhiên stack xây dựng theo cách khác, tùy vào môi trường làm việc mà ta tuân thủ quy ước 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 65 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCác khái niệm tên gọi: § Push: Việc lưu phần tử vào stack gọi Push § Pop: Việc lấy phần tử khỏi stack gọi Pop Trong tập lệnh MIPS chuẩn, khơng có lệnh Pop Push Việc thực phải người lập trình thực hiện: ü Theo quy ước MIPS, PUSH phần tử vào stack, $sp nên trừ byte (1 word) sau lưu liệu vào word nhớ có địa chứa $sp ü Ngược lại, POP phần tử từ stack, liệu load từ word nhớ có địa chứa $sp sau $sp cộng thêm 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 66 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 67 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm Trong chương trình chính, thủ tục gọi, trỏ PC chuyển quyền điều khiển xuống vị trí thủ tục; sau thủ tục thực xong, trỏ PC chuyển thực lệnh sau lệnh gọi thủ tục Việc thực nhờ vào cặp lệnh: jal ten_thu_tuc jr $ra (ten_thu_tuc nhãn lệnh thủ tục, xem tên thủ tục) 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 68 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm § Để gọi thủ tục, dùng lệnh jal (Lệnh nhảy-và-liên kết: jump-and-link) ü Đầu tiên, địa lệnh sau lệnh jal phải lưu lại để sau thủ tục thực xong, trỏ PC chuyển lại (thanh ghi dùng để lưu địa trả $ra); sau địa trả lưu lại, trỏ PC chuyển đến địa lệnh thủ tục để thực ü Vậy có hai công việc thực jal theo thứ tự: jal 03/2017 # # $ra = PC + PC = Copyrights 2017 CE-UIT All Rights Reserved 69 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm § Sau thủ tục thực xong, để trả lại chương trình chính, dùng lệnh jr (jump regiser) ü Lệnh “jr $ra” đặt cuối thủ tục thực việc lấy giá trị chứa ghi $ra gán vào PC, giúp ghi quay trở thực lệnh sau lệnh gọi thủ tục jr 03/2017 $ra # PC = $ra Copyrights 2017 CE-UIT All Rights Reserved 70 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm Như vậy, hàm con/thủ tục chia thành ba phần Phần thân dùng để tính tốn chức thủ tục này, bắt buộc phải có Phần đầu phần cuối có khơng, tùy u cầu chương trình 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 71 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm Ví dụ 1: Một thủ tục có thân hàm (khơng cần phần đầu cuối) Đoạn code sau thực việc gọi hàm (thủ tục) tên ABC add $t0, $t1, $t2 jal ABC or $t3, $t4, $s5 j EXIT ABC: add $t0, $t3, $t5 sub $t2, $t3, $t0 jr $ra EXIT: 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 72 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm Ví dụ 2: Một thủ tục có đủ ba phần: thân hàm, phần đầu cuối Viết đoạn code thực • Chương trình có: ü Bốn giá trị a, b, c, d chứa $s0, $1, $s2, $s3 ü Chương trình truyền bốn tham số vào thủ tục tên “proc_example” để lấy kết phép tốn Sau đưa kết vào ghi $s6 • Thủ tục proc_example có: ü Bốn input (a, b, c, d) ü Một output, kết phép toán: (a + b) – (c + d) ü Q trình tính tốn sử dụng ghi tạm $t1, $t2 ghi $s0 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 73 Bốn tham số truyền cho thủ tục proc_example trước gọi hàm (Theo quy ước, tham số truyền cho thủ tục phải truyền vào ghi $a0-$a3) Sau hàm proc_example thực xong, giá trị trả hàm theo quy ước chứa $v0 Lệnh chuyển liệu từ $v0 vào ghi $s6 Phần đầu: lưu liệu vào stack cho thủ tục Do phần thân hàm có sử dụng ghi $s0 nên trước tính tốn, giá trị cũ $s0 nên lưu stack Nếu có n ghi cần lưu, ghi word, ta cần 4n byte cho stack Trong trường hợp này, ta cần byte Vì stack phát triển theo kiểu từ cao xuống thấp, nên cấp phát frame (1 word cho stack) $sp trừ Hai lệnh cịn tương ứng với PUSH phần tử vào stack Phần thân: Sau tính tốn, kết trả phải lưu vào $v0 quy ước 03/2017 Phần cuối: Trước khỏi hàm, giá trị lưu $s0 phải phục hồi lại; frame stack phải xóa cách lấy $sp + Hai lệnh tương ứng với POP phần tử khỏi stack Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính vCấu trúc thủ tục/hàm Trong ví dụ 1, thân thủ tục không sử dụng ghi $s nào, nên không cần khởi tạo stack để lưu ghi lại Trong ví dụ 2, thân thủ tục có sử dụng ghi $s, nên stack phải khởi tạo để lưu; dẫn đến trước kết thúc hàm phải giá trị lưu phải trả lại ghi xóa stack (Lưu ý: Code ví dụ viết lại mà khơng cần dùng ghi $s0; ví dụ cố tình dùng $s0 để thấy việc lưu stack phải thực nào) 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 75 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Tóm lại: § Với thủ tục/hàm con: ü Input: $a0, $a1, $a2, $a3 ü Output: $v0, $v1 ü Địa quay lưu $ra § Stack sử dụng trường hợp sau ü Nếu thủ tục (hàm con) cần nhiều bốn ghi để làm tham số nhiều hai ghi làm giá trị trả không gian stack dùng hỗ trợ trường hợp ü Nếu thủ tục có sử dụng số ghi loại $s, theo quy ước MIPS, trước thực thủ tục, giá trị ghi phải lưu trữ vào stack hồi phục lại kết thúc thủ tục (Các ghi $t không cần lưu) 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 76 Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Nested procedure: v Các thủ tục gọi lồng vào v Các thủ tục mà không gọi thủ tục khác thủ tục (leaf procedures) Ngược lại nested procedures v Chúng ta cần cẩn thận sử dụng ghi thủ tục, cần phải cẩn thận gọi nested procedure 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 77 Kiến trúc lệnh Tổng kết: § Tuần trình bày nội dung liên quan đến hợp ngữ MIPS, biết để lập trình chương trình dùng assembly § Với chương trình assembly dài, có nhiều chức năng, lập trình ngơn ngữ cấp cao, chức đưa vào thủ tục (procedure) (như hàm hàm ngôn ngữ cấp cao) § Khi lập trình với procedure cho MIPS, điểm cần ý: stack, $sp, $fp cách truyền tham số 03/2017 Copyrights 2017 CE-UIT All Rights Reserved 78 ... cho máy tính ta phải nói với máy tính ngơn ngữ máy tính Các từ ngơn ngữ máy tính gọi lệnh (instructions) tập hợp tất từ gọi lệnh (instruction set) vBộ lệnh chương MIPS, lệnh kiến trúc máy tính. .. (add $t0, $s1, $s2) lưu giữ máy tính? Máy tính làm việc với tín hiệu điện tử thấp cao, lệnh lưu giữ máy tính phải biểu diễn chuỗi "0" "1", gọi mã máy/ lệnh máy v Ngôn ngữ máy (Machine language): biểu... MIPS-32, ARM Cortex A8-40) v Kích thước ghi kiến ? ?trúc MIPS 32 bit; nhóm 32 bit xuất thường xuyên nên chúng đặt tên “từ” (word) kiến ? ?trúc MIPS (Lưu ý: “từ” kiến trúc lệnh khác khơng 32 bit) v Một khác