1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu lý thuyết và thực nghiệm về công nghệ FPGA trong thiết kế CPU

104 487 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 104
Dung lượng 2,79 MB

Nội dung

Chúng ta s sử dụng s0, s1 để biểu thị các thanh ghi tương ứng với các biến trong ngôn ngữ lập trình C cũng như Java và các thanh ghi t0, t1 như là các thanh ghi tạm để biên dịch từ chươn

Trang 2

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

Trang 3

LỜI CAM ĐOAN

Tôi tên là Đoàn Vũ Thịnh, hiện đang là học viên cao học ngành Công nghệ Thông tin, khóa 2010 của trường Đại học Bách khoa Hà Nội Tôi xin cam đoan và hoàn toàn chịu trách nhiệm về lời cam đoan này:

 Toàn bộ nội dung của Luận văn Thạc sỹ này là do chính tôi thực hiện dưới

sự hướng dẫn tận tình của PGS TS Trịnh Văn Loan

 Trong quá trình thực hiện Luận văn tôi có kế thừa kiến thức trong những tài liệu tham khảo (phần tài liệu tham khảo)

 Các kết quả mô phỏng, thí nghiệm sử dụng để kết luận và đánh giá trong Luận văn là hoàn toàn chân thực

Hà Nội, ngày 30 tháng 8 năm 2012

Đoàn Vũ Thịnh

Trang 4

LỜI CẢM ƠN

Trải qua khoảng thời gian học tập theo chương trình cao học của Trường Đại học Bách khoa Hà Nội, tôi đã được các thầy cô giảng dạy trong chương trình cao học truyền đạt cho nhiều kiến thức mới Tôi xin chân thành cảm ơn PGS.TS Trịnh Văn Loan người đã tận tình hướng dẫn và giúp đỡ tôi thực hiện Luận văn Thạc sỹ này Tôi cũng xin cảm ơn đến các thầy cô của Trường Đại học Bách khoa Hà Nội

đã giảng dạy và tạo nhiều điều kiện thuận lợi để tôi hoàn thành khóa học này Cảm

ơn các đồng nghiệp tại Trường Đại học Nha Trang cũng như các bạn học viên lớp Cao học Công nghệ Thông tin khóa 2010 đã trao đổi, góp ý và giúp đỡ tôi trong lúc học tập cũng như lúc thực hiện luận văn này

Đoàn Vũ Thịnh

Trang 5

DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT

ALU Arthimetic Logic Unit Đơn vị số học và Logic

ASIC Application Specific Intergrated Circuit Mạch tích hợp có ứng dụng

chuyên biệt CPLD Complex Programmable Logic Device Thiết bị Logic khả trình có cấu

trúc phức tạp

MIPS Microprocessor without Interlocked Bộ xử lý không có các đoạn

FPGA Field Programmable Gate Arrays Mảng các cổng khả trình

PLD Programmable Logic Device Thiết bị Logic khả trình

RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiên

Trang 6

DANH MỤC BẢNG

Bảng 1.1 Kiến trúc cơ bản của MIPS 4

Bảng 1.2 Các toán hạng trong MIPS 9

Bảng 1.3 Ngôn ngữ MIPS assembly 9

Bảng 1.4 ảng chuyển đổi hệ 16-2 10

Bảng 1.5 Mã hóa lệnh MIPS 12

Bảng 1.6 Ph p toán có liên quan đến logic trên C và MIPS 13

Bảng 1.7 Tổng hợp kiến trúc của tập lệnh MIPS 18

Bảng 1.8 Các thanh ghi qua lời gọi thủ tục 25

Bảng 1.9 Quy ước thanh ghi MIPS 25

Bảng 1.10 Tổng hợp các toán hạng, ngôn ngữ asembly và thanh ghi trong MIPS 26

Bảng 2.1 Các bit điều khiển của ALU 46

Bảng 2.2 ảng trạng thái của đường điều khiển ALU 47

Bảng 2.3 Ảnh hưởng của 7 t n hiệu điều khiển 50

Bảng 2.4 Thiết lập các đường điều khiển b ng cách xác định các giá trị từ trường lệnh 51

Bảng 2.5 Các chức năng điều khiển của lệnh đơn chu k 55

ản Khuôn dạng của lệnh MIPS 32-bit 59

ản Tập lệnh MIPS của bộ vi xử lý 60

Trang 7

DANH MỤC HÌNH

6

8

16

22

29

30

nh 1.7 30

34

36

38

38

39

40

- 41

42

44

45

48

49

51

52

53

55

57

Trang 8

61

Hình 3.2 n nh n l nh c a CPU 63

Hình 3.3 nh gi i mã l nh 64

Hình 3.4 n th c thi l nh 66

Hình 4.1 Ki n trúc c u khi n – CU 67

Hình 4.2 n nh n l nh 68

Hình 4.3 Giai n gi i mã l nh 69

Hình 4.4 n th c hi n l nh 70

Trang 9

MỤC LỤC

LỜI CAM ĐOAN i

LỜI CẢM ƠN ii

DANH MỤC CÁC KÝ HIỆU, CÁC TỪ VIẾT TẮT iii

DANH MỤC BẢNG iv

DANH MỤC HÌNH v

MỞ ĐẦU 1

CHƯƠNG I: KIẾN TRÚC TẬP LỆNH MIPS 3

1.1 Giới thiệu 3

1.2 Các toán hạng của MIPS 5

1.3 Mô tả các lệnh trong máy t nh 9

1.4 Các trường của MIPS 10

1.5 Các ph p toán liên quan đến logic 13

1.6 Lệnh h trợ ra quyết định 15

16

18

1.7 Hàm và thủ tục trong phần cứng máy t nh 19

1.8 Liên kết với thế giới 28

1.9 Địa chỉ 32 bit và ph p toán với h ng số có độ dài 32bit 30

30

31

CHƯƠNG II: CÁC THÀNH PHẦN CỦA BỘ XỬ LÝ THEO KIẾN TRÚC MIPS 33

2.1 Tổng quan cơ chế MIPS 33

2.2 Thành phần logic 37

2.3 Các thành phần thực thi tập lệnh MIPS 39

2.4 Chi tiết các thành phần 45

CHƯƠNG III: THIẾT KẾ TẬP LỆNH MIPS VỚI VHDL 59

Trang 10

3.1 Tổng quan 59

3.2 Mô tả kiến trúc MIPS với VH L 61

- CU) 61

n nh n l nh (Instruction Fetch) 62

3.2.3 Gi i mã l nh (Decode) 64

3.2.4 Th c thi l nh (Execute) 65

CHƯƠNG IV: KẾT QUẢ ĐẠT ĐƯỢC 67

4.1 Những mặt đạt được 67

4.2 Những mặt còn hạn chế 71

4.3 Hướng phát triển tiếp theo của luận văn 71

TÀI LIỆU THAM KHẢO 72

PHỤ LỤC 73

Trang 11

MỞ ĐẦU

Kiến trúc MIPS được phát triển vào những năm 80 của thế kỷ XX do John L Hennesy sáng lập Nền tảng kiến trúc MIPS được ứng dụng rộng rãi trong các dòng

vi xử lý của các hãng sản xuất linh kiện bán dẫn như Sony, NEC hay Motorola Từ

đó, kiến trúc MIPS được thay đổi không ngừng để có thể đáp ứng được nhu cầu của người dùng từ đơn mức lệnh đến kiến trúc Pipeline Với công nghệ FPGA cho ph p người dùng có thể tự thiết kế, kiểm chứng hoạt động của kiến trúc MIPS trước khi đưa vào sản xuất hàng loạt chip cho thị trường ên cạnh đó, FPGA còn phát huy hiệu quả trong giảng dạy và nghiên cứu ở các trường Đại học và Viện nghiên cứu trong các ngành như: kiến trúc máy t nh, xử lý t n hiệu số, thiết kế mạch số… Và để

có cái nhìn trực quan hơn về kiến trúc MIPS nên tôi đã chọn đề tài ”Tìm hiểu lý

thuyết và thực nghiệm về công nghệ FPGA trong thiết kế CPU theo kiến trúc MIPS”

Như đã nói ở trên, kiến trúc MIPS được phát triển từ những năm cuối của thế kỷ XX từ đó nó đã được ứng dụng rộng rãi trong các hãng sản xuất linh kiên bán dẫn và còn phát triển tiếp tục với các phiên bản sau này Việc tập trung mô tả kiến trúc này giúp chúng ta có cái nhìn trực quan hơn về MIPS cũng như việc sử dụng FPGA như một lõi của CPU cho phép thực hiện các công việc mà không phải tiến hành thiết kế, chế tạo một bộ vi xử lý thực thụ

Mục đ ch nghiên cứu của luận văn là tìm hiểu kiến trúc tập lệnh MIPS và tiến hành mô tả cách thức hoạt động của nó trên FPGA Trong giới hạn của luận văn này tôi chỉ tiến hành mô tả kiến trúc MIPS đơn mức lệnh và đơn chu k

Đề tài đã hoàn thành được mục tiêu đặt ra ở trên và mang lại lợi ích cho việc học tập cũng như nghiên cứu kiến trúc của các bộ vi xử lý khác, mở ra hướng nghiên cứu rộng hơn của công nghệ FPGA sau này Đề tài cũng hoàn tất việc cài đặt các module và chương trình hoàn thiện trên kit FPGA thực tế

Phương pháp nghiên cứu tôi sử dụng ở đây là b ng thực nghiệm, toàn bộ các quá trình đều được thiết kế trên phần mềm Quartus II, sử dụng ngôn ngữ mô tả phần cứng VHDL và nạp chương trình lên KIT E1 để khảo sát sau khi trải qua giai đoạn

Trang 12

mô phỏng trên Quartus II

Luận văn được trình bày trong 4 chương:

Chươn : Giới thiệu tổng quan về kiến trúc tập lệnh MIPS bao gồm: mô

tả các lệnh trong máy tính theo kiến trúc MIPS Các toán hạng, các trường lệnh

trong một lệnh MIPS cụ thể Một số lệnh đặc trưng cho tập lệnh MIPS

Chươn : Các thành phần bộ xử lý theo kiến trúc tập lệnh MIPS Về mặt

logic, nêu ra các thành phần logic đáp ứng cho kiến trúc MIPS Về mặt thiết kế tập lệnh, tiến hành khảo sát các khối logic tương ứng với các lệnh MIPS cơ bản Về phần thiết kế thành phần, chính là khảo sát các bộ ALU, CU, các tín hiệu điều

khiển, các luồng dữ liệu trong một chu trình thực thi lệnh

Chươn : Thiết kế tập lệnh MIPS với VHDL Mô tả kiến trúc MIPS, các

thành phần logic, thành phần liên kết b ng ngôn ngữ mô tả phần cứng Thiết kế đơn

vị điều khiển, thiết kế quy trình nhận lệnh, thực thi và giải mã lệnh Kiểm chứng với

một số lệnh cụ thể như lw, sw, beq

Chươn 4: Nêu ra các kết quả đạt được, những mặt còn hạn chế và hướng phát triển tiếp theo của đề tài

Trang 13

CHƯƠNG I KIẾN TRÚC TẬP LỆNH MIPS

1.1 G th u

Để có thể điều khiển được máy t nh b ng phần cứng b t buộc ta phải ra lệnh b ng ngôn ngữ của phần cứng Từ dùng để giao tiếp được gọi là lệnh và ngôn ngữ đó được gọi là tập lệnh Trong chương này ta s tìm hiểu tập lệnh thực sự của máy t nh ở cả hai kh a cạnh được viết bởi người lập trình và ở cả khía cạnh được đọc bởi các phần cứng có liên quan của máy t nh

Việc lựa chọn ngôn ngữ s b t đầu với tập lệnh MIPS – tập lệnh được thiết

kế từ những năm 1980 với hơn 100 triệu các dòng vi xử lý phổ biến được sản xuất năm 2002 của các hãng sản xuất chip như: ATI Technologies, roadcom, Cissco, NEC, Nintedo, Silicon Graphics, Sony, Texas Instruments và Toshiba …

Tất cả các máy t nh đều phải thực hiện được ph p toán số học, do đó ngôn ngữ assembly MIPS được ký hiệu như sau:

add a, b, c

Lệnh trên thực hiện thao tác t nh tổng giá trị của hai biến b và c và đặt tổng có được vào biến a Ký hiệu này là yêu cầu b t buộc của m i lệnh số học MIPS: chỉ thực hiện một thao tác và luôn luôn sử dụng đến 3 biến V dụ, giả sử ta muốn t nh tổng của b, c, d, e và đặt tổng của chúng vào biến a thì các lệnh tuần tự phải như sau:

add a, b, c

add a, a, d

add a, a, e

Vì thế ta cần sử dụng đến 3 lệnh ở trên để t nh tổng của 4 biến Các từ bên

ph a phải của dấu được gọi là các chú giải cho người đọc và được máy t nh bỏ qua Chú ý r ng không giống như các ngôn ngữ lập trình khác, m i dòng lệnh chỉ có duy nhất một lệnh và không có ký hiệu kết thúc ở cuối m i dòng lệnh như ngôn ngữ lập trình C/Pascal

Trang 14

Ph p toán cộng các số tự nhiên cũng giống như ph p cộng có ba toán hạng: hai

số được cộng với nhau và đặt vào tổng Việc này đòi hỏi m i lệnh cần có ch nh xác 3 toán hạng, không nhiều hơn cũng không t hơn để có thể đơn giản hóa phần cứng

Ví dụ: Cho đoạn chương trình C sau đây chứa năm biến a, b, c, d, e

a = b+c;

d = a-e;

Một lệnh MIPS thực hiện trên hai toán hạng nguồn và đặt kết quả vào toán hạng đ ch Hai lệnh của ngôn ngữ lập trình bậc cao được chuyển sang ngôn ngữ MIPS assembly như sau:

add a, b, c sub d, a, e

Một v dụ khác, phức tạp hơn có tới 5 biến f, g, h, i và j:

f = (g + h) – (i + j);

Trình biên dịch phải tách đoạn chương trình trên thành một số lệnh assembly

vì m i lệnh MIPS chỉ thực hiện một ph p toán Đầu tiên lệnh MIPS thực hiện thao tác cộng hai số g và h Đặt kết quả có được sang một biến tạm, t0:

add t0, g, h 0

Thao tác kế tiếp là ph p trừ nhưng ta cần t nh tổng của i và j trước thì mới thực hiện ph p trừ được Vì thế lệnh tiếp theo là t nh tổng của i và j và kết quả được đặt ở t1

Ph p toán số học Cộng add a,b,c a=b+c Luôn có 3 toán hạng

Trừ sub a,b,c a=b-c Luôn có 3 toán hạng

Trang 15

1.2 C to n h n MIP

Không giống như chương trình của các ngôn ngữ lập trình bậc cao, các toán hạng của các lệnh số học bị hạn chế trong lệnh MIPS Đó là sự giới hạn của số vùng lưu trữ đặc biệt được thiết kế bởi phần cứng được gọi là các thanh ghi – các viên gạch để xây dựng nên máy t nh Thanh ghi là thành phần nguyên thủy của thiết kế phần cứng và hầu hết người lập trình nhìn thấy khi chương trình hoàn tất K ch thước của thanh ghi trong kiến trúc MIPS là 32 bit Thứ nữa là sự khác biệt cơ bản giữa biến của ngôn ngữ lập trình và thanh ghi ch nh là giới hạn số thanh ghi, số thanh ghi phổ biến của kiến trúc MIPS hiện nay là 32 thanh ghi 32 bit Nguyên do của sự giới hạn 32 thanh ghi có l do nguyên lý thiết kế càng nhỏ thì càng nhanh

Số lượng rất nhiều các thanh ghi có thể làm tăng số chu k xung nhịp, đơn giản vì s cần một t n hiệu đủ dài để truy cập hết số thanh ghi đó Quan điểm nhỏ hơn thì nhanh hơn không hoàn toàn ch nh xác bởi l 31 thanh ghi không h n đã nhanh hơn 32 thanh ghi Sự thật đ ng sau nguyên nhân này có l do những người thiết kế máy t nh làm thế nào để cân b ng được giữa việc tạo ra nhiều thanh ghi với tốc độ xử

lý trong chu k nhanh nhất Một lý do khác của việc không sử dụng thanh ghi có độ dài hơn 32 bit có l xuất phát từ tập lệnh của chúng Ở chương tới ta s đi thiết kế phần cứng để đáp ứng được tập lệnh MIPS, s thấy được vai trò của thanh ghi

Mặc dù chúng ta có thể viết câu lệnh đơn giản chỉ cần sử dụng số thanh ghi

từ 0-31 nhưng câu lệnh của MIPS lại sử dụng dấu để biểu thị thanh ghi Chúng ta

s sử dụng s0, s1 để biểu thị các thanh ghi tương ứng với các biến trong ngôn ngữ lập trình C cũng như Java và các thanh ghi t0, t1 như là các thanh ghi tạm để biên dịch từ chương trình sang câu lệnh MIPS

Cho lại v dụ sau:

f = ( g + h ) - ( i + j );

Các biến f, g, h, i, j tương ứng với các thanh ghi s0, s1, s2, s3, s4 Chương trình được biên dịch cũng giống như trước đây với việc sử dụng thêm hai thanh ghi tạm t0 và t1 để lưu hai giá trị tạm thời của tổng

add $t0, $s1, $s2

Trang 16

add $t1, $s3, $s4 sub $s0, $t0,$t1 # - – (i+j)

Ngôn ngữ lập trình có các biến đơn giản được chứa các thành phần dữ liệu đơn giản như trong v dụ trên nhưng cũng có các kiểu biến phức tạp với các kiểu dữ liệu phức tạp như kiểu mảng và kiểu dữ liệu có cấu trúc Sự phức tạp của kiểu dữ liệu có cấu trúc là có thể chứa đựng nhiều kiểu dữ liệu phức tạp hơn nữa và nhiều hơn số thanh ghi có thể lưu trữ Vậy làm thế nào để máy t nh có thể truy cập đến những kiểu dữ liệu có cấu trúc như thế?

Như đã đề cập bộ xử lý chỉ có thể lưu giữ một số lượng t các dữ liệu n m trong các thanh ghi nhưng vùng nhớ máy t nh lại chứa đựng hàng triệu thành phần

dữ liệu khác Cho nên câu trả lời cho câu hỏi ở trên ch nh là sử dụng vùng nhớ để lưu trữ các kiểu dữ liệu phức tạp o các lệnh liên quan đến số học chỉ được thực hiện trên các thanh ghi o đó tập lệnh MIPS phải h trợ lệnh chuyển dữ liệu từ

vùng nhớ đến các thanh ghi được gọi là lệnh chuyển dữ liệu data transfer instruction Để truy cập một từ trong vùng nhớ, lệnh phải được cung cấp địa chỉ

của vùng nhớ Vùng nhớ vừa lớn lại là mảng một chiều chứa các phần tử, với địa chỉ b t đầu là 0 Hình 1.1 mô tả địa chỉ của phần tử thứ 3 là 2 và giá trị của vùng nhớ thứ 2 là 10 Đây là địa chỉ đơn giản của MIPS, hình 1.2 chỉ ra địa chỉ thực sự của vùng nhớ

Trang 17

Giả sử một mảng A có 100 phần tử, các biến g và h như trong v dụ trước tương ứng với các thanh ghi s1 và s2 Giả sử r ng địa chỉ cơ sở của A được lưu bởi thanh ghi s3 Cho câu lệnh trong C như sau:

g = h + A[8];

Mặc dù chỉ có một ph p gán duy nhất nhưng lại là lệnh có liên quan đến thao tác với vùng nhớ o vậy nhiệm vụ đầu tiên là phải chuyển dữ liệu của ô nhớ A 8 đến thanh ghi Địa chỉ của mảng thành phần này ch nh là tổng địa chỉ cơ sở của mảng A được lưu trữ tại s3 với thành phần 8 được chọn Kết quả được đặt tại thanh ghi tạm cho câu lệnh kế tiếp ựa vào hình 1.1 câu lệnh được viết như sau:

biến với thanh ghi, trình biên dịch cần phải định r kiểu cấu trúc dữ liệu như mảng

và kiểu dữ liệu có cấu trúc với vùng nhớ để trình biên dịch sau đó có thể đặt địa chỉ tương ứng đến lệnh chuyển dữ liệu Vì các byte 8 bit rất hữu dụng trong nhiều chương trình nên đa số kiểu kiến trúc địa chỉ đơn giản là byte Hình 1.2 chỉ ra địa chỉ thực cho địa chỉ MIPS ở hình 1.1; byte truy cập thứ 3 là 8 Trong kiến trúc MIPS, các từ có địa chỉ là bội số của 4 Để lấy được byte địa chỉ cho v dụ trên thì địa chỉ đoạn được cộng với địa chỉ cơ sở s3 phải là 4x8 =32 s có được thành phần tương ứng A 8 chứ không phải là A 8 4

Để bổ sung cho lệnh load là lệnh store; copy dữ liệu từ thanh ghi sang vùng

nhớ Khuôn dạng của lệnh store tương tự như lệnh load: tên của ph p toán, kế tiếp

là thanh ghi được lưu trữ, cuối cùng là địa chỉ đoạn thành phần của mảng được lựa

chọn và cuối cùng là thanh ghi cơ sở Lệnh MIPS của store là sw (store word)

V dụ: giả sử biến h được lưu trong thanh ghi s2 và địa chỉ cơ sở của A được lưu trong s3 Cho câu lệnh được viết trong C như sau:

Trang 18

Câu lệnh cuối là lưu tổng t nh được ở trên vào phần tử A 12 , địa chỉ đoạn là

48 được cộng vào địa chỉ cơ sở s3

sw $t0, 48($s3)

Nhiều lúc trong một chương trình s sử dụng đến ph p toán đối với h ng số,

v dụ như việc tăng giá trị của con trỏ để chỉ đến phần tử kế tiếp của mảng Trên thực tế có hơn một nửa số ph p toán số học của SPIM sử dụng đến ph p toán này Với việc sử dụng các lệnh đã được biết từ đầu đến giờ chúng ta phải đọc dữ liệu từ vùng nhớ m i khi sử dụng tới chúng V dụ để cộng một giá trị của h ng số 4 vào thanh ghi s3 ta phải thực hiện như sau:

lw $t0, AddConstant4($s1) add $s3, $s3, $t0 # $s3 = $s3+$t0 ($t0 = 4) Trong đó, AddConstant4 ch nh là vùng nhớ của số 4

Để thay thế cho lệnh load dữ liệu từ vùng nhớ vào thanh ghi như trên, MIPS

h trợ lệnh số học thao tác đối với h ng số add immediate hay addi)

Trang 19

o vậy để cộng 4 với giá trị thanh ghi s3 ta chỉ cần thực hiện như sau:

Memory[4294967292]

Truy cập dữ liệu chỉ b ng lệnh chuyển dữ liệu MIPS sử dụng byte địa chỉ để truy cập đến vùng nhớ là bội số của 4

Bảng 1.3 Ngôn ngữ MIPS assembly

Số học

add add $s1, $s2, $s3 $s1 = $s2 + $s3 subtract subb $s1, $s2, $s3 $s1 = $s2 - $s3 add immediate addi $s1, $s2, 100 $s1 = $s2 + 100

Chuyển dữ liệu load word lw $s1, 100($s2) $s1 = Memory[$s2 + 100]

store word sw $s1, 100($s2) Memory[$s2 + 100] = $s1

Trang 20

phân này: cao hoặc thấp high/low , mở hoặc t t on/off , đúng hoặc sai true/false ,

1 hoặc 0

Vì hầu hết các lệnh đều có liên quan đến thanh ghi do đó chúng ta cần phải biết tên thanh ghi tương ứng với số thanh ghi Trong lệnh MIPS assembly thì các thanh ghi $s0- s7 tương ứng với thanh ghi thứ 16 đến thanh ghi thứ 23 và thanh ghi t0 - t7 tương ứng với thanh ghi thứ 8 đến thanh ghi thứ 15

V dụ: cho lệnh MIPS sau đây, hãy chỉ ra ý nghĩa thực sự của lệnh này

add $t0, $s1, $s2

M i một đoạn của lệnh trên được gọi là một trường field Trường đầu tiên

và cuối cùng 0 và 32 nói cho máy t nh hiểu r ng đây là lệnh cộng hai số Trường thứ hai và thứ ba cho biết đây là toán hạng đầu tiên và thứ hai của ph p cộng 17 = s1; 18 = s2 Trường thứ tư s nhận giá trị của tổng vừa t nh được 8 = t0 Trường thứ năm không dùng trong trường hợp này s được đặt b ng 0 Vì thế đây là lệnh cộng hai thanh ghi s1 và s2, kết quả được lưu ở thanh ghi t0

Bảng 1.4 ảng chuyển đổi hệ 16-2

0hex 0000two 4hex 0100two 8hex 1000two Chex 1100two

1hex 0001 two 5hex 0101 two 9hex 1001 two Dhex 1101 two

2hex 0010 two 6hex 0110 two Ahex 1010 two Ehex 1110 two

3hex 0011 two 7hex 0111 two Bhex 1011 two Fhex 1111 two

Chỉ cần thay thế số hệ 16 b ng 4 bit tương ứng Nếu số bit nhị phân vượt quá

4 thì tiến hành lấy theo thứ tự từ phải sang trái

4 C trƣ n MIP

Trang 21

nghĩa các trường của lệnh MIPS của lệnh thuộc khuôn dạng R như sau:

 op: Ph p toán cơ bản của lệnh, được gọi là opcode

 rs: Thanh ghi toán hạng nguồn thứ nhất

 rt: Thanh ghi toán hạng nguồn thứ hai

 rd: Thanh ghi toán hạng đ ch, lưu giữ kết quả của ph p toán

 shamt: Shift aumount được giải th ch ở lệnh dịch bit sau

 funct: Function, trường nà dùng để lựa chọn các ph p toán cụ thể của trường

op và được gọi là function code

Vấn đề nảy sinh khi một lệnh cần một trường dài hơn khuôn dạng ở trên, v

dụ lệnh đọc một từ ở ô nhớ cần phải chỉ ra hai thanh ghi và một h ng số Nếu trường địa chỉ được sử dụng 5 bit như ở trên thì h ng số được sử dụng để đọc địa chỉ từ ô nhớ chỉ giới hạn ở 25 = 32 H ng số này được sử dụng để truy cập đến phần

tử bất k ở trong mảng hay ở dữ liệu có cấu trúc và thường cần đến giá trị lớn hơn

32 Trường lệnh 5 bit trong trường hợp này là không đủ Vì thế xung đột sảy ra giữa

ý muốn các lệnh có cùng độ dài và có cùng khuôn dạng

V dụ, lệnh có khuôn dạng R-type Register hay còn được gọi là R-format Lệnh có khuôn dạng I-type Immediate hay còn được gọi là I-format được sử dụng

cho các lệnh tức thì và lệnh dùng để chuyển dữ liệu Khuôn dạng của lệnh I-format như sau:

Trường địa chỉ 16 bit s cho ph p một lệnh đọc từ nhớ bất k trong miền từ

215 hay 32.768 byte của địa chỉ trong thanh ghi cơ sở rs Tương tự như thế lệnh

addi cũng bị giới hạn h ng số không lớn hơn 215 R ràng chúng ta thấy r ng nếu một lệnh MIPS có độ dài hơn 32 bit s khó quản lý các trường khác hơn nữa Xem

x t lại v dụ sau:

lw $t0, 32($s3)

Ở đây 19 được hiểu cho s3 được đặt vào trường rs; 8 được hiểu cho t0 và đặt vào trường rt; giá trị 32 được đặt vào trường địa chỉ Nhận thấy r ng trường rt

Trang 22

bây giờ đã thay đổi vai trò trở thanh toán hạng đ ch nhận lấy kết quả của lệnh đọc ô nhớ Mặc dù nhiều định dạng cho các lệnh s gây khó khăn cho thiết kế phần cứng Tuy nhiên ta chỉ quan tâm đến các phần giống nhau thì có thể giảm thiểu đi sự phức tạp Để ý r ng, ba trường đầu tiên của cả hai khuôn dạng lệnh R-format và I-format đều có tên giống nhau và có cùng k ch cỡ Trường cuối cùng của I-format có độ dài

b ng 3 trường cuối của R-format

M i lệnh được phân biệt bởi giá trị của trường đầu tiên op để phần cứng nhận ra đây là lệnh thuộc R-type hay I-type

Bảng 1.5 Mã hóa lệnh MIPS

add immediate I 810 reg reg n.a n.a n.a constant lw(load word) I 3510 reg reg n.a n.a n.a address sw(store word) I 4310 reg reg n.a n.a n.a address

Trong bảng trên reg được hiểu là thanh ghi 0 đến thanh ghi 31; address

là 16 bit địa chỉ; n.a = not acceptable có nghĩa là không chấp nhận ở dạng lệnh tương ứng; để ý r ng lệnh add và lệnh sub có cùng giá trị ở trường op; thành

phần của phần cứng s căn cứ vào trường funct để quyết định xem đó là lệnh add

sw $t0, 1200($t1) # A[300] = h+A[300]

Lệnh MIPS trên được chuyển sang mã máy như sau:

Trang 23

Kế đến, lệnh add được gán giá trị là 0 ở trường op và giá trị ở trường funct là 32; ba thanh ghi toán hạng 18, 8 và 8 được gán cho các trường thứ hai, ba và bốn tương ứng với ba thanh ghi s2, t0 và t0

Cuối cùng, lệnh sw gán giá trị 43 ở trường op, phần còn lại tương tự như lệnh load

Nhóm lệnh đầu tiên có tên là shift; có tác dụng dịch chuyển các bit trong một

từ sang trái hoặc sang phải và điền các bit còn trống sau khi dịch chuyển bởi các bit

0 V dụ, nếu thanh ghi s0 chứa chu i bit:

Trang 24

Giả sử, ta có lệnh MIPS như sau:

sll $t2, $s0, 4 # thanh ghi $t2 = thanh ghi $s0 << 4 bit

Ngôn ngữ máy của lệnh MIPS trên được miêu tả như sau:

Lệnh sll được mã hóa giá trị 0 cho cả hai trường op và funct; rt chứa s0; rd chứa t2; shamt chứa giá trị 4 dịch trái 4 bit ; rs không dùng trong trường hợp này nên gán giá trị là 0

Ph p toán dịch trái số học logic có một điểm thuận tiện là, nếu ta dịch trái i bit s cho ta kết quả b ng ph p toán nhân cho 2i

Lấy v dụ kết quả ở trên s2 = 9 và tiến hành dịch trái 4 bit s được: 9x24

= 9x16 = 144

Một ph p toán khác cũng được liệt kê trong lệnh MIPS là ph p toán AN

AN là ph p toán bit-by-bit mà kết quả của nó s là 1 nếu bit ở hai toán hạng cùng

có giá trị là 1 V dụ: t2 có giá trị như sau:

(0000 0000 0000 0000 0000 1101 0000 0000)2

Thanh ghi t1 có giá trị là:

(0000 0000 0000 0000 0011 1100 0000 0000)2

Cho lệnh MIPS như sau:

and $t0, $t1, $t2 # thanh ghi $t0 = $t1 & $t2

Giá trị của thanh ghi t0 là:

Trang 25

nhà thiết kế phần cứng tập lệnh MIPS đã sử dụng lệnh NOR NOT OR thay vì sử dụng NOT Nếu một toán hạng là zero thì ph p toán tương đương NOT

V dụ: A NOR 0 = NOT (A OR 0) = NOT (A)

Nếu thanh ghi t1 có giá trị không đổi và thanh ghi t3 có giá trị là 0 thì lệnh MIPS:

nor $t0, $t1, $t3 # thanh ghi $t0 = ~($t1 | $t3)

Kết quả của thanh ghi t0 là:

(1111 1111 1111 1111 1100 0010 1111 1111)2

1 nh h tr r qu t ịnh

Điều làm cho một máy t nh đơn giản trở nên nổi bật đó ch nh là khả năng ra quyết định ựa trên dữ liệu đầu vào và giá trị được tạo ra trong quá trình t nh toán dẫn đến những hành động thực thi câu lệnh khác nhau Câu lệnh ra quyết định phổ

biến trong các ngôn ngữ lập trình là câu lệnh if, thỉnh thoảng kết hợp với lệnh goto

và nhảy đến nhãn Câu lệnh MIPS assembly bao gồm hai kiểu câu lệnh ra quyết

định tương tự như lệnh if và goto Câu lệnh đầu tiên là:

beq register1, register2, L1

Câu lệnh này có ý nghĩa: nhảy đến nhãn L1 nếu giá trị ở thanh ghi 1 register1 b ng

với giá trị ở thanh ghi 2 register2 Lệnh beq được hiểu là: branch if equal

Lệnh thứ hai là:

bne register1, register2, L1

Câu lệnh này có ý nghĩa: nhảy đến nhãn L1 nếu giá trị của register1 khác với

giá trị của register2 Câu lệnh bne được hiểu là: branch if not equal Cả hai câu lệnh trên được gọi là câu lệnh điều kiện r nhánh

V dụ: cho đoạn code sau với f, g, h, i, j là các biến Nếu năm biến từ f đến j tương ứng với các thanh ghi s0 - s4 Câu lệnh MIPS tương ứng cho câu lệnh:

if (i=j) f=g+h; else f=g+h;

Nửa bên trái tương ứng lệnh phần then của lệnh if và nửa bên phải tương ứng với phần else Đầu tiên biểu thức so sánh b ng được thực hiện, tương ứng với lệnh beq sau đó s thực hiện các trường hợp ph a sau Tuy nhiên đoạn code s trở nên

Trang 26

hiệu quả hơn nếu như ta thực hiện trường hợp ngược lại thức tức là kiểm tra dẫn đến điều kiện else trước tương ứng với lệnh bne

j Exit

Ph p gán trong trường hợp điều kiện else của lệnh if có thể thực hiện b ng một câu lệnh như bên dưới Tuy nhiên ta cần nối nhãn Else với lệnh này Chúng ta đưa nhãn Exit ra sau lệnh này

Else: sub $s0, $s1, $s2 – Exit:

Trang 27

Giả sử i và k tương ứng với hai thanh ghi s3 và s5, địa chỉ cơ sở của mảng save được lưu ở s6 Câu lệnh MIPS tương ứng:

ước đầu tiên, load save i vào thanh ghi tạm Trước khi làm việc này, chúng ta cần biết địa chỉ của mảng save Tuy nhiên, trước khi cộng i vào địa chỉ cơ

sở của save, chúng ta cần nhân địa chỉ index của i cho 4 để tương ứng với byte địa chỉ Thực tế, ta chỉ cân dịch trái logic 2 bit là được Chúng ta cũng cần phải có nhãn Loop để có thể quay về trước lệnh kết thúc:

Để kiểm tra điều kiện b ng và không b ng là câu lệnh phổ biến nhất của loại câu lệnh kiểm tra, tuy nhiên thỉnh thoảng ta s b t gặp sự cần thiết của việc so sánh hai biến với nhau Ở tập lệnh MIPS cung cấp một lệnh so sánh giá trị giữa hai thanh ghi và đặt giá trị của thanh ghi thứ ba là 1 nếu giá trị ở thanh ghi thứ nhất nhỏ hơn

giá trị thanh ghi thứ hai, ngược lại thì đặt b ng 0 Lệnh MIPS được gọi là set on less than hoặc slt

slt $t0, $s3, $s4

Trang 28

Nghĩa là, thanh ghi t0 được đặt lên 1 nếu giá trị ở thanh ghi s3 nhở hơn giá trị ở thanh ghi s4, ngược lại t0 được đặt b ng 0

Ph p toán so sánh với h ng số là phổ biến trong câu lệnh so sánh Vì thanh ghi zero luôn luôn b ng 0 nên ta có ph p so sánh với số 0 Còn nếu muốn so sánh

với số khác thì ta có lệnh set on less than immediate (slti) V dụ để kiểm tra giá trị

ở thanh ghi s2 có nhỏ hơn 10 hay không, ta sử dụng lệnh như sau:

nhảy đến địa chỉ tương ứng ảng địa chỉ nhảy ch nh là mảng một chiều mà m i phần tử tương ứng với nhãn nhảy trong chương trình Để h trợ cho thao tác nhảy

đến địa chỉ cần nhảy, MIPS cũng bao gồm lệnh jump register jr , nghĩa là nhảy

không điều kiện đến địa chỉ được ra ở thanh ghi Chương trình s đọc nội dung tương ứng từ bảng nhảy vào thanh ghi và sau đó nhảy đến địa chỉ tướng ứng sử dụng lệnh nhảy thanh ghi

Bảng 1.7 Tổng hợp kiến trúc của tập lệnh MIPS

Memory[4294967292]

Truy cập dữ liệu chỉ b ng lệnh chuyển

dữ liệu MIPS sử dụng byte địa chỉ để truy cập các byte địa chỉ của vùng nhớ

là bội số của 4

Trang 29

Ngôn ngữ MIPS assembly

Số học

add add $s1, $s2, $s3 $s1 = $s2 + $s3 subtract subb $s1, $s2, $s3 $s1 = $s2 - $s3 add immediate addi $s1, $s2, 100 $s1 = $s2 + 100 Chuyển

or immediate or $s1, $s2, 100 $s1 = $s2 | 100 shift left logical sll $s1, $s2, 10 $s1 = $s2 << 10 shift right logical srl $s1, $s2, 10 $s1 = $s2 >> 10

Trang 30

thủ tục và phần còn lại của chương trình và dữ liệu, cho ph p bỏ qua các giá trị và trả về kết quả

Để thực thi một thủ tục, chương trình phải thực hiện 6 bước sau:

1 Đặt các đối số vào những nơi mà thủ tục có thể truy cập được

2 Chuyển quyền kiểm soát cho thủ tục

3 Đòi hỏi các tài nguyên vùng nhớ cần thiết cho thủ tục

4 Thực hiện tác vụ mong muốn

5 Đặt giá trị của kết quả vào vùng mà chương trình có thể gọi và truy cập được

6 Trả quyền điều khiển về nơi b t đầu, vì một thủ tục có thể được gọi vài lần trong suốt chương trình

Như đã đề cập trước đó, thanh ghi ch nh là nới lưu trữ dữ liệu nhanh nhất trong máy t nh Vì thế, chúng ta muốn sử dụng chúng nhiều nhất đến mức có thể Lệnh MIPS h trợ nhiều thanh ghi 32 bit mà thủ tục có thể được gọi:

 a0 - a3: 4 thanh ghi dùng để truyển tham số

 v0 - v1: 2 thanh ghi lưu trữ giá trị trở về

 ra: 1 thanh ghi địa chỉ trở về để trở về thời điểm trước khi gọi thủ tục

Để cấp phát các thanh ghi này, ngôn ngữ MIPS assembly bao gồm một lệnh cho các thủ tục này: nhảy đến địa chỉ và đồng thời lưu trữ địa chỉ của lệnh kế tiếp

vào thanh ghi ra – lệnh jump – and – link (jal)

jal procedureAddress

Tên của link có nghĩa là một địa chỉ trỏ đến trạm gọi cho ph p thủ tục trả về địa chỉ Link này được lưu trữ ở thanh ghi ra và được gọi là địa chỉ trở về Địa chỉ trở về là cần thiết bởi vì cùng một thủ tục có thể được gọi nhiều lần trong cùng một chương trình Cũng cần hiểu một chương trình lưu trữ phải có một thanh ghi lưu giữ địa chỉ của lệnh hiện tại đang được thực thi Vì lý do lịch sử, thanh ghi này luôn được gọi là thanh đếm chương trình, viết t t là PC mặc dù cũng có nhiều tên gọi

khác nhau như thanh ghi địa chỉ lệnh Lệnh jal s lưu kết quả PC 4 trong thanh ghi

ra liên kết với lệnh kế tiếp để thiết lập địa chỉ trở về

Trang 31

Để h trợ cho tình huống này, máy t nh giống lệnh MIPS sử dụng một lệnh nhảy thanh ghi jr , nghĩa là nhảy không điều kiện đến địa chỉ phân biệt trong thanh

ghi jr $ra

Lệnh nhảy thanh ghi s nhảy đến địa chỉ được lưu trữ trong thanh ghi $ra Vì thế khi gọi chương trình các đối số được đặt trong các thanh ghi $a0 - $a3 và sử dụng lệnh jal X để nhảy đến thủ tục X Sau khi thực thi xong đoạn thủ tục, giá trị trở

về được lưu trữ ở thanh ghi $v0 - $v1 và trả quyền kiểm soát cho chương trình gọi

sử dụng lệnh jr $ra

Giả sử một trình biên dịch cần sử dụng nhiều hơn 4 thanh ghi để truyền các đối số trong một thủ tục và nhiều hơn 2 giá trị trở về, do đó chúng ta cần nghĩ ngay đến vùng nhớ tưởng của cấu trúc dữ liệu làm tràn thanh ghi là stack – một hàng

đợi vào sau ra trước last in first out Một stack cần đến một con trỏ để cấp phát

hầu hết các địa chỉ trong stack, chỉ ra đâu là nơi các thanh ghi của thủ tục được đặt, đâu là nơi thanh ghi bị tràn, giá trị của thanh ghi cũ được tìm thấy ở đâu Con trỏ

ngăn xếp stack pointer tham chiếu một từ cho m i thanh ghi có thể được lưu trữ

và phục hồi Để đưa dữ liệu vào stack người ta gọi là push và để lấy dữ liệu ra khỏi stack người ta gọi là pop Ngôn ngữ MIPS cấp phát tiếp các thanh ghi có liên quan đến stack: stack pointer ($sp) dùng để lưu trữ các thanh ghi cần thiết cho các giá trị

của thủ tục đang được thi hành Theo lịch sử, stack tăng dần theo thứ tự địa chỉ từ cao đến thấp Điều này có nghĩa là khi đưa giá trị vào stack b ng cách trừ đi giá trị của stack pointer Ngược lại, khi cộng thêm giá trị vào stack pointer s là thao tác lấy phần tử ra khỏi stack

V dụ, cho đoạn chương trình C như sau:

int leaf_example (int g, int h, int i, int j)

Trang 32

Câu lệnh MIPS cho đoạn code trên như sau:

Đầu tiên, biến tham số g, h, i và j tương ứng với các thanh ghi đối số a0 -

a3 f tương ứng với s0 Trình biên dịch b t đầu với nhãn leaf của thủ tục

leaf_example:

ước kế tiếp là lưu lại thanh ghi được dùng bởi thủ tục, ph p gán trong đoạn chương trình trên buộc chúng ta sử dụng đến 2 thanh ghi tạm o đó, ta cần sử dụng đến 3 thanh ghi cho đoạn thân của thủ tục trên: t0 g h , t1 i j và s0 f Chúng

ta phải đưa giá trị cũ vào stack b ng cách tạo ra không gan vùng nhớ cho 3 từ trên stack và lưu trữ các giá trị đó

add $t0, $a0, $a1 # $t0 = g+h

add $t1, $a2, $a3 # $t1 = i + j

subb $s0, $t0, $t1 # f = $t0 - $t1, hay f = (g+h)- (i+j)

Để trả về giá trị của f, chúng ta copy giá trị kết quả vào thanh ghi lưu giá trị trở về

Trang 33

add $v0, $s0, $zero

Trước khi quay trở về chúng ta cần khôi phục lại 3 giá trị cũ của thanh ghi

mà chúng ta đã lưu trước đó b ng cách pop ra khỏi stack

 t0 - t9: 10 thanh ghi tạm không được bảo tồn bởi thủ tục được gọi

 s0 - s7: 8 thanh ghi lưu trữ phải được bảo tồn trong lời gọi thủ tục

Một quy t c tuy đơn giản nhưng giúp hạn chế tối đa việc tràn các thanh ghi Trong v dụ trên vì t0 và t1 không cần phải bảo tồn sau khi kết thúc thủ tục nên chúng ta có thể vứt bỏ 2 đi 2 lệnh lưu và đọc trong đoạn code trên Chúng ta chỉ giữ lại s0 với giả sử chương trình gọi cần sử dụng đến giá trị này

Các thủ tục không gọi đến các thủ tục khác thì được gọi là leaf procedure

như trên, tuy nhiên thực tế không có nhiều thủ tục giống như thế Các thủ tục đệ quy thậm ch còn gọi đến chỉnh bản thân thủ tục đó nhiều lần nữa nên vấn đề sử dụng thanh ghi trong các thủ tục cần hết sức c n thận V dụ, giả sử r ng chương trình

ch nh gọi đến các thủ tục A với đối số là 3 b ng cách đặt giá trị h ng số 3 vào thanh ghi a0 và sau đó sử dụng lệnh jal A Giả sử tiếp theo thủ tục A gọi đến thủ tục thông qua lệnh jal với một đối số có giá trị là 7 được đặt vào thanh ghi a0 Vì thế

A không bao giờ kết thúc tác vụ này, có một sự xung đột sảy ra khi sử dụng thanh ghi a0 Tương tự như vậy cũng sảy ra sự xung đột với thanh ghi địa chỉ trở về ra bởi vì địa chỉ trở về đã được tra cho thủ tục

Trang 34

Một giải pháp được đưa ra là đặt tất cả các thanh ghi khác phải được bảo toàn vào trong stack như chúng ta làm với các thanh ghi lưu trữ Chương trình gọi thủ tục đặt các thanh ghi đối số a0 - a3 hoặc các thanh ghi tạm t0 - t9 vào stack sau lời gọi Thanh ghi địa chỉ trở về ra và các thanh ghi lưu trữ s0 - s7 được sử dụng trong thủ tục được gọi cũng được đảy vào trong stack Con trỏ stack stack pointer đêm số thanh ghi được lưu trữ trong stack

V dụ cho đoạn chương trình sau:

int fact (int n)

{ if (n>1) return(1);

else return (n*fact(n-1)); }

Đoạn chương trình trên được biên dịch sang câu lệnh MIPS như sau:

Ta có, biến tham số n tương ứng với thanh ghi tham số a0 Trình biên dịch

b t đầu với nhãn của thủ tục và sau đó lưu hai thanh ghi này vào trong stack: địa chỉ trở về và a0

slti $t0, $a0,1 beq $t0, $zero, L1 Nếu n < 1, fact s trả về giá trị là 1 b ng cách đặt 1 vào thanh ghi giá trị: nó

s cộng giá trị 1 cho 0 và lưu vào thanh ghi tổng v0 Sau đó lấy 2 giá trị đã lưu trữ

ra khỏi stack và nhảy đến địa chỉ trở về:

addi $v0, $zero, 1 # return 1 addi $sp, $sp, 8

Trang 35

jr $ra Trước khi lấy 2 giá trị ra khỏi stack, chúng ta phải load các item này ra khỏi

stack, chúng ta chỉ load a0 và ra Vì a0 và ra không đổi khi n <1 nên chúng ta

bỏ qua Nếu n không nhỏ hơn 1, đối số n được giảm xuống và sau đó fact được gọi trở lại với đối số giảm đi đó

L1: addi $a0, $a0, -1 -1

Thanh ghi lưu trữ: s0 - $s7 Thanh ghi tạm: t0 - $t9

Thanh ghi con trỏ stack: sp Thanh ghi đối số: a0 - $a3

Thanh ghi địa chỉ trở về: ra Thanh ghi giá trị trả về: v0 - $v1

Con trỏ đỉnh của stack Con trỏ đáy của stack

Bảng 1.9 Quy ước thanh ghi MIPS

$v0 - $v1 2-3 Giá trị cho kết quả biểu thức Không

Trang 36

$a0 - $a3 4-7 Tham số Không

Trang 37

or immediate or $s1, $s2, 100 $s1 = $s2 | 100 shift left logical sll $s1, $s2, 10 $s1 = $s2 << 10 shift right logical srl $s1, $s2, 10 $s1 = $s2 >> 10

Điều kiện

r nhánh

branch on equal beq $s1, $s2, L if ($s1 == $s2) goto L branch on not equal bne $s1, $s2, L if ($s1 != $s2) goto L set on less than

Nhảy không

điều kiện

Trang 38

j J 2 2500 j 10000

Field size 6bit 5bit 5bit 5bit 5bit 6bit Tất cả lệnh 32bit

R-format R op rs rt rd shamt funct Lệnh số học

I-format I op rs rt address Chuyển dữ liệu và r

nhánh

1.8 Liên k t v i th gi i

Máy t nh ban đầu được sử dụng với mục đ ch xử lý các ph p toán nhưng ngay khi được thương mại hóa chúng được sử dụng rộng rãi cho mục đ ch xử lý văn bản Hầu hết các máy t nh ngày nay đều sử dụng byte 8 bit để mã hóa ký tự ASCII Một tập các lệnh có thể tr ch một byte từ một word để load và store một word là một cách làm hiệu quả để chuyển một byte thành một word như một số chương trình vẫn làm MIPS h trợ lệnh load byte lb để đọc một byte từ vùng nhớ

b ng cách đặt vào 8 bit phải cùng của thanh ghi Lệnh store byte sb để đọc một byte 8 bit phải nhất của thanh ghi và viết chúng vào vùng nhớ Vì thế chúng ta copy một byte theo trình tự sau:

lb $t0, 0($sp)

sb $t0, 0($sp)

Các ký tự liên kết với nhau tạo thành một chu i – số ký tự, ta có 3 cách lựa chọn để biểu di n một chu i: 1 vị tr đầu tiên của chu i được dành để cho biết chiều dài của chu i, 2 một biến đi cùng để biết chiều dài của chu i, 3 vị tr cuối cùng của chu i s có một ký tự đi k m để báo kết thúc chu i Ngôn ngữ lập trình C

sử dụng cách thứ 3 với việc sử dụng giá trị 0 null để báo kết thúc chu i V dụ cho chu i Cal trong C được biểu di n: 67, 97, 108, 0

Trang 39

Để ý r ng các ký tự hoa và thường cách nhau bởi 32 vị tr và cách này giúp

chúng ta cách chuyển từ ký tự hoa – thường và ngược lại Có một số giá trị không được thể hiện trong bảng mã ASCII này như 8- backspace, 9- tab character, 13- return, 0- null sử dụng trong C,…

Ngược lại với C, trong Java các ký tư và chu i sử dụng bảng mã Unicode Universal Encoding để mã hóa hầu hết các ký tự của các quốc gia trên thế giới Mặc định Java sử dụng 16 bit để mã hóa mã Unicode này MIPS h trợ tập lệnh để thực hiện đọc 16 bit từ word, gọi là halfword lh dùng để đọc một nửa từ ở vùng nhớ và lưu vào 16 bit phải nhất của thanh ghi Lệnh store half sh dùng để đọc nửa

từ phải nhất của thanh ghi và lưu vào vùng nhớ Chúng ta copy nửa từ theo các câu lệnh sau:

lh $t0, 0($sp)

sh $t0, 0($sp)

Unicode version 4 có 160 khối thể hiện tên của các bộ ký tự V dụ, mã Greek b t đầu ở 0370hex, Cryllic b t đầu ở 0400hex, 3 cột đầu tiên chỉ ra 48 block thể hiện ngôn ngữ và số học của con người, cột cuối cùng sử dụng cho các ký hiệu Mặc định bộ mã hóa ký tự 16 bit được gọi là UTF-16 UTF-8 thể hiện các ký tự trong bảng mã ASCII, UTF-32 dùng 32 bit cho việc mã hóa một ký tự Tìm hiểu thêm ở www.unicode.org

Ngày đăng: 25/07/2017, 21:53

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. David A. Patterson, John I. Hennesy (2005), Computer Organization and Design, The Hardware/Software Interface, Morgan Kaufmann, San Francisco Sách, tạp chí
Tiêu đề: Morgan Kaufmann
Tác giả: David A. Patterson, John I. Hennesy
Năm: 2005
2. Douglas L. Perry (2002), VHDL Programming by Example, McGraw-Hill, NewYork Sách, tạp chí
Tiêu đề: VHDL Programming by Example
Tác giả: Douglas L. Perry
Nhà XB: McGraw-Hill
Năm: 2002
3. Volnei A. Pedroni (2004), Circuit Design with VHDL, MIT Press, Massachusetts Sách, tạp chí
Tiêu đề: MIT Press
Tác giả: Volnei A. Pedroni
Năm: 2004
4. J. O. Hamblen, T. S. Hall, M. D. Furman (2008), Rapid Protyping of Digital Systems, Springer, New York Sách, tạp chí
Tiêu đề: Springer
Tác giả: J. O. Hamblen, T. S. Hall, M. D. Furman
Năm: 2008
5. David Money Harris, Sarah L. Haris (2008), Digital Design and Computer Ảchitecture, Morgan Kaufmann, San Francisco Sách, tạp chí
Tiêu đề: Morgan Kaufmann
Tác giả: David Money Harris, Sarah L. Haris
Năm: 2008

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w