Bài giảng Kiến trúc máy tính - Chương 2: Kiến trúc bộ lệnh cung cấp cho người đọc các kiến thức: Giới thiệu, các phép tính, toán hạng, số có dấu và 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 và nhảy, các thủ tục hỗ trợ trong phần cứng máy tính, chuyển đổi và bắt đầu một chương trình. Mời các bạn cùng tham khảo.
Chương 02 – Kiến trúc lệnh Mục tiêu chương: Hiểu cách biểu diễn lệnh máy tính, cách lệnh thực thi 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 CE Chương 02 – 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 Các thủ tục hỗ trợ phần cứng máy tính Chuyển đổi bắt đầu chương trình Giới thiệu CE Để 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) Bộ 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 lệnh thông dụng ngày nay: ARM giống MIPS The Intel x86, CE Chương 02 – 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 Các thủ tục hỗ trợ phần cứng máy tính Chuyển đổi bắt đầu chương trình CE Phép tính (Operations) Ví dụ: add a, b, c Chỉ dẫn cho máy tính thực cộng biến a với b ghi kết vào biến c, c= a + b Toán tử (operations) Tốn hạng (operands) CE Ví dụ số lệnh MIPS Phép tính (Operations) Ví dụ Ví dụ C/Java f = (g + h) – (i + j); a = b + c; d = a – e; MIPS add a, b, c sub d, a, e C/Java add t0, g, h add t1, i, j sub f, t0, t1 MIPS CE Chương 02 – 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 Các thủ tục hỗ trợ phần cứng máy tính Chuyển đổi bắt đầu chương trình Tốn hạng CE Có loại tốn hạng: Tốn hạng ghi (Register Operands) Toán hạng nhớ (Memory Operands) Toán hạng (Constant or Immediate Operands) CE Tốn hạng Tốn hạng ghi: Khơng giống chương trình ngơn ngữ cấp cao, toán hạng lệnh số học bị hạn chế, chúng phải đặt vị trí đặc biệt xây dựng trực tiếp phần cứng gọi ghi (số lượng ghi có giới hạn: MIPS32, ARM Cortex A8-40) 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 có 32 bit) Một khác biệt lớn biến ngơn ngữ lập trình biến ghi số giới hạn ghi, thường 32 máy tính 10 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Một thủ tục hay hàm công cụ mà lập trình viên sử dụng để xây dựng cấu trúc chương trình, với mục đích vừa làm cho chương trình dễ hiểu vừa làm cho mã nguồn chương trình tái sử dụng Các thủ tục cho phép lập trình viên thời điểm cần tập trung vào phần công việc (task) Để thực thi thủ tục, chương trình phải tuân theo sáu bước sau: Đặt tham số nơi mà thủ tục truy xuất Chuyển quyền điểu khiển cho thủ tục Yêu cầu tài nguyên lưu trữ cần thiết cho thủ tục Thực cơng việc (task) Lưu kết nơi mà chương trình truy xuất Trả điều khiển vị trị mà thủ tục gọi Vì thủ tục gọi từ nhiều vị trí chương trình 46 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Thanh ghi (Registers) loại nhớ có tốc độ truy xuất nhanh dùng để lưu trữ liệu máy tính, muốn tận dụng chúng cách tối đa Các phần mềm theo kiến trúc MIPS tuân theo quy ước việc gọi thủ tục việc cấp phát ghi 32 bit sau: ■ $a0-@a3 : ghi lưu tham số dùng để truyền tham số ■ $v0-$v1: ghi giá trị dùng để lưu giá trị trả ■ $ra: ghi chứa giá trị địa để trở vị trí gọi hàm 47 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Hợp ngữ kiến trúc MIPS bao gồm lệnh dành riêng cho thủ tục: nhảy tới địa đồng thời lưu lại địa lệnh sau vào ghi $ra Lệnh nhảy-và-liên kết (jumpand-link)(jal) viết cách đơn giản sau: jal ProcedureAddress Ngày nay, máy tính MIPS sử dụng lệnh ghi nhảy (jump regiser instruction) (jr), có nghĩa lệnh nhảy không điều kiện tới địa mô tả ghi: jr $ra 48 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Các khái niệm định nghĩa: Địa trả (return address): liên kết tới vùng gọi cho phép thủ tục trả địa chỉ; MIPS, lưu trữ ghi $ra caller: Là chương trình gọi thủ tục cung cấp giá trị tham số cần thiết callee: Là thủ tục thực thi chuỗi lệnh lưu trữ dựa tham số cung cấp caller sau trả điều khiều cho caller program counter (PC): Là ghi chứa địa lệnh thực thi chương trình stack(ngăn xếp): Là cấu trúc liệu cho việc nạp ghi tổ chức theo hàng đợi dạng vào-sau ra-trước (last-in first-out) (trong trường hợp trình biên dịch cần nhiều ghi cho thủ có bốn ghi biến hai ghi giá trị trả về) stack pointer (SP): Là giá trị biểu thị địa cấp gần ngăn xếp cho biết vị trí ghi nên nạp liệu vị trí mà giá trị ghi cũ tìm thấy Trong MIPS, ghi $sp push: lệnh, lệnh thêm phần tử vào ngăn xếp pop: lệnh làm nhiệm vụ lấy xóa phần tử khỏi ngăn xếp 49 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Nested procedure: 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 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 50 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Cấp phát khơng gian cho liệu ngăn xếp (stack) procedure frame (activation record): Phần ngăn xếp mà chứa biến cục ghi lưu trữ thủ tục frame pointer: Giả sử ta có thủ tục, frame pointer giá trị biểu thị vị trí biến cục ghi lưu trữ cho thủ tục Fig.8 Mô tả việc cấp phát stack (a) trước gọi thủ tục, (b) gọi thủ tục, (c) sau gọi thủ tục 51 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Cấp phát không gian cho liệu ngăn xếp Heap: Là khu vực nhớ cấp phát động, cấp phát thêm đạt đến giới hạn Text segment: Đoạn mã chương trình Fig.9 Cấp phát nhớ cho chương trình liệu kiến trúc MIPS 52 CE Các Thủ Tục Hỗ Trợ Trong Phần Cứng Máy Tính Fig.10 Các quy ước ghi theo kiến trúc MIPS Thanh ghi 1, tên gọi $at, để dành cho assembler, ghi 26-27, tên gọi $k0-$k1, để dành cho hệ điều hành 53 CE Chương 02 – 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 Các thủ tục hỗ trợ phần cứng máy tính Chuyển đổi bắt đầu chương trình 54 CE Chuyển đổi bắt đầu chương trình Phần mơ tả bốn bước việc chuyển đổi chương trình C tập tin đĩa vào chương trình chạy máy tính Hình 12: Một hệ thống phân cấp chuyển đổi cho ngôn ngữ C 55 CE Câu hỏi tập chương Chuyển mã assembly MIPS sang dạng mã máy MIPS Chuyển dạng mã máy MIPS sang dạng mã assembly MIPS Chuyển dạng mã ngôn ngữ cấp cao sang dạng mã assembly MIPS ngược lại 56 Chuyển mã assembly MIPS sang dạng mã máy CE MIPS add $t0, $s1, $s2 sub $s0, $s2, $s3 sll $s2, $s4, 12 addi $t0, $t0, -1 lw $s1, 32($s0) sw $a0, 16($t0) beq $t0, $0, 50 57 CE Chuyển dạng mã máy MIPS sang dạng mã assembly MIPS 00001025hex 0005402Ahex 11000003hex 00441020hex 20A5FFFFhex 08100001hex 58 CE Bài tập Chuyển dạng mã ngôn ngữ cấp cao sang dạng mã assembly MIPS, với a, b, c chứa ghi $t0, $t1, $t2 a = – b – c + 120 f = g + h + B[4]; //f,g,h $s0, $s1, $s2 // địa mảng B $s6 59 Chuyển mã assembly MIPS sang dạng mã máy CE MIPS add $t0,$s1,$s2 Xác định loại lệnh – Thanh ghi: add, sub, or, … – Giá trị tức thời: lw, sw, addi, subi, … addi $t2, $t2, ... diễn với nhiều n bit? Ví dụ: Chuyển đổi số nhị phân 16-bit số 2ten -2 ten thành số nhị phân 3 2- bit 2ten: ? ?-2 ten: 25 CE Chương 02 – 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... bit từ MIPS vị trí số 1011: Từ MIPS có 32 bit độ dài, biểu diễn số từ đến 23 2-1 (4 .29 4.967 .29 5) Bit nhỏ nhất: Bit bên phải từ MIPS (bit 0) Bit lớn nhất: Bit bên trái từ MIPS (bit 31) 21 ... A 8-4 0) 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 có 32 bit) Một khác biệt lớn