Giáo trình Kiến trúc máy tính - Chương 4: Kiến trúc tập lệnh - Nguyễn Kim Khánh

pdf 105 trang huongle 3600
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Kiến trúc máy tính - Chương 4: Kiến trúc tập lệnh - Nguyễn Kim Khánh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_kien_truc_may_tinh_chuong_4_kien_truc_tap_lenh_ng.pdf

Nội dung text: Giáo trình Kiến trúc máy tính - Chương 4: Kiến trúc tập lệnh - Nguyễn Kim Khánh

  1. NKK-HUT Kiến trúc máy tính Chương 4 KIẾN TRÚC TẬP LỆNH (Instruction Set Architecture) Nguyễn Kim Khánh Trường Đại học Bách khoa Hà Nội IT3030 1
  2. NKK-HUT Nội dung học phần n Chương 1. Giới thiệu chung n Chương 2. Cơ bản về logic số n Chương 3. Hệ thống máy tính n Chương 4. Kiến trúc tập lệnh n Chương 5. Số học máy tính n Chương 6. Bộ xử lý n Chương 7. Bộ nhớ n Chương 8. Vào-ra n Chương 9. Kiến trúc máy tính tiên tiến n24 July 2011 IT3030 2
  3. NKK-HUT Nội dung của chương 4 4.1. Giới thiệu chung kiến trúc tập lệnh 4.2. Các kiểu thao tác 4.3. Các phương pháp định địa chỉ 4.4. Kiến trúc tập lệnh MIPS 4.5. Kiến trúc tập lệnh Intel x86 IT3030 3
  4. NKK-HUT 4.1. Giới thiệu chung về kiến trúc tập lệnh Mô hình lập trình của máy tính IT3030 4
  5. NKK-HUT Tập thanh ghi n Chức năng và đặc điểm: n Chứa các thông tin tạm thời phục vụ cho hoạt động ở thời điểm hiện tại của CPU n Được coi là mức đầu tiên của hệ thống nhớ n Số lượng thanh ghi nhiều à tăng hiệu năng của CPU n Có hai loại thanh ghi: n Các thanh ghi lập trình được n Các thanh ghi không lập trình được IT3030 5
  6. NKK-HUT Phân loại thanh ghi theo chức năng n Thanh ghi địa chỉ: quản lý địa chỉ của ngăn nhớ hay cổng vào-ra. n Thanh ghi dữ liệu: chứa tạm thời các dữ liệu. n Thanh ghi đa năng: có thể chứa địa chỉ hoặc dữ liệu. n Thanh ghi điều khiển/trạng thái: chứa các thông tin điều khiển và trạng thái của CPU. n Thanh ghi lệnh: chứa lệnh đang được thực hiện. IT3030 6
  7. NKK-HUT Một số thanh ghi điển hình n Các thanh ghi địa chỉ n Bộ đếm chương trình PC (Program Counter) n Con trỏ dữ liệu DP (Data Pointer) n Con trỏ ngăn xếp SP (Stack Pointer) n Thanh ghi cơ sở và Thanh ghi chỉ số (Base Register & Index Register) n Các thanh ghi dữ liệu n Thanh ghi trạng thái IT3030 7
  8. NKK-HUT Bộ đếm chương trình PC n Còn được gọi là con trỏ lệnh IP (Instruction Pointer) n Giữ địa chỉ của lệnh tiếp theo sẽ được nhận vào. n Sau khi một lệnh được nhận vào, nội dung PC tự động tăng để trỏ sang lệnh kế tiếp. IT3030 8
  9. NKK-HUT Thanh ghi con trỏ dữ liệu n Chứa địa chỉ của ngăn nhớ dữ liệu mà CPU muốn truy nhập n Thường có một số thanh ghi con trỏ dữ liệu IT3030 9
  10. NKK-HUT Ngăn xếp (Stack) n Ngăn xếp là vùng nhớ có cấu trúc LIFO (Last In - First Out) n Ngăn xếp thường dùng để phục vụ cho chương trình con n Đáy ngăn xếp là một ngăn nhớ xác định n Đỉnh ngăn xếp là thông tin nằm ở vị trí trên cùng trong ngăn xếp n Đỉnh ngăn xếp có thể bị thay đổi IT3030 10
  11. NKK-HUT Con trỏ ngăn xếp SP (Stack Pointer) n Chứa địa chỉ của ngăn nhớ đỉnh ngăn xếp n Khi cất một thông tin vào ngăn xếp: n Nội dung của SP giảm n Thông tin được cất vào ngăn nhớ được trỏ bởi SP n Khi lấy một thông tin ra khỏi ngăn xếp: n Thông tin được đọc từ ngăn nhớ được trỏ bởi SP n Nội dung của SP tăng n Khi ngăn xếp rỗng, SP trỏ vào đáy IT3030 11
  12. NKK-HUT Thanh ghi cơ sở và thanh ghi chỉ số n Thanh ghi cơ sở: chứa địa chỉ của ngăn nhớ cơ sở (địa chỉ cơ sở) n Thanh ghi chỉ số: chứa độ lệch địa chỉ giữa ngăn nhớ mà CPU cần truy nhập so với ngăn nhớ cơ sở (chỉ số) n Địa chỉ của ngăn nhớ cần truy nhập = địa chỉ cơ sở + chỉ số 24 July 2011 IT3030 12
  13. NKK-HUT Các thanh ghi dữ liệu n Chứa các dữ liệu tạm thời hoặc các kết quả trung gian n Cần có nhiều thanh ghi dữ liệu n Các thanh ghi số nguyên: 8, 16, 32, 64 bit n Các thanh ghi số dấu phẩy động IT3030 13
  14. NKK-HUT Thanh ghi trạng thái (Status Register) n Còn gọi là thanh ghi cờ (Flag Register) n Chứa các thông tin trạng thái của CPU n Các cờ phép toán: báo hiệu trạng thái của kết quả phép toán n Các cờ điều khiển: biểu thị trạng thái điều khiển của CPU IT3030 14
  15. NKK-HUT Ví dụ cờ phép toán n Cờ Zero (cờ rỗng): được thiết lập lên 1 khi kết quả của phép toán bằng 0. n Cờ Sign (cờ dấu): được thiết lập lên 1 khi kết quả phép toán nhỏ hơn 0 n Cờ Carry (cờ nhớ): được thiết lập lên 1 nếu phép toán có nhớ ra ngoài bit cao nhất à cờ báo tràn với số không dấu. n Cờ Overflow (cờ tràn): được thiết lập lên 1 nếu cộng hai số nguyên cùng dấu mà kết quả có dấu ngược lại à cờ báo tràn với số có dấu . IT3030 15
  16. NKK-HUT Ví dụ cờ điều khiển n Cờ Interrupt (Cờ cho phép ngắt): n Nếu IF = 1 à CPU ở trạng thái cho phép ngắt với tín hiệu yêu cầu ngắt từ bên ngoài gửi tới n Nếu IF = 0 à CPU ở trạng thái cấm ngắt với tín hiệu yêu cầu ngắt từ bên ngoài gửi tới IT3030 16
  17. NKK-HUT Thứ tự lưu trữ các byte trong bộ nhớ chính n Bộ nhớ chính thường đánh địa chỉ theo byte n Hai cách lưu trữ thông tin nhiều byte: n Đầu nhỏ (Little-endian): Byte có ý nghĩa thấp được lưu trữ ở ngăn nhớ có địa chỉ nhỏ, byte có ý nghĩa cao được lưu trữ ở ngăn nhớ có địa chỉ lớn. n Đầu to (Big-endian): Byte có ý nghĩa cao được lưu trữ ở ngăn nhớ có địa chỉ nhỏ, byte có ý nghĩa thấp được lưu trữ ở ngăn nhớ có địa chỉ lớn. IT3030 17
  18. NKK-HUT Ví dụ lưu trữ dữ liệu 32-bit 0001 1010 0010 1011 0011 1100 0100 1101 24 July 2011 IT3030 18
  19. NKK-HUT Lưu trữ của các bộ xử lý điển hình n Intel 80x86 và các Pentium: little-endian n Motorola 680x0, MIPS, SunSPARC: big-endian n Power PC, Itanium: bi-endian 24 July 2011 IT3030 19
  20. NKK-HUT Giới thiệu chung về tập lệnh n Mỗi bộ xử lý có một tập lệnh xác định n Tập lệnh thường có hàng chục đến hàng trăm lệnh n Mỗi lệnh là một chuỗi số nhị phân mà bộ xử lý hiểu được để thực hiện một thao tác xác định. n Các lệnh được mô tả bằng các ký hiệu gợi nhớ dạng text à chính là các lệnh của hợp ngữ IT3030 20
  21. NKK-HUT Các thành phần của lệnh máy n Mã thao tác (operation code à opcode): mã hóa cho thao tác mà bộ xử lý phải thực hiện n Địa chỉ toán hạng: chỉ ra nơi chứa các toán hạng mà thao tác sẽ tác động n Toán hạng nguồn: dữ liệu vào của thao tác n Toán hạng đích: dữ liệu ra của thao tác 24 July 2011 IT3030 21
  22. NKK-HUT Số lượng địa chỉ toán hạng trong lệnh (1) n Ba địa chỉ toán hạng: n 2 toán hạng nguồn, 1 toán hạng đích n c = a + b n Từ lệnh dài vì phải mã hoá địa chỉ cho cả ba toán hạng n Được sử dụng trên các bộ xử lý tiên tiến IT3030 22
  23. NKK-HUT Số lượng địa chỉ toán hạng trong lệnh (2) n Hai địa chỉ toán hạng: n Một toán hạng vừa là toán hạng nguồn vừa là toán hạng đích; toán hạng còn lại là toán hạng nguồn n a = a + b n Giá trị cũ của 1 toán hạng nguồn bị mất vì phải chứa kết quả n Rút gọn độ dài từ lệnh n Phổ biến IT3030 23
  24. NKK-HUT Số lượng địa chỉ toán hạng trong lệnh (3) n Một địa chỉ toán hạng: n Một toán hạng được chỉ ra trong lệnh n Một toán hạng là ngầm định à thường là thanh ghi (thanh chứa –accumulator) n Được sử dụng trên các máy ở các thế hệ trước IT3030 24
  25. NKK-HUT Số lượng địa chỉ toán hạng trong lệnh (4) n 0 địa chỉ toán hạng: n Các toán hạng đều được ngầm định n Sử dụng Stack n Ví dụ: push a push b add pop c có nghĩa là : c = a+b n không thông dụng IT3030 25
  26. NKK-HUT Máy tính với tập lệnh thu gọn: RISC n CISC và RISC n CISCàComplex Instruction Set Computer: n Máy tính với tập lệnh phức tạp n Các bộ xử lý truyền thống: Intel x86, Motorola 680x0 n RISCàReduced Instruction Set Computer: n Máy tính với tập lệnh thu gọn n SunSPARC, Power PC, MIPS, ARM n RISC đối nghịch với CISC IT3030 26
  27. NKK-HUT Các đặc trưng của RISC n Số lượng lệnh ít n Hầu hết các lệnh truy nhập toán hạng ở các thanh ghi n Truy nhập bộ nhớ bằng các lệnh LOAD/STORE n Thời gian thực hiện lệnh là một chu kỳ máy n Các lệnh có độ dài cố định (32 bit) n Số lượng khuôn dạng lệnh ít (<=4) n CPU có tập thanh ghi lớn n Có ít phương pháp định địa chỉ toán hạng(<=4) n Hỗ trợ các thao tác của ngôn ngữ bậc cao IT3030 27
  28. NKK-HUT 4.2. Các kiểu thao tác của lệnh n Chuyển dữ liệu n Xử lý số học n Xử lý logic n Điều khiển vào-ra n Chuyển điều khiển (rẽ nhánh) n Điều khiển hệ thống IT3030 28
  29. NKK-HUT Các lệnh chuyển dữ liệu n MOVE Copy dữ liệu từ nguồn đến đích n LOAD Nạp dữ liệu từ bộ nhớ đến bộ xử lý n STORE Cất dữ liệu từ bộ xử lý đến bộ nhớ n EXCHANGE Trao đổi nội dung của nguồn và đích n CLEAR Chuyển các bit 0 vào toán hạng đích n SET Chuyển các bit 1 vào toán hạng đích n PUSH Cất nội dung toán hạng nguồn vào ngăn xếp n POP Lấy nội dung đỉnh ngăn xếp đưa đến toán hạng đích IT3030 29
  30. NKK-HUT Các lệnh số học n ADD Cộng hai toán hạng n SUBTRACT Trừ hai toán hạng n MULTIPLY Nhân hai toán hạng n DIVIDE Chia hai toán hạng n NEGATE Đổi dấu toán hạng (lấy bù 2) n INCREMENT Tăng toán hạng thêm 1 n DECREMENT Giảm toán hạng đi 1 n COMPARE Trừ hai toán hạng để lập cờ IT3030 30
  31. NKK-HUT Các lệnh logic n AND Thực hiện phép AND hai toán hạng n OR Thực hiện phép OR hai toán hạng n XOR Thực hiện phép XOR hai toán hạng n NOT Đảo bit của toán hạng (lấy bù 1) n TEST Thực hiện phép AND hai toán hạng để lập cờ n SHIFT Lệnh dịch bit n ROTATE Lệnh quay bit IT3030 31
  32. NKK-HUT Minh hoạ các lệnh AND, OR, XOR n Giả sử có hai thanh ghi chứa dữ liệu như sau: (R1) = 1010 1010 (R2) = 0000 1111 n R1 ß (R1) AND (R2) = 0000 1010 Phép toán AND dùng để xoá một số bit và giữ nguyên một số bit còn lại của toán hạng. n R1 ß (R1) OR (R2) = 1010 1111 Phép toán OR dùng để thiết lập một số bit và giữ nguyên một số bit còn lại của toán hạng. n R1 ß (R1) XOR (R2) = 1010 0101 Phép toán XOR dùng để đảo một số bit và giữ nguyên một số bit còn lại của toán hạng. IT3030 32
  33. NKK-HUT Các lệnh SHIFT và ROTATE IT3030 33
  34. NKK-HUT Các lệnh vào ra chuyên dụng n INPUT Copy dữ liệu từ một cổng xác định đến toán hạng đích n OUTPUT Copy dữ liệu từ toán hạng nguồn đến một cổng xác định IT3030 34
  35. NKK-HUT Các lệnh chuyển điều khiển n JUMP (BRANCH) Lệnh nhảy không điều kiện n JUMP CONDITIONAL Lệnh nhảy có điều kiện n CALL Lệnh gọi chương trình con n RETURN Lệnh trở về từ chương trình con: IT3030 35
  36. NKK-HUT Lệnh rẽ nhánh không điều kiện n Chuyển tới thực hiện lệnh ở vị trí có địa chỉ XXX: PC ß XXX IT3030 36
  37. NKK-HUT Lệnh rẽ nhánh có điều kiện n Trong lệnh có kèm theo điều kiện n Kiểm tra điều kiện trong lệnh: n Nếu điều kiện đúng à chuyển tới thực hiện lệnh ở vị trí có địa chỉ XXX PC ß XXX n Nếu điều kiện sai à chuyển sang thực hiện lệnh_kế_tiếp n Điều kiện thường được kiểm tra thông qua các cờ n Có nhiều lệnh rẽ nhánh có điều kiện IT3030 37
  38. NKK-HUT Lệnh CALL và RETURN n Lệnh gọi chương trình con: lệnh CALL n Cất nội dung PC (chứa địa chỉ của lệnh_kế_tiếp) ra Stack n Nạp vào PC địa chỉ của lệnh đầu tiên của chương trình con được gọi à Bộ xử lý được chuyển sang thực hiện chương trình con tương ứng n Lệnh trở về từ chương trình con: lệnh RETURN n Lấy địa chỉ của lệnh_kế_tiếp được cất ở Stack nạp trả lại cho PC à Bộ xử lý được điều khiển quay trở về thực hiện tiếp lệnh nằm sau lệnh CALL IT3030 38
  39. NKK-HUT Gọi các thủ tục lồng nhau IT3030 39
  40. NKK-HUT Các lệnh điều khiển hệ thống n HALT Dừng thực hiện chương trình n WAIT Tạm dừng thực hiện chương trình, lặp kiểm tra điều kiện cho đến khi thoả mãn thì tiếp tục thực hiện n NO OPERATION Không thực hiện gì cả n LOCK Cấm không cho xin chuyển nhượng bus n UNLOCK Cho phép xin chuyển nhượng bus IT3030 40
  41. NKK-HUT 4.3. Các phương pháp định địa chỉ toán hạng Khái niệm về định địa chỉ (addressing) n Toán hạng của lệnh có thể là: n Một giá trị cụ thể nằm ngay trong lệnh n Nội dung của thanh ghi n Nội dung của ngăn nhớ hoặc cổng vào-ra n Phương pháp định địa chỉ (addressing modes) là cách thức địa chỉ hóa trong trường địa chỉ của lệnh để xác định nơi chứa toán hạng IT3030 41
  42. NKK-HUT Các phương pháp định địa chỉ thông dụng n Định địa chỉ tức thì n Định địa chỉ thanh ghi n Định địa chỉ trực tiếp n Định địa chỉ gián tiếp qua thanh ghi n Định địa chỉ gián tiếp qua ngăn nhớ n Định địa chỉ dịch chuyển IT3030 42
  43. NKK-HUT Định địa chỉ tức thì n Toán hạng nằm ngay trong Trường địa chỉ của lệnh n Chỉ có thể là toán hạng nguồn n Ví dụ: ADD R1, 5 ; R1ß R1+5 n Không tham chiếu bộ nhớ n Truy nhập toán hạng rất nhanh n Dải giá trị của toán hạng bị hạn chế IT3030 43
  44. NKK-HUT Định địa chỉ thanh ghi n Toán hạng được chứa trong thanh ghi có tên trong Trường địa chỉ n Ví dụ: ADD R1, R2 ; R1ß R1+R2 n Số lượng thanh ghi ít à Trường địa chỉ chỉ cần ít bit n Không tham chiếu bộ nhớ n Truy nhập toán hạng nhanh n Tăng số lượng thanh ghi à hiệu quả hơn IT3030 44
  45. NKK-HUT Định địa chỉ trực tiếp n Toán hạng là ngăn nhớ có địa chỉ được chỉ ra trực tiếp trong Trường địa chỉ của lệnh n Ví dụ: ADD R1, A ;R1 ß R1 + (A) n Cộng nội dung thanh ghi R1 với nội dung của ngăn nhớ có địa chỉ là A n Tìm toán hạng trong bộ nhớ ở địa chỉ A n CPU tham chiếu bộ nhớ một lần để truy nhập dữ liệu IT3030 45
  46. NKK-HUT Định địa chỉ gián tiếp qua thanh ghi n Toán hạng là ngăn nhớ có địa chỉ nằm trong thanh ghi n Trường địa chỉ cho biết tên thanh ghi đó n Thanh ghi có thể là ngầm định n Thanh ghi này được gọi là thanh ghi con trỏ n Vùng nhớ có thể được tham chiếu là lớn (2n), (với n là độ dài của thanh ghi) IT3030 46
  47. NKK-HUT Định địa chỉ gián tiếp qua ngăn nhớ n Ngăn nhớ được trỏ bởi Trường địa chỉ của lệnh chứa địa chỉ của toán hạng n Có thể gián tiếp nhiều lần n Giống như khái niệm biến con trỏ và biến động trong lập trình n CPU phải thực hiện tham chiếu bộ nhớ nhiều lần để tìm toán hạng à chậm n Vùng nhớ có thể được tham chiếu là lớn IT3030 47
  48. NKK-HUT Định địa chỉ dịch chuyển n Để xác định toán hạng, Trường địa chỉ chứa hai thành phần: n Tên thanh ghi n Hằng số n Địa chỉ của toán hạng = nội dung thanh ghi + hằng số n Thanh ghi có thể được ngầm định IT3030 48
  49. NKK-HUT Các dạng của định địa chỉ dịch chuyển n Địa chỉ hoá tương đối với PC n Thanh ghi là Bộ đếm chương trình PC n Toán hạng có địa chỉ cách ngăn nhớ được trỏ bởi PC một độ lệch xác định n Định địa chỉ cơ sở n Thanh ghi chứa địa chỉ cơ sở n Hằng số là chỉ số n Định địa chỉ chỉ số n Hằng số là địa chỉ cơ sở n Thanh ghi chứa chỉ số IT3030 49
  50. NKK-HUT 4.4. Kiến trúc tập lệnh MIPS n Giới thiệu kiến trúc MIPS n Tập thanh ghi n Các khuôn dạng lệnh n Các chế độ địa chỉ n Một số lệnh cơ bản n Lập trình hợp ngữ sử dụng tập lệnh MIPS IT3030 50
  51. NKK-HUT MIPS n MIPS- Microprocessor without Interlocked Pipeline Stages n Sở hữu bởi MIPS Technologies (www.mips.com) n Được sử dụng rộng rãi trong các thiết bị điện tử dân dụng, các thiết bị mạng, camera, máy in IT3030 51
  52. NKK-HUT Các thanh ghi của MIPS
  53. NKK-HUT Các khuôn dạng lệnh MIPS op rs rt rd sh fn 31 25 20 15 10 5 0 R 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Opcode Source Source Destination Shift Opcode register 1 register 2 register amount extension op rs rt operand / offset 31 25 20 15 0 I 6 bits 5 bits 5 bits 16 bits Opcode Source Destination Immediate operand or base or data or address offset op jump target address 31 25 0 J 6 bits 1 0 0 0 0 0 0 0 0 0 0 0 260 bits0 0 0 0 0 0 0 1 1 1 1 0 1 Opcode Memory word address (byte address divided by 4) IT3030 Slide 53
  54. NKK-HUT MIPS R-format Instructions op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits n Các thành phần của lệnh n op: mã thao tác n rs: thanh ghi nguồn thứ nhất n rt: thanh ghi nguồn thứ hai n rd: thanh ghi đích n shamt: dự trữ (mặc định hiện nay là 00000) n funct: mã chức năng (extends opcode) IT3030 54
  55. NKK-HUT Ví dụ lệnh R-format op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits add $t0, $s1, $s2 special $s1 $s2 $t0 0 add 0 17 18 8 0 32 000000 10001 10010 01000 00000 100000 0000 0010 0011 0010 0100 0000 0010 00002 = 0232402016 IT3030 55
  56. NKK-HUT Phân tích khuôn dạng lệnh R-format
  57. NKK-HUT MIPS I-format Instructions op rs rt constant or address 6 bits 5 bits 5 bits 16 bits n Các phép toán tức thì và các lệnh load/store n rt,rs: thanh ghi toán hạng đích hoặc thanh ghi nguồn 15 15 n Hằng số: –2 to +2 – 1 n Địa chỉ: địa chỉ độ lệch so với địa chỉ cơ sở IT3030 57
  58. NKK-HUT Load and Store Instructions op rs rt operand / offset 31 25 20 15 0 I 1 0 x 0 1 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 lw = 35 Base Data Offset relative to base sw = 43 register register lw $t0,40($s3) Note on base and offset: Memory lw $t0,A($s3) The memory address is the sum of (rs) and an immediate value. Address in Calling one of these the base A[0] base register A[1] and the other the offset is quite A[2] arbitrary. It would make perfect sense to interpret the address . as having the base . Offset = 4i A($s3) A . and the offset ($s3). However, a 16-bit base confines us to a A[i] Element i of array A small portion of memory space. MIPS lw and sw instructions and their memory addressing convention that allows for simple access to array elements via a base address and an offset (offset = 4i leads us to the i th word). IT3030 58
  59. NKK-HUT lui Instructions lui $s0, 61 # The immediate value 61 is # loaded in upper half of $s0 # with lower 16b set to 0s op rs rt operand / offset 31 25 20 15 0 I 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 lui = 15 Unused Destination Immediate operand 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Content of $s0 after the instruction is executed IT3030 59
  60. NKK-HUT Các chế độ địa chỉ IT3030 60
  61. NKK-HUT Một số lệnh cơ bản n Lệnh toán học và logic n Lệnh load/store n Lệnh nhảy và rẽ nhánh (jump/branch) IT3030 61
  62. NKK-HUT Lệnh toán học và logic IT3030 62
  63. NKK-HUT Lệnh toán học và logic (kiểu I-Format) IT3030 63
  64. NKK-HUT Lệnh load/store IT3030 64
  65. NKK-HUT Lệnh load/store (I-Format) IT3030 65
  66. NKK-HUT Lệnh nhảy và rẽ nhánh không điều kiện IT3030 66
  67. NKK-HUT Lệnh nhảy và rẽ nhánh có điều kiện IT3030 67
  68. NKK-HUT Lệnh kiểm tra điều kiện IT3030 68
  69. NKK-HUT
  70. NKK-HUT Compiling If Statements n C code: if (i==j) f = g+h; else f = g-h; n f, g, h, i, j in $s0, $s1, $s2, $s3, $s4 n Compiled MIPS code: bne $s3, $s4, Else add $s0, $s1, $s2 j Exit Else: sub $s0, $s1, $s2 Exit: Assembler calculates addresses IT3030 70
  71. NKK-HUT Compiling Loop Statements n C code: while (save[i] == k) i += 1; n i in $s3, k in $s5, address of save in $s6 n Compiled MIPS code: Loop: sll $t1, $s3, 2 add $t1, $t1, $s6 lw $t0, 0($t1) bne $t0, $s5, Exit addi $s3, $s3, 1 j Loop Exit: IT3030 71
  72. NKK-HUT
  73. NKK-HUT Lập trình hợp ngữ sử dụng tập lệnh MIPS n Khung chương trình hợp ngữ n Biên dịch và thực thi chương trình hợp ngữ IT3030 73
  74. NKK-HUT Khung chương trình hợp ngữ Chương trình hợp ngữ cho MIPS bao gồm các thành phần ØĐịnh hướng biên dịch ØLệnh ØGiả lệnh
  75. NKK-HUT Khung chương trình hợp ngữ #include .data #Khai báo biến .text .globl start .ent start start: #Nội dung chương trình chính .end start .ent CTCon CTCon: #Nội dung chương trình con .end CTCon
  76. NKK-HUT Chương trình ví dụ #include .data test: .asciiz "Hello World" .text .set noreorder .globl start .ent start start: la a0,test #load the address of test string to a0 jal printf #print test tring to console .end start
  77. NKK-HUT Biên dịch và thực thi với MIPSIT & MIPS nMIPSIT2000 nUPLOAD nMIPS
  78. NKK-HUT 4.5. Kiến trúc tập lệnh x86 n Giới thiệu kiến trúc x86 n Tập thanh ghi 8086 n Tập lệnh và các chế độ địa chỉ n Ví dụ lập trình hợp ngữ sử dụng tập lệnh 8086 IT3030 78
  79. NKK-HUT 4.6. Kiến trúc tập lệnh Intel x86 n Evolution with backward compatibility n 8080 (1974): 8-bit microprocessor n Accumulator, plus 3 index-register pairs n 8086 (1978): 16-bit extension to 8080 n Complex instruction set (CISC) n 8087 (1980): floating-point coprocessor n Adds FP instructions and register stack n 80286 (1982): 24-bit addresses, MMU n Segmented memory mapping and protection n 80386 (1985): 32-bit extension (now IA-32) n Additional addressing modes and operations n Paged memory mapping as well as segments IT3030 79
  80. NKK-HUT The Intel x86 ISA n Further evolution n i486 (1989): pipelined, on-chip caches and FPU n Compatible competitors: AMD, Cyrix, n Pentium (1993): superscalar, 64-bit datapath n Later versions added MMX (Multi-Media eXtension) instructions n The infamous FDIV bug n Pentium Pro (1995), Pentium II (1997) n New microarchitecture (see Colwell, The Pentium Chronicles) n Pentium III (1999) n Added SSE (Streaming SIMD Extensions) and associated registers n Pentium 4 (2001) n New microarchitecture n Added SSE2 instructions IT3030 80
  81. NKK-HUT The Intel x86 ISA n And further n AMD64 (2003): extended architecture to 64 bits n EM64T – Extended Memory 64 Technology (2004) n AMD64 adopted by Intel (with refinements) n Added SSE3 instructions n Intel Core (2006) n Added SSE4 instructions, virtual machine support n AMD64 (announced 2007): SSE5 instructions n Intel declined to follow, instead n Advanced Vector Extension (announced 2008) n Longer SSE registers, more instructions n If Intel didn’t extend with compatibility, its competitors would! n Technical elegance ≠ market success IT3030 81
  82. NKK-HUT Giới thiệu kiến trúc x86 IT3030 82
  83. NKK-HUT Cấu trúc bên trong của 8086 n Gồm 2 phần: n Đơn vị nối ghép bus (Bus Interface Unit – BIU) n Đơn vị thực hiện (Execution Unit – EU) n Hai phần này có thể hoạt động đồng thời: trong khi EU đang thực hiện lệnh trước thì BIU đã tìm và nhận lệnh tiếp theo từ bộ nhớ chính. 83
  84. NKK-HUT Bus Interface Unit - BIU n Bao gồm: n Các thanh ghi đoạn n Con trỏ lệnh n Mạch tạo địa chỉ và điều khiển bus n Hàng đợi lệnh (8088: 4 Byte, 8086: 6 Byte) n Nhiệm vụ: n Tạo và phát địa chỉ n Nhận lệnh từ bộ nhớ n Trao đổi dữ liệu với bộ nhớ chính và cổng vào-ra n Phát tín hiệu điều khiển bộ nhớ và mạch vào-ra 84 Nhận các tín hiệu yêu cầu từ bên ngoài
  85. NKK-HUT Execution Unit – EU n Gồm: n Các thanh ghi chung n Các thanh ghi đệm n Đơn vị số học và logic (ALU) n Khối giải mã lệnh n Nhiệm vụ: n Giải mã lệnh n Thực hiện lệnh 85
  86. NKK-HUT Tập thanh ghi 8086 n 4 thanh ghi đoạn: n CS (Code Segment): thanh ghi đoạn lệnh n DS (Data Segment): thanh ghi đoạn dữ liệu n SS (Stack Segment): thanh ghi đoạn ngăn xếp n ES (Extra Segment): thanh ghi đoạn dữ liệu phụ n 3 thanh ghi con trỏ: n IP (Instruction Pointer): thanh ghi con trỏ lệnh n SP (Stack Pointer): con trỏ ngăn xếp n BP (Base Pointer): thanh ghi con trỏ cơ sở n 4 thanh ghi dữ liệu: n AX (Accumulator): thanh chứa - thanh ghi tích lũy n BX (Base): thanh ghi cơ sở n CX (Count): thanh ghi đếm n DX (Data): thanh ghi dữ liệu Mỗi thanh ghi này đều có thể được chia ra thành 2 nửa có khả năng sử dụng độc lập. n Thanh ghi cờ 86
  87. NKK-HUT Tập thanh ghi (tiếp) 87
  88. NKK-HUT Tập lệnh và các chế độ địa chỉ n Tập lệnh: Tập lệnh của 8088 có khoảng 120 lệnh, chia thành các nhóm như sau: n Các lệnh chuyển dữ liệu (copy) n Các lệnh số học n Các lệnh logic, dịch, quay n Các lệnh xử lý xâu ký tự (string) n Các lệnh điều khiển hệ thống n Các lệnh chuyển điều khiển (rẽ nhánh) n Các lệnh xử lý đặc biệt n Các lệnh vào-ra trực tiếp 88
  89. NKK-HUT Tập lệnh và các chế độ địa chỉ (tiếp) n Các chế độ địa chỉ (Addressing modes): n Chế độ địa chỉ là cách xác định toán hạng của lệnh n Toán hạng gồm: toán hạng nguồn và toán hạng đích n Họ Intel x86: nếu trong lệnh có 2 toán hạng thì toán hạng đích được viết ở bên trái. n Toán hạng có thể là: n Hằng số (được cho ngay trong lệnh) n Nội dung của thanh ghi (trong lệnh cần cho biết tên thanh ghi) n Nội dung của ngăn nhớ n Nội dung của cổng vào-ra 89
  90. NKK-HUT Các chế độ địa chỉ n Chế độ địa chỉ tức thì: n Toán hạng là một giá trị hằng số nằm ngay trong lệnh. n Ví dụ: MOV CX, 5 ; nạp giá trị 5 vào thanh ghi CX MOV 5, CX ; chú ý: không tồn tại lệnh này !!! n Chế độ địa chỉ thanh ghi: n Toán hạng là nội dung của 1 thanh ghi mà tên thanh ghi được cho biết ở trong lệnh. n Ví dụ: MOV AX, BX ; chuyển nội dung của BX vào AX 90
  91. NKK-HUT Các chế độ địa chỉ (tiếp) n Chế độ địa chỉ trực tiếp: n Toán hạng là nội dung của ngăn nhớ mà địa chỉ của ngăn nhớ đó được cho ở trong lệnh. n Ví dụ: MOV AX, [1234h] ; khác với MOV AX, ES:[1234h] n 1234h là địa chỉ offset của ngăn nhớ n Nếu không chỉ định địa chỉ đoạn thì ngầm định thanh ghi đoạn tương ứng là DS n Lệnh này chuyển 1 word nằm trong bộ nhớ bắt đầu từ địa chỉ DS:1234h vào thanh ghi AX 91
  92. NKK-HUT Minh họa chế độ địa chỉ trực tiếp 92
  93. NKK-HUT Các chế độ địa chỉ (tiếp) n Chế độ địa chỉ gián tiếp qua thanh ghi: n Toán hạng là nội dung của ngăn nhớ có địa chỉ offset nằm trong 1 trong các thanh ghi sau: BX, SI, DI. n Chú ý: nếu không chỉ định địa chỉ đoạn thì ngầm định thanh ghi đoạn tương ứng là DS. n Ví dụ: MOV AL, [SI] ; tương đương MOV AL, DS:[SI] Lệnh này chuyển 1 byte nhớ ở địa chỉ DS:SI vào thanh ghi AL 93
  94. NKK-HUT Minh họa 94
  95. NKK-HUT Các chế độ địa chỉ (tiếp) n Chế độ địa chỉ cơ sở: n Toán hạng là nội dung của ngăn nhớ có địa chỉ offset bằng tổng nội dung của một thanh ghi cơ sở (BX hoặc BP) + hằng số. n Nếu không chỉ định thanh ghi đoạn thì ngầm định thanh ghi đoạn đó là: n DS nếu thanh ghi cơ sở là BX n SS nếu thanh ghi cơ sở là BP n Ví dụ: MOV AL, [BX+3] ; tương đương MOV AL, [BX]+3 ; tương đương MOV AL, 3[BX] 95
  96. NKK-HUT Minh họa 96
  97. NKK-HUT Các chế độ địa chỉ (tiếp) n Chế độ địa chỉ chỉ số: n Toán hạng là nội dung của ngăn nhớ có địa chỉ offset bằng tổng nội dung của một thanh ghi chỉ số (SI hoặc DI) + hằng số. n Nếu không chỉ định thanh ghi đoạn thì ngầm định thanh ghi đoạn đó là DS. n Ví dụ: MOV AX, [SI+3] ; tương đương MOV AX, [SI]+3 ; tương đương MOV AX, 3+[SI] ; tương đương MOV AX, 3[SI] 97
  98. NKK-HUT Minh họa 98
  99. NKK-HUT Các chế độ địa chỉ (tiếp) n Chế độ địa chỉ chỉ số cơ sở: n Toán hạng là ngăn nhớ có địa chỉ offset bằng tổng của nội dung một thanh ghi cơ sở (BX, BP) với một thanh ghi chỉ số (SI, DI) và một hằng số. n Ví dụ: MOV AL, [BX][SI]+4 ; Û MOV AL, [BX+SI+4] 99
  100. NKK-HUT Lập trình hợp ngữ với 8086 n Cú pháp n Khung chương trình n Ví dụ IT3030 100
  101. NKK-HUT Chương trình dịch hợp ngữ n Được gọi là ASSEMBLER n Một số chương trình dịch hợp ngữ cho IBM-PC: n MASM – Microsoft Marco Assembler: n Các tệp: MASM.EXE, LINK.EXE, EXE2BIN.EXE n TASM – Turbo Assembler: n Các tệp: TASM.EXE, TLINK.EXE n 8086 Emulator 101
  102. NKK-HUT Cú pháp của hợp ngữ n Chương trình hợp ngữ gồm các dòng lệnh, mỗi lệnh viết trên một dòng, mỗi dòng có thể là: n Lệnh của bộ vi xử lý (instruction) n Chỉ dẫn của chương trình dịch ASSEMBLER n Các lệnh hợp ngữ không phân biệt chữ hoa, chữ thường. n Khi dịch thành mã máy thì chỉ có các lệnh của bộ vi xử lý mới được dịch. n Cấu trúc của một dòng lệnh : Tên Thao tác Toán hạng Chú thích (Name Operation Operand Comment ) n Giữa các trường phải có ít nhất một dấu cách (hoặc TAB) n Ví dụ: MAIN PROC BAT_DAU: MOV CX, 50 ; khoi tao bo dem 102
  103. NKK-HUT Khung chương trình EXE .Model Small .Stack 100h .Data ; khai báo biến và hằng ở đây .Code Main Proc mov ax, @Data mov ds, ax ; khởi tạo DS trỏ đến đoạn Data ; mov es, ax ; bỏ dấu ; để khởi tạo ES = DS ; thân chương trình mov ah, 4Ch ; hàm thoát về DOS int 21h Main EndP End Main 103
  104. NKK-HUT Ví dụ .Model Small .Stack 100h .Data TBao db 'Hello World$' ; kết thúc bằng '$' .Code Main Proc mov ax, @Data mov ds, ax ; DS trỏ đến đoạn Data HienTB: mov ah, 9 ; hàm hiện chuỗi lea dx, TBao ; DS:DX Þ chuỗi TBao int 21h ; gọi hàm Thoat: mov ah,4Ch ; hàm thoát về DOS int 21h Main EndP End Main 104
  105. NKK-HUT Hết chương 4 IT3030 105