kiến trúc máy tính Vũ Đức Lung phần 8 pptx

13 541 2
kiến trúc máy tính Vũ Đức Lung phần 8 pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương VI: Kiến trúc bộ lệnh 193 Hình 6.8. Các chế ñộ lập ñịa chỉ Chương VI: Kiến trúc bộ lệnh 194 Chế ñộ Cách tính Ưu ñiểm Khuyến ñiểm Immediate Operand = A Không có tham chiếu bộ nhớ ðộ lớn toán hạng giới hạn Direct EA = A ðơn giản không gian ñịa chỉ giới hạn Indirect EA = (A) không gian ñịa chỉ lớn Tham chiếu bộ nhớ phức tạp Register EA = R Không có tham chiếu bộ nhớ không gian ñịa chỉ giới hạn Register indirect EA = (R) không gian ñịa chỉ lớn Tham chiếu bộ nhớ phụ Displacement EA = A + (R) Linh ñộng Phức tạp Stack EA= ñầu của ngăn xếp Không có tham chiếu bộ nhớ Ứng dụng giới hạn Bảng 6.3. Cách tính ñịa chỉ thực Trước khi ñi vào cụ thể từng chế ñộ lập ñịa chỉ có hai ñiểm cần lưu ý, thứ nhất ñó là trên thực tế tất cả các kiến trúc máy tính ngày nay cung cấp cho ta nhiều hơn một trong những chế ñộ lập ñịa chỉ trên. Vấn ñề ñặt ra là làm thế nào ñể bộ ñiều khiển xác ñịnh ñược chế ñộ ñịa chỉ nào ñược dùng trong lệnh. Có nhiều phương pháp khác nhau. Thường là những opcode khác nhau sẽ dùng các chế ñộ ñịa chỉ khác nhau, cũng có thể là một trong các bit của lệnh ñược dùng làm trường chế ñộ, mà giá trị chủa trường này chỉ ra chế ñộ ñịa ñược dùng. ðiểm thứ hai ở ñây liên quan ñến ñịa chỉ thực EA. Trong một hệ thống không dùng bộ nhớ ảo thì ñịa chỉ hiệu dụng sẽ hoặc là một ñịa chỉ của bộ nhớ chính, hoặc là một thanh ghi. Trong một hệ thống nhớ ảo thì ñịa chỉ hiệu dụng là một ñịa chỉ ảo hoặc là một thanh ghi. Việc sắp xếp Chương VI: Kiến trúc bộ lệnh 195 thực của ñịa chỉ vật lý là một chức năng của cơ chế phân trang và người lập trình không thấy ñược. a) Lập ñịa chỉ tức thời (Immediate Addressing) Cách ñơn giản nhất cho lệnh qui ñịnh toán hạng là ñể phần ñịa chỉ trong lệnh chứa chính toán hạng thay vì ñịa chỉ hoặc thông tin khác mô tả vị trí toán hạng: OPERAND = A Toán hạng như vậy ñược gọi là toán hạng tức thời (immediate operand) vì tự ñộng ñược tìm nạp từ bộ nhớ cùng lúc với tìm nạp bản thân lệnh, nhờ ñó khả dụng tức thời. Lập ñịa chỉ tức thời có ưu ñiểm là khỏi cần thêm tham chiếu bộ nhớ bộ nhớ ñế tìm nạp toán hạng. Nhược ñiểm là hạn chế toán hạng ở con số vừa vào trường ñịa chỉ. Ớ lệnh có ñịa chỉ 3 bit (ví dụ như trường thanh ghi), toán hạng sẽ giới hạn ở 3 bit, và làm hạn hẹp tính hữu ích của chúng. Chế ñộ này ñược dùng ñể ñịnh nghĩa các hằng số hoặc là khởi tạo một giá trị nào ñó cho một biến Một ví dụ trong các trường hợp lập ñịa chỉ tức thời là ñưa giá trị “4” vào thanh ghi R1 như sau: MOV R1, #4 b) Lập ñịa chỉ trực tiếp (Direct Addressing) Một phương thức ñơn giản khác ñể qui ñịnh toán hạng là cung cấp ñịa chỉ của từ nhớ có chứa toán hạng và ñặt nó vào trường ñịa chỉ của lệnh. Hình thức này gọi là lập ñịa chỉ trực tiếp (direct addressing): EA = A Tất nhiên phải có cách ñể máy tính biết ñược ñịa chỉ nào là tức thời và ñịa chỉ nào là trực tiếp. Nói chung, có hai phương pháp: sử dụng opcode khác nhau hoặc sử dụng một mode ñánh ñịa chỉ ñặc biệt cho mỗi loại toán hạng. Cũng như cách lập ñịa chỉ tức thì, ñịa chỉ trực tiếp có một số giới hạn: Lệnh luôn truy cập ñến chỉ một ñịa chỉ ô nhớ. Tức là giá trị tại ñịa chỉ ñó có thể thay ñổi nhưng ñịa chỉ thì không. Như Chương VI: Kiến trúc bộ lệnh 196 vậy ñịa chỉ trực tiếp có thể ñược sử dụng với các biến toàn cục, mà ñịa chỉ của nó là biết trước trong thời gian biên dịch. c) Lập ñịa chỉ gián tiếp (Indirect Addressing) ðánh ñịa chỉ trực tiếp là cách trong ñó trường ñịa chỉ chỉ ra một từ nhớ nào hay thanh ghi nào chứa toán hạng. Tuy nhiên trong trường hợp lập ñịa chỉ trực tiếp thì chiều dài của trường ñịa chỉ thường là ngắn hơn chiều dài một word, do ñó số ñịa chỉ có thể mã hóa ñược bị hạn chế. Cách ñánh ñịa chỉ gián tiếp là trường ñịa chỉ chỉ ra từ nhớ nào hoặc thanh ghi nào chứa ñịa chỉ của toán hạng ( Xem hình 6.8): EA = (A) Nói cách khác là từ nhớ hay thanh ghi trong trường ñịa chỉ giống như là một con trỏ (trong C++), trỏ tới một toán hạng Việc ñánh ñịa chỉ gián tiếp cần hai lần truy cập bộ nhớ, lần thứ nhất ñể lấy con trỏ về và lần thứ hai ñể lấy toán hạng về. d) Lập ñịa chỉ thanh ghi (Register Addressing) Về khái niệm, lập ñịa chỉ thanh ghi tương tự như lập ñịa chỉ trực tiếp. ðiểm khác biệt duy nhất ở ñây là thay vì trường ñịa chỉ trỏ tới một ñịa chỉ trong bộ nhớ thì ở ñây là trỏ tới một thanh ghi (thanh ghi số mấy) trong ñó lưu trữ toán hạng: Máy với 16 thanh ghi và bộ nhớ 65.536 từ thật sự sẽ có hai không gian ñịa chỉ. Ta có thể xem một ñịa chỉ trên máy như thế là có hai phần: • Một bit cho biết là ta muốn dùng thanh ghi hay từ nhớ • Một trường ñịa chỉ cho biết là sẽ cần thanh ghi hay từ nhớ nào. Vì số thanh ghi ít hơn số từ nhớ, do ñó người ta thường dùng các dạng thức lệnh khác nhau cho toán hạng thanh ghi và toán hạng nhớ. Các máy ngày nay ñược thiết kế có các thanh ghi vì 2 lý do chính sau: – Các thanh ghi hoạt ñộng nhanh hơn bộ nhớ chính Chương VI: Kiến trúc bộ lệnh 197 – Số lượng thanh ghi là rất ít do ñó ñể mã hóa chúng cũng chỉ cần một số ít bit. e) ðịa chỉ gián tiếp thanh ghi (Register Indirect) ðịa chỉ thanh ghi thì giống ñịa chỉ trực tiếp, còn ñịa chỉ gián tiếp thanh ghi thì lại giống với ñịa chỉ gián tiếp. Trong cả hai trường hợp sự khác nhau chỉ là một cách là ñịa chỉ bộ nhớ chính, còn một cách là thanh ghi: EA = (R) Trường ñịa chỉ chứa số thanh ghi, mà trong thanh ghi ñó chứa ñịa chỉ của toán hạng cần thiết. f) ðịa chỉ ðịa chỉ dịch chuyển – Displacement Một chế ñộ ñược tổng hợp từ hai chế ñộ: ñịa chỉ trực tiếp và ñịa chỉ gián tiếp thanh ghi. Cách tính ñịa chỉ thực như sau: EA = A + (R) Chế ñộ này ñòi hỏi trong mã lệnh phải có hai trường ñịa chỉ, một trường cho ñịa chỉ thanh ghi (R) và một trường cho ñịa chỉ trực tiếp bộ nhớ (A). ðịa chỉ thực là tổng của ñịa chỉ A với giá trị ñịa chỉ chứa trong thanh ghi R. Một cách ñánh ñịa chỉ dịch chuyển hay dùng là dạng ñánh ñịa chỉ “chỉ số” (Indexing). Có nhiều thuật toán ñòi hỏi một số thao tác trên dãy các cấu trúc dữ liệu ñược chứa trong các vị trí nhớ liên tiếp. Ví dụ chúng ta xem một khối gồm N từ chiếm các vị trí nhớ: A, A+1, A+2,…, A+N-1 Giả sử chúng cần ñược chuyển tới vị trí nhớ: B, B+1, B+2,…, B+N-1 Và giả sử ta dùng lệnh máy MOVE B,A ñể chuyển nội dung vị trí nhớ A ñến vị trí nhớ B. Máy thi hành lệnh này và sau ñó sửa lại thành MOVE B+1,A+1 rồi thi hành lệnh này, rồi lại sửa lại, lại thi hành…. cứ lặp ñi lặp lại chu kỳ này cho ñến khi tất cả N word ñược copy xong. Chương VI: Kiến trúc bộ lệnh 198 Bài toán như thế ñược giải quyết tốt nhất bằng cách sử dụng một thanh ghi gọi là thanh ghi chỉ số (Index register ) và chúng làm việc như sau: Trường ñịa chỉ sẽ có hai phần: một con số của thanh ghi chỉ số và một hằng số. Trong ví dụ trên nếu cả hai ñịa chỉ ñều ñược ñánh chỉ số sử dụng một index register (IR) có chứa số nguyên k, thi lệnh MOVE B,A sẽ chuyển nội dung của vị trí nhớ A+k tới B+k. Bằng cách khởi tạo cho IR giá trị ban ñầu 0 và tăng nó lên bằng kích thước một word mỗi khi copy xong một word, thì chúng ta chỉ cần sử dụng một thanh ghi cho vòng lặp copy. Việc ñánh ñịa chỉ Index ñược sử dụng rộng rãi ñể ñánh ñịa chỉ một trường tại một khoảng cách ñã biết tính từ ñiểm ñầu của cấu trúc dữ liệu ñã cho. g) ðịa chỉ ngăn xếp – Stack Ở trên ta ñã ñưa ra các tiêu chí thiết kế dạng thức lệnh, mà một trong các tiêu chí là lệnh càng ngắn càng tốt ñể tiết kiệm thời gian của CPU và tiết kiệm bộ nhớ. Giới hạn cuối cùng của việc giảm chiều dài ñịa chỉ là làm cho lệnh không còn trường ñịa chỉ nữa, chỉ có opcode thôi. Thật ñáng ngạc nhiên là ñiều này có thể thực hiện ñược bằng cách sử dụng một cấu trúc dữ liệu có tên là Stack. Stack chứa các phần tử dữ liệu (words, characters,…) theo trật tự liên tiếp trong bộ nhớ. Phần tử ñầu tiên ñược ñẩy lên Stack ñược gọi là nằm ở ñáy của Stack, phần tử sau cùng vừa mới ñẩy lên Stack ñược gọi là nằm ở ñỉnh của Stack. Dữ liệu ñược ñưa vào và lấy ra theo phương thức vào ñầu tiên thì ra sau cùng FILO (first in last out). Mỗi Stack ñược gắn với một thanh ghi hay word bộ nhớ chứa ñịa chỉ ñỉnh Stack và ñược gọi là con trỏ Stack. Hình 6.9 cho ta thấy các chế ñộ lập ñịa chỉ của dữ liệu trong các máy tính mới nhất và các ví dụ tương ứng với nó. Trong hình này và trong cuốn sách này chúng ta dùng phần mở rộng của ngôn ngữ lập trình C ñể biểu diễn các câu lệnh. Ở ñây chúng ta dùng mảng Mem như là tên của bộ nhớ chính và Regs ñể chỉ Registers. Ví dụ chúng ta ghi Mem[Regs[R1]] ñể chỉ một ô nhớ có ñịa chỉ ñược ghi trong thanh ghi tên là R1. Trong bảng này mỗi chế ñộ lập ñịa chỉ sẽ có một ví dụ minh họa ñược ñưa ra, ñồng thời giải thích ý nghĩa của nó và cho biết nó ñược dùng khi nào. Chương VI: Kiến trúc bộ lệnh 199 Hình 6.9. Các chế ñộ lập ñịa chỉ thông dụng Ví dụ ở chế ñộ lập ñịa chỉ “thanh ghi” (Register) ñể làm phép toán cộng hai số ta dùng câu lệnh: Add R4, R3. Chế ñộ Ví dụ Diễn giải Chương VI: Kiến trúc bộ lệnh 200 Câu lệnh này cho thấy ở chế ñộ thanh ghi các toán hạng ñều là các thanh ghi. Ở ñây R3 và R4 là hai toán hạng của phép toán cộng. Ý nghĩa của câu lệnh này có nghĩa là: Regs[R4]Regs[R4] + Regs[R3] Tức là toán hạng thứ nhất nằm trên thanh ghi có tên R4 và toán hạng thứ hai nằm trên thanh ghi có tên là R3 sẽ ñược cộng lại và kết quả cuối cùng sẽ lưu vào thanh ghi R4. Mũi tên  chỉ ra kết quả sẽ ñược lưu vào ñâu. ðặc biệt trong câu lệnh với tham chiếu bộ nhớ (Memory indirect) hay trong C ta gọi là với con trỏ ta thấy ở toán hạng thứ hai có thêm dấu “@” ñể chỉ toán hạng ñó là một ñịa chỉ và ở ñịa chỉ ñó chứa một ñịa chỉ khác, mà ở ñịa chỉ cuối này mới chứa giá trị thật của toán hạng này. Giả sử trong câu lệnh Add R1, @(R3) R1 chứa giá trị 5, R3 chứa giá trị 16 thì lệnh này có thể ñược diễn giải rõ hơn như hình 6.9. Trong R3 chứa giá trị 16 là một ñịa chỉ, mà trong ñịa chỉ này chứa giá trị 4 là một ñịa chỉ khác, mà trong ñịa chỉ 4 này mới chứa giá trị thật 7 của toán hạng thứ hai. Giá trị toán hạng thứ nhất là 5 cộng với giá trị toán hạng thứ hai là 7, ñược 12 và giá trị này lại ghi trở lại vào R1. Chương VI: Kiến trúc bộ lệnh 201 6.4. Bộ lệnh Trong phần này chúng ta sẽ xem xét các loại lệnh cơ bản của các kiến trúc phần mềm ñược dùng nhiều nhất, ñể cho thấy các kỹ thuật ở mức ngôn ngữ máy dùng ñể thi hành các cấu trúc trong các ngôn ngữ cấp cao. ða số ngày nay, ñể viết các chương trình cho máy tính, người ta dùng các ngôn ngữ cấp cao dễ hiểu va tiên lợi hơn như C, Pascal, C#, Quá trình biên dịch từ một ngôn gữ cấp cao sang ngôn ngữ máy tiến hành như trong hình 6.10. 0 4 7 8 12 16 4 20 R1 = 5 R3 = 16 5 7 + 12 Hình 6.9. Lệnh Add với tham chiếu bộ nhớ Chương VI: Kiến trúc bộ lệnh 202 Do mỗi lệnh trong máy tính là tổ hợp các con số nhị phân 0, 1 nên rất khó nhớ. ðể khắc phục ñiểm yếu này người ta dùng hợp ngữ Assembly ñể mô tả các mã lệnh nhị phân bằng các từ ngắn gọn mà ta gọi là từ gợi nhớ mã lệnh. Ngoài ra trong quá trình diễn giải chúng ta còn dùng các khái niệm thanh ghi ñích, thanh ghi nguồn 1, thanh ghi nguồn 2. Từ gợi nhớ mã lệnh mô tả ngắn gọn tác vụ phải thi hành trên các thanh ghi nguồn, kết quả ñược lưu giữ trong thanh ghi ñích. Mỗi lệnh của ngôn ngữ cấp cao ñược xây dựng bằng một lệnh mã máy hoặc một chuỗi nhiều lệnh mã máy. Lệnh nhảy (GOTO) ñược thực hiện bằng các lệnh hợp ngữ về nhảy (JUMP) hoặc lệnh hợp ngữ về vòng. Chúng ta phân biệt lệnh nhảy làm cho bộ ñếm chương trình ñược nạp vào ñịa chỉ tuyệt ñối nơi phải nhảy ñến (PC ← ñịa chỉ tuyệt ñối nơi phải nhảy tới), với lệnh vòng theo Chương trình bằng ngôn ngữ cấp cao Chương trình bằng hợp ngữ Chương trình bằng ngôn ngữ máy Trình biên dịch ( Compiler) Bộ dịch hợp ngữ (Assempler) Hình 6.10. Quá trình biên dịch ra ngôn ngữ máy Chương VI: Kiến trúc bộ lệnh 203 ñó ta chỉ cần cộng thêm một ñộ dời vào bộ ñếm chương trình (PC ← PC + ñộ dời). Ngoài ra do mỗi kiểu kiến trúc máy tính có cách mã hóa lệnh và tên các câu lệnh khác nhau, do ñó trong phần này chúng ta chỉ ñể ý ñến kiểu cấu trúc RISC. 6.4.1. Nhóm lệnh truyền dữ liệu Nhóm lệnh này nhằm truyền dữ liệu (a word or a block) từ một nguồn có thể là thanh ghi hoặc bộ nhớ ñến một ñích. Phần lớn trong nhóm này là những lệnh truyền dữ liệu giữa các thanh ghi khác nhau trong CPU. Việc truyền dữ liệu từ một thanh ghi ñến một thanh ghi khác có thể thông qua lệnh sau: MOVE R i , R j // truyền dữ liệu từ thanh ghi R j ñến thanh ghi R i Ở ñây dữ liệu từ thanh ghi nguồn R j ñược ghi ñè lên thanh ghi ñích R i , còn dữ liệu của R j thì không thay ñổi. Một số ví dụ của lệnh MOVE như trong bảng 6.4. ðể nạp một giá trị từ bộ nhớ vào thanh ghi hoặc lưu một giá trị từ thanh ghi vào bộ nhớ ta dùng các lệnh sau: LOAD ñích, nguồn ví dụ: LOAD Ri, M (ñịa chỉ) // RiM[ñịa chỉ] STORE ñích, nguồn ví dụ: STORE M(ñịa chỉ), Ri // M[ñịa chỉ] ←Ri Trong bảng 6.5 cho ta thấy một số các lệnh và ý nghĩa của nó Chương VI: Kiến trúc bộ lệnh 204 ðích Nguồn Ví dụ Giải thích Bộ nhớ Thanh ghi MOVE 100H, AX Chuyển nội dung trong AX vao vị trí nhớ 100H Thanh ghi Bộ nhớ MOVE AX,MEM1 Chuyển nội dung trong vị trí nhớ MEM1 chỉ ra vào thanh ghi AX Thanh ghi Thanh ghi MOVE AX, BX Chuyển nội dung trong thanh ghi BX vào thanh ghi AX Thanh ghi Hằng số MOVE AX, 0FFFFH Chuyển giá trị hằng số ở hệ 16: FFFF vào thanh ghi AX, số 0 ở ñầu ñể chỉ rõ FFFFH là một giá trị hằng chứ không phải là một nhãn Bảng 6.4. Một số ví dụ lệnh MOVE Lệnh truyền dữ liệu Ý nghĩa MOVE Di chuyển (một từ hay một khối) từ ñịa chỉ nguồn (thanh ghi hay bộ nhớ trong) ñến ñịa chỉ ñích. LOAD ðọc dữ liệu từ bộ nhớ vào thanh ghi STORE Lưu dữ liệu từ thanh ghi vào bộ nhớ PUSH Lưu dữ liệu thừ thanh ghi vào ngăn xếp POP Nhận dữ liệu từ ngăn xếp vào thanh ghi Bảng 6.5. Một số lệnh truyền dữ liệu Chương VI: Kiến trúc bộ lệnh 205 6.4.2. Nhóm lệnh tính toán số học: Các lệnh số học bao gồm bốn phép tính số học cơ bản là cộng, trừ, nhân, chia và ñảo dấu toán hạng. ADD/SUB Dạng tổng quát của các lệnh cộng (add) và trừ (subtract) như sau: ADD ñích, nguồn // ñích  ñích + nguồn SUB ñích, nguồn // ñích  ñích – nguồn trong ñó các toán hạng ñích và nguồn có thể tím ñược theo các ñịa chỉ khác nhau, nhưng phải chứa dữ liệu có cùng ñộ dài và không ñược phép ñồng thời là hai ô nhớ và cũng không ñược là thanh ghi ñoạn Ví dụ 1: ADD AX, BX // AX AX + BX ADD AL,74H // AL  AL + [74H] SUB CL, AL // CL  CL – AL SUB AX, 0405H // AX  AX – 0405H Ví dụ 2: Viết ñoạn chương trình bằng ngôn ngữ Assembly ñể cộng 5H với 3H, dùng các thanh ghi AL và BL. Kết quả của phép cộng lưu vào bộ nhớ tại ñịa chỉ 100H. MOV AL, 05H // AL  05H MOV BL, 03H // BL  03H ADD AL, BL // AL  AL + BL MOV 100H, AL // MEM[100H]AL: di // chuyển kết quả từ AL vào // vị trí nhớ DS:100H Bảng 6.6 cho ta tóm tắt các lệnh tính toán số học và ý nghĩa tương ứng của nó Chương VI: Kiến trúc bộ lệnh 206 Tên lệnh Ý nghĩa ADD Cộng ADDD Cộng số có dấu chấm ñộng, chính xác kép SUB Trừ SUBD Trừ số có dấu chấm ñộng, chính xác kép MUL Nhân DIV Chia INC Tăng lên 1 DEC Giảm ñi 1 NEG ðảo dấu toán hạng Bảng 6.6. Các lệnh tính toán số học cơ bản 6.4.3. Nhóm lệnh logic: Tthực hiện phép tính logic NOT, AND và OR cho từng bit một. Lệnh NOT ñảo tất cả các bit trong toán hạng, các lệnh AND/OR thực hiện các phép tính AND/OR ñối với một ñôi bit trong toán hạng nguồn và toán hạng ñích. AND/OR Dạng tổng quát của lệnh AND/OR như sau: AND ñích, nguồn OR ñích, nguồn AND/OR thực hiện phép toán Boolean ñối với các toán hạng nguồn và ñích. Phép AND thường dùng ñể che ñi hoặc giữ lại một vài bit nào ñó của một toán hạng bằng cách nhân logic toán hạng ñó với toán hạng tức thời có các bit 0/1 tại các vị trí cần che/ giữ lại tương ứng. Phép OR thường dùng ñể lập một vài bit nào ñó của toán hạng bằng cách cộng logic toán hạng ñó với toán hạng tức thời có các bit 1 tại các vị trí tương ứng cần thiết lập (toán hạng tức thời trong những trường hợp này còn ñược gọi là mặt nạ) Ví dụ: AND AL, BL // Nội dung thanh ghi BL ñược giao // với nội dung trong thanh ghi AL Chương VI: Kiến trúc bộ lệnh 207 // và kết quả ñược lưu lại vào trong // thanh gh AL. Nếu con số trong // AL là 00001101B và trong BL là // 00110011B thì kết quả trong thanh // ghi AL sau phép AND là 00000001B 6.4.4 Nhóm các lệnh dịch chuyển số học hoặc logic (SHIFT ), quay vòng (ROTATE) có hoặc không có số giữ ở ngã vào, sang phải hoặc sang trái. Các lệnh này ñược thực hiện trên một thanh ghi và kết quả lưu giữ trong thanh ghi khác. Số lần dịch chuyển (mỗi lần dịch sang phải hoặc sang trái một bit) thường ñược xác ñịnh trong thanh ghi thứ ba. Hình 6.11 minh hoạ cho các lệnh cơ bản nhất của nhóm này.  SRL (Shift Right Logical - dịch phải logic): Các bit của word ñược dịch chuyển sang phải, bit thấp nhất (bit 0) mất ñi còn trị nhị phân “0” sẽ dịch chuyển vào bit cao nhất  SLL (Shift Left Logical - dịch trái logic): Các bit của word ñược dịch chuyển sang trái, trị nhị phân “0” sẽ dịch chuyển vào bit thấp nhất (bit 0) , còn bit cao nhất sẽ mất ñi  SRA (Shift Right Arithmetic - dịch phải số học): Bit cao nhất là bit dấu sẽ ñược giữ lại, các bit còn lại sẽ dịch chuyển sang phải còn bit thấp nhất sẽ mất ñi.  SLA (Shift Left Arithmetic – dịch trái số học): Bít cao nhất là bit dấu sẽ ñược giữ nguyên, các bit dịch sang trái, bít kế bit dấu mất ñi, trị nhị phân “0” dịch chuyển vào bit thấp nhất. Tương tự cho các lệnh quay vòng như trong hình 6.11. Chương VI: Kiến trúc bộ lệnh 208 Hình 6.11. Các lệnh dịch chuyển và quay vòng Chương VI: Kiến trúc bộ lệnh 209 6.4.5. Nhóm các lệnh có ñiều kiện và lệnh nhảy (không ñiều kiện) Lệnh có ñiều kiện có dạng : Nếu <ñiều kiện> thì <chuỗi lệnh 1> nếu không <chuỗi lệnh 2> (IF <condition> THEN <instructions1> ELSE <instructions2>) Lệnh này buộc phải ghi nhớ ñiều kiện và nhảy vòng nếu ñiều kiện ñược thoả. Ghi nhớ ñiều kiện . Bộ tính toán logic số học ALU cung cấp kết quả ở ngã ra tuỳ theo các ngã vào và phép tính cần làm. Nó cũng cho một số thông tin khác về kết quả dưới dạng các bit trạng thái (Hay các bit cờ - flag). Các bit này là những ñại lượng logic ðÚNG hoặc SAI (hình 6.12). Trong các bit trạng thái ta có: + bit dấu S (Sign - ðúng nếu kết quả âm), + bit trắc nghiệm zero Z (Zero - ðúng nếu kết quả bằng không), + bit tràn OVF (Overflow) ðÚNG nếu phép tính số học làm thanh ghi không ñủ khả năng lưu trữ kết quả, + bit số giữ C (carry) ðÚNG nếu số giữ ở ngã ra là 1 Các bit trên thường ñược gọi là bit mã ñiều kiện. Chương VI: Kiến trúc bộ lệnh 210 Có hai kỹ thuật cơ bản ñể ghi nhớ các bit trạng thái Cách thứ nhất, ghi các trạng thái trong một thanh ghi ña dụng. Ví dụ lệnh CMP Rk, Ri, Rj Lệnh trên sẽ làm phép tính trừ Ri - Rj mà không ghi kết quả phép trừ, mà lại ghi các bit trạng thái vào thanh ghi Rk. Thanh ghi này ñược dùng cho một lệnh nhảy có ñiều kiện. ðiểm lợi của kỹ thuật này là giúp lưu trữ nhiều trạng thái sau nhiều phép tính ñể dùng về sau. ðiểm bất lợi là phải dùng một thanh ghi ña dụng ñể ghi lại trạng thái sau mỗi phép tính mà số thanh ghi này lại bị giới hạn ở 32 trong các bộ xử lý hiện ñại. Cách thứ hai, là ñể các bit trạng thái vào một thanh ghi ñặc biệt gọi là thanh ghi trạng thái. Vấn ñề lưu giữ nội dung thanh ghi này ñược giải quyết bằng nhiều cách. Trong kiến trúc SPARC, chỉ có một số giới hạn lệnh ñược phép thay ñổi thanh ghi trạng thái ví dụ như lệnh ADDCC, SUBCC (các lệnh này thực hiện các phép tính cộng ADD và phép tính trừ SUB và còn làm thay ñổi thanh ghi trạng thái). Trong kiến trúc PowerPC, thanh ghi trạng thái ñược ALU Toán h ạng 1 Toán h ạng 2 Số mang vào (Carry in) K ết quả Bit S Bit Z Bit OVF Bit C Hình 6.12. Các bit tr ạng thái m à ALU t ạo ra Chương VI: Kiến trúc bộ lệnh 211 phân thành 8 trường, mỗi trường 4 bit, vậy là thanh ghi ñã phân thành 8 thanh ghi trạng thái con. ðặc tính chung của các lệnh này là thứ tự thực thi chương trình thay ñổi nhờ tác ñộng vào già trị lưu trong thanh ghi ñếm chương trình (Program Counter - PC). Sự thay ñổi trong thanh ghi PC có thể là không có ñiều kiện, ví dụ như khi chương trình thực hiện ñến một chỗ nào ñó rồi cần phải nhảy ñến một vị trí khác, khi ñó ta sử dụng lệnh nhảy (Jump instruction). Trường hợp này trong ngôn ngữ cấp cao ta hay gặp ñó là lệnh GOTO, khi ñó giá trị ñược nạp vào trước trong thanh ghi PC sẽ bị xóa ñi và một lệnh mới trong bộ nhớ sẽ ñược nạp vào. Thanh ghi PC có thể thay ñổi có ñiều kiện, mà những ñiều kiện này chủ yếu dựa vào các cờ như bít dấu (S), bit Zero (Z), Overflow (O) và bit Carry (C). Những bit cờ này ñược lưu trữ trên một thanh ghi ñặc biệt gọi là thanh ghi mã ñiều kiện (Condition Code register - CC). Giá trị của các bit cờ này thay ñổi dựa vào kết quả thực thi của các lệnh khác nhau. Chúng ta xem một ví dụ cụ thể sau: LOAD R1, #100 Loop: ADD R0, (R2)+ DECREMENT R1 BEQZ R1, Loop Câu lệnh thứ 4 là một lệnh có ñiều kiện. Khi kết quả tăng giá trị trong thanh ghi R1 là bằng 0, thì flag Z sẽ chuyển thành 1 và lệnh tiếp theo ñược thực thi sẽ là lệnh ở vị trí nhãn Loop. Chương VI: Kiến trúc bộ lệnh 212 6.5. Cấu trúc lệnh CISC và RISC Trong máy tính mọi thứ ñều ñược ñưa về các con số nhị phân “0” và “1” bởi vì máy tính chỉ hiểu các mức ñiện thế tương ứng với 0/1 trên mỗi transistor cụ thể, người sử dụng muốn thực hiện một chương trình nào ñấy, phải nạp các mã lệnh chỉ gồm các con số 0-1 vào bộ nhớ cho máy tính. Có 3 cách cơ bản ñể làm việc ấy: • Viết ngay dạng mã máy với các con số 0, 1 và nạp vào bộ nhớ. Cách này rất khó thực thi bởi vì thứ nhất rất dễ bị nhầm lẫn giữa các con số 0 và 1; thứ hai rất khó nhớ các lệnh ñược mã hóa như thế nào và thứ ba là rất mất thời gian ñể làm việc ñó. • Viết dạng tên gợi nhớ bằng hợp ngữ (Assembler), sau ñó biên dịch ra mã máy, cấp này cũng rất gần với ngôn ngữ máy và cũng khó thực hiện với các chương trình phức tạp. Tuy nhiên, cấu trúc gọn nhẹ, các lệnh có tên tương ứng dễ nhớ. • Viết bằng một ngôn ngữ cấp cao như C++, Pascal, Java,…, sau ñó dùng một trình biên dịch (compiler) ñể dịch ra mã máy. Cách này tuy dễ với người viết chương trình nhưng cũng sẽ làm chương trình có dung lượng lớn hơn nếu viết bằng ASM. Và thách thức là làm sao các nhà sản xuất phần mềm, phần cứng bắt tay nhau ñể chương trình biên dịch này thật chuẩn tắc, nhỏ gọn, không tạo nhiều code trung gian. Trong suốt thập niên 1980, các nhà thiết kế cố gắng thu hẹp khoảng cách giữa ngôn ngữ cấp cao của con người và ngôn ngữ máy, họ ñã ñưa ra cấu trúc với các chỉ lệnh phức tạp gọi là CISC (Complex Instruction Set Computer), có các chế ñộ ñịnh ñịa chỉ khác nhau, mỗi lệnh thực thi cần nhiều lần ñịnh ñịa chỉ ñể lấy dữ liệu, và do ñó, tốn nhiều chu kì xung nhịp cho mỗi chỉ lệnh. Nếu việc giảm thiểu ranh giới giữa tập lệnh của vi ñiều khiển và ngôn ngữ cấp cao không phải là một cách hay ñể máy tính hoạt ñộng hiệu quả, các nhà thiết kế phải làm sao ñể tối ưu tốc ñộ xử lý? [...]... c ph i dùng nhi u l nh ñ làm m t công vi c nh t ñ nh – C n thi t ph i tính các ñ a ch hi u d ng vì không có nhi u cách ñ nh v – Không th th c thi các mã l nh c a x86, m t ki u ki n trúc máy tính ñã quá thông d ng và quen thu c v i m i ngư i Như v y ñ tích h p ñư c ph i dùng các ph n m m h tr n n cơ s cho RISC, tuy nhiên, v i máy tính c a IBM, có th b t ch i – Kích thư c mi ng bán d n nh hơn: b x lý... biên d ch ra ngôn ng máy t các ngôn ng c p cao 12 Các l nh máy tính ñư c phân ra nh ng nhóm l nh nào? ñưa ra m t ví d cho t ng nhóm l nh 13 Mô t b ng hình v các l nh d ch chuy n và quay vòng và gi i thích tác d ng c a các l nh 14 Hãy cho bi t m t s bit tr ng thái mà ALU t o ra và cách dùng các bit này trong các l nh nh y 15 Hãy phân bi t s khác nhau gi a hai ki u ki n trúc máy tính RISC và CISC 217... t cơ b n gi a hai ki u ki n trúc RISC và CISC có th li t kê như trong b ng 6 .8 213 214 Chương VI: Ki n trúc b l nh RISC – Kích thư c các l nh (ñ dài l nh) là c ñ nh ( 32 bit) v i ch m t vài ñ nh d ng – S d ng ki n trúc load-store các l nh x lý d li u ho t ñ ng ch trong thanh ghi và cách ly v i các l nh truy c p b nh – M t s l n các thanh ghi ña d ng 32 bit, cho phép c u trúc load-store ho t ñ ng hi... thanh ghi 8 Có th thi t k opcode m r ng ñ cho phép mã hóa n i dung sau trong l nh 12 bit ñư c không? Trư ng thanh ghi r ng 3 bit 216 Chương VI: Ki n trúc b l nh a) 4 l nh có ba thanh ghi b) 255 l nh có hai thanh ghi c) 20 48 l nh không có thanh ghi 9 Cho bi t các ch ñ l p ñ a ch và các ưu, như c ñi m c a t ng lo i Mô t b ng hình các cách l p ñ a ch ñó 10 Mô t các ki u thi hành l nh c a m t máy tính T i... có ñi u thu n l i, nó cũng có m t vài b t c p, mà c th là: So sánh CISC và RISC S khác bi t cơ b n gi a các chip dòng máy tính v i t p l nh rút g n RISC (reduced instruction set computer) và máy tính v i t p l nh ph c t p CISC (complex instruction set computer, ch ng h n như dòng chip x86 c a Intel) có th ñư c xem như cu c ganh ñua gi a nhà l p trình và nhà thi t k chip Chip CISC ñư c thi t k nh m t... – Các máy cũ ít khi cho phép các – Th c thi ch l nh theo c u trúc dòng l nh th c thi ki u này, dòng ch y (xem hình 7.9 trong chúng ph i tu n t h t dòng l nh chương sau) này m i ñ n dòng l nh khác – C n nhi u chu kì xung nh p ñ hoàn thành m t l nh – M t l nh th c thi trong 1 chu kì xung nh p B ng 6 .8 Các ñi m khác nhau cơ b n gi a RISC và CISC 215 CÂU H I VÀ BÀI T P CHƯƠNG VI 1 Có m y lo i ki n trúc. .. BÀI T P CHƯƠNG VI 1 Có m y lo i ki n trúc b l nh cơ b n? Nêu các ưu và như c ñi m c a t ng lo i 2 Cho bi t các ñ c tính cơ b n c a ki u ki n trúc thanh ghi ña d ng 3 ð a ch b nh ñư c s p x p như th nào? Gi a cách c a Intel và Motorola khác bi t nhau gì? Vư ng m c gì có th x y ra khi máy tính c a hai hãng này k t n i v i nhau và ñưa ra ví d cho s r c r i này? 4 Cho bi t cách mã hóa t p l nh và ñưa ra...Chương VI: Ki n trúc b l nh Chương VI: Ki n trúc b l nh N u mu n bi t cách làm ñ vi x lý ho t ñ ng nhanh hơn, ta ph i bi t vi x lý dùng h u h t th i gian c a chúng vào vi c gì? Chúng ta d nghĩ r ng: Vi x lý t t nhiên dùng h u h t th i gian c a nó ñ tính toán; nghĩa là th i gian h u h t b ALU Th t ra, theo th ng kê (xem b ng 6.7) thì... p l nh và ñưa ra m t vài d ng mã hóa l nh cơ b n 5 Hãy cho bi t và gi i thích các tiêu chu n thi t k d ng th c l nh 6 Gi s c n thi t k máy v i ký t 8 bit và b nh chính ch a 224 ký t Hãy cho bi t trư ng ñ a ch c n bao nhiêu bit trong trư ng h p: a) Ô nh kích thư c 8 bit b) Ô nh kích thư c 16 bit c) Ô nh kích thư c 32 bit 7 Thi t k opcode m r ng nh m cho phép mã hóa n i dung sau trong l nh 36 bit a)... và ñ nh v gián ti p qua m t thanh ghi) – Có m t s ít d ng l nh (m t ho c hai) – Ch có các l nh ghi ho c ñ c ô nh m i thâm nh p vào b nh – Gi i mã các l nh logic b ng k t n i ph n c ng Chương VI: Ki n trúc b l nh CISC – Kích thư c t p l nh thay ñ i v i r t nhi u ñ nh d ng khác nhau – Cho phép giá tr trong b nh ñư c dùng như như toán h ng trong các ch l nh x lý d li u – Có r t nhi u thanh ghi, nhưng . Loop. Chương VI: Kiến trúc bộ lệnh 212 6.5. Cấu trúc lệnh CISC và RISC Trong máy tính mọi thứ ñều ñược ñưa về các con số nhị phân “0” và “1” bởi vì máy tính chỉ hiểu các mức ñiện. lại ghi trở lại vào R1. Chương VI: Kiến trúc bộ lệnh 201 6.4. Bộ lệnh Trong phần này chúng ta sẽ xem xét các loại lệnh cơ bản của các kiến trúc phần mềm ñược dùng nhiều nhất, ñể cho. + ñộ dời). Ngoài ra do mỗi kiểu kiến trúc máy tính có cách mã hóa lệnh và tên các câu lệnh khác nhau, do ñó trong phần này chúng ta chỉ ñể ý ñến kiểu cấu trúc RISC. 6.4.1. Nhóm lệnh truyền

Ngày đăng: 23/07/2014, 23:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan