Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 48 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
48
Dung lượng
2,36 MB
Nội dung
Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thông Tin – ĐHQG Tp HCM Một số lệnh assembly MIPS GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Bảng Tóm tắt lệnh MIPS (tham khảo [1]) Các lệnh assembly MIPS tài liệu diễn tả theo hàng bảng Tên lệnh (đầy đủ) Tên lệnh Lệnh thuộc nhóm (R, I hay J) Lệnh thực chức Chức lệnh diễn tả theo kiểu viết Verilog Verilog ngôn ngữ lập trình dùng để mơ tả thiết kế phần cứng (sinh viên năm 1, 2, chưa học) Một số ghi cho lệnh tương ứng, làm rõ cuối bảng opcode funct cho lệnh tương ứng Ví dụ: lệnh add có số cột 0/20hex, tức opcode add 0; trường funct Rformat add 20hex (1) May cause overflow exception GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thơng Tin – ĐHQG Tp HCM Những lệnh có phần ghi (1) thông báo lỗi, hay gọi gây ngoại lệ (exception) phép toán bị tràn (overflow) (2) SignExtImm = {16 {immediate[15]}, immediate} Những lệnh có phần ghi (2) ln chứa số tức thời 16 bits (có dấu dạng bù 2), số mở rộng thành số 32 bits theo kiểu mở rộng có dấu Viết theo cấu trúc Verilog 16{immediate[15]}: chuỗi 16 bits; 16 bit tao giống y bit thứ 15 immediate {16{immediate[15]}, immediate}: chuỗi 32 bits, 16 bit thuộc cao tao giống bit thứ 15 immediate, 16 bit thuộc thấp số tức thời Ví dụ: SignExtImm 0011 1110 1101 1100 0000 0000 0000 0000 0011 1110 1101 1100 SignExtImm 1011 1110 1101 1100 1111 1111 1111 1111 1011 1110 1101 1100 Có thể hiểu đơn giản, số tức thời dương 16 bits cao thêm vào 0, cịn số tức thời âm, 16bits cao thêm vào (3) ZeroExtImm = {16{1b’0}, immediate} Những lệnh có phần ghi (3) ln chứa số tức thời 16 bits (có dấu dạng bù 2), số mở rộng thành số 32 bits theo kiểu mở rộng Zero, tức không cần biết âm hay dương, 16 bits cao thêm vào Viết theo cấu trúc Verilog 16{1b‟0}: chuỗi 16 bits mà tất bit {16{1b‟0}, immediate}: chuỗi 32 bits, 16 bit thuộc cao 16 bit thuộc thấp số tức thời Ví dụ: SignExtImm 0011 1110 1101 1100 0000 0000 0000 0000 0011 1110 1101 1100 SignExtImm 1011 1110 1101 1100 0000 0000 0000 0000 1011 1110 1101 1100 (4) BranchAddr = {14{immediate[15]}, immediate, 2’b0} giải thích phần lệnh beq bne (5) JumpAddr = { PC + 4[31:28], address, 2’b0} giải thích phần lệnh j jal (6) Operations considered unsigned numbers (vs 2’comp.) Những lệnh có phần ghi (6) làm việc số không dấu (unsigned) (7) Atomic test&set pair; R[rt] = if pair atomic, if not atomic GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Trong bảng 1, có lệnh ll sc có ghi (7) lệnh liên quan đến số lý thuyết không nằm phần giảng dạy lý thuyết, bỏ qua lệnh Một số ghi chú: Ký hiệu số: Ký hiệu 0x đầu dùng để hệ 16 Ví dụ: 0xffff = ffffhex = ffff(16) Số ghi bình thường hiểu hệ 10 Thanh ghi: Bộ xử lý chứa 32 ghi để hoạt động, ghi 32 bits Mỗi ghi có tên gợi nhớ số thứ tự tương ứng Bảng mơ tả số thứ tự tên gợi nhớ ghi Như vậy, làm việc với ghi có vấn đề cần quan tâm: giá trị địa Giá trị giá trị chứa ghi Địa số ghi tập 32 ghi Ví dụ: Nếu nói ghi $t3 có giá trị 5, ghi $t3 5, tức giá trị chứa $t3 số/địa $t3 11 Bảng Mô tả ghi (trích từ bảng 1) GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thông Tin – ĐHQG Tp HCM Tên gợi nhớ ghi Bộ nhớ: Chỉ số tương ứng ghi Mục đích sử dụng ghi Thanh ghi “Yes” ghi cần lưu trữ lại thực việc gọi hàm Tương tự ghi, làm việc với nhớ có vấn đề cần quan tâm: giá trị địa Giá trị giá trị chứa từ nhớ (word), byte Địa địa gán cho word byte Ví dụ: Hình Một ví dụ hình ảnh nhớ từ phần mềm mơ (simulator) MARS 4.4 Đây word (4 bytes) địa 0x10010004, có giá trị 0x12345678 GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thông Tin – ĐHQG Tp HCM A Xét lệnh số học GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Các lệnh số học: add, addi, addiu, addu GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM sub, subu R viết tắt Register Ví dụ: R[rs] hiểu giá trị ghi rs -1 Lệnh add Lệnh thuộc dạng R-format, có opcode trường funct giá trị 20hex Syntax (cú pháp): (tham khảo Appendix B sách tham khảo [1]) Ý nghĩa: R[rd] = R[rs] + R[rt] Thực cộng giá trị ghi rs với giá trị ghi rt, tổng đưa vào ghi rd Ví dụ: add $t0, $t1, $t2 Giả sử giá trị chứa ghi $t1 3, giá trị chứa ghi $t2 Kết quả: Sau lệnh add thực hiện, giá trị ghi $t0 (4 + = 7) Lệnh addi Lệnh thuộc dạng I-format, có opcode 8hex Syntax (cú pháp): Ý nghĩa: R[rt] = R[rs] + SignExtImm Thực cộng giá trị ghi rs với số tức thời, kết đưa vào ghi rt Lưu ý: Phạm vi cho số tức thời lệnh 16 bits Số tức thời trước cộng với ghi rs phải mở rộng có dấu thành (SignExtImm) thành số 32 bits GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Ví dụ: a) addi $t0, $t1, b) addi $t0, $t1, -3 c) addi $t0, $t1, 32768 Giả sử giá trị chứa ghi $t1 cho câu Kết quả: a) Sau addi thực xong, giá trị $t0 Quy trình lệnh thực hiện: số tức thời 3(10) = 0000 0000 0000 0011(2) (số 16 bit có dấu) SignExtImm 3(10) = 0000 0000 0000 0000 0000 0000 0000 0011(2) Giá trị ghi $t1 = 0000 0000 0000 0000 0000 0000 0000 0100(2) Giá trị $t1 + SingExtImm 3(10) = 0000 0000 0000 0000 0000 0000 0000 0111(2) b) Sau addi thực xong, giá trị $t0 Quy trình lệnh thực hiện: số tức thời -3(10) = 1111 1111 1111 1101(2) (số 16 bit có dấu, biểu diễn theo bù 2) SignExtImm 3(10) = 1111 1111 1111 1111 1111 1111 1111 1101 (2) Giá trị ghi $t1 = 0000 0000 0000 0000 0000 0000 0000 0100(2) Giá trị $t1 + SingExtImm 3(10) = 0000 0000 0000 0000 0000 0000 0000 0001(2) c) Lệnh bị báo lỗi, 32768 khỏi giới hạn số 16 bits có dấu Lệnh addiu addu Addiu có cú pháp thực chức giống addi Addu có cú pháp thực chức giống add Tuy nhiên, addiu addu khơng xét kết có bị overflow hay khơng, addi add báo overflow xuất Syntax (cú pháp): Ví dụ: GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM a) addi $t0, $t1, 0x1 Giả sử ghi $t1 = 0x7fffffff Kết quả: 0x1 + 0x7fffffff = 0x80000000 Cộng môt số dương với số dương, kết số âm => overflow Khi lệnh addi thực hiện, thông báo overflow xuất b) addiu $t0, $t1, Giả sử ghi $t1 = 0x7fffffff Kết quả: $t0 = 0x80000000 Khi lệnh addi thực hiện, ghi $t0 nhận giá trị 0x8000000 thơng báo overflow xuất Lệnh sub subu Lệnh sub có cú pháp tương tư lệnh add, add thực phép toán cộng ghi, kết lưu vào ghi thứ đó, sub thực phép tốn trừ ghi, kết lưu vào ghi thứ Lệnh subu có cú pháp chức giống sub, subu không xét đến kết có bị overflow hay khơng sub có xét đến kết có bị overflow hay khơng; bị overflow, có thơng báo Syntax (cú pháp): Lưu ý: khơng có lệnh subi (tức trừ ghi với số tức thời) có lệnh addi số tức thời addi âm dương, nên subi không cần thiết Tổng kết: add, addi, addiu, addu sub, subu Nhìn lại cơt ghi lệnh bảng 1: Chỉ có lệnh addi addiu có ghi (2) tức lệnh làm việc với số tức thời, số tức thời 16 bits mở rộng có dấu thành thành số 32 bits GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 10 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM $t1 = 0x87654321 từ nhớ địa 0x10010008 có giá trị 0x12345678 Từ nhớ chứa bytes: Byte 12 Byte 34 Byte 56 Byte 78 Lệnh sw thực việc lưu giá trị ghi $t1 vào từ nhớ có địa = $t0 + = 0x10010008 Giá trị từ nhớ địa 0x10010008 sau lệnh thực là: Byte Byte Byte Byte 87 65 43 21 21 Lệnh sb lệnh thuộc nhóm I-format, có opcode = 28hex Syntax (cú pháp): Address = Offset(rs) Ý nghĩa: M[R[rs] + SignExtImm](7:0) = R[rt](7:0) Lấy byte thấp ghi rt lưu vào byte thấp từ nhớ có địa tính giá trị ghi rs cộng với offset (offset mở rộng có dấu thành số 32 bits trước cộng) Ví dụ: sb $t1, 8($t0) giả sử $t0 = 0x10010000 $t1 = 0x87654321 từ nhớ địa 0x10010008 có giá trị 0x12345678 Từ nhớ chứa bytes: Byte 12 Byte 34 Byte 56 Byte 78 Lệnh sb thực việc lưu byte ghi t1 (0x21) vào byte từ nhớ địa 0x10010008 Nên sau lệnh trên, hình ảnh từ nhớ: GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 34 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Byte 12 Byte 34 Byte 56 Byte 21 22 Lệnh sh lệnh thuộc nhóm I-format, có opcode = 29hex Syntax (cú pháp): Ý nghĩa: M[R[rs] + SignExtImm](15:0) = R[rt](15:0) Lấy byte thấp ghi rt (nữa thấp) lưu vào byte thấp từ nhớ có địa tính giá trị ghi rs cộng với offset (offset mở rộng có dấu thành số 32 bits trước cộng) Ví dụ: sh $t1, 8($t0) giả sử $t0 = 0x10010000 $t1 = 0x87654321 từ nhớ địa 0x10010008 có giá trị 0x12345678 Từ nhớ chứa bytes: Byte 12 Byte 34 Byte 56 Byte 78 Lệnh sh thực việc lưu byte byte ghi t1 (0x4321) vào byte byte từ nhớ địa 0x10010008 Nên sau lệnh trên, hình ảnh từ nhớ: Byte Byte Byte Byte 12 34 43 21 23 Lệnh lui GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 35 Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thơng Tin – ĐHQG Tp HCM Lệnh thuộc I-format, có opcode fhex Syntax (cú pháp): Ý nghĩa: R[rt] = {imm, 16’b0} Gán số tức thời 16 bits vào cao ghi rt, thấp đưa vào Ví dụ: a lui $t1, 0x1234 Kết quả: $t1 = 0x12340000 b lui $t1, 0x12345 báo lỗi số tức thời tràn q số 16 bits Ngồi cịn lệnh thuộc nhóm PseudoInstruction set: li move 24 Lệnh li Ý nghĩa: đưa số tức thời (32 bits) vào ghi Ví dụ: li $t0, 0x12345 Kết quả: $t0 = 0x00012345 Lưu ý: Số đưa vào lui phép số 16 bits, số đưa li lên đến 32 bits Lệnh li thực chất lệnh giả, lệnh chuyển thành lệnh (lui or) processor chạy thật sự: GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 36 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM 25 Lệnh move Ý nghĩa: chép/di chuyển giá trị từ ghi sang ghi Ví dụ: move $t1, $t2 Giả sử $t1 = 0x12345678 $t2 = 0x87654321 Khi lênh thực thi, giá trị ghi $t2 đưa vào ghi $t1 Kết sau chay: $t1 = 0x87654321 $t2 = 0x87654321 Chú ý: Lệnh li thực chất lệnh giả, lệnh chuyển thành lệnh „addu‟ processor chạy thật (thực việc cộng ghi $t2 với ghi zero, kết nạp vào ghi $t1: GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 37 Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thông Tin – ĐHQG Tp HCM GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 38 Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thơng Tin – ĐHQG Tp HCM CÁC LỆNH ASSEMBLY TRONG KHỐI “ARITHMETIC CORE INSTRUCTION SET” Các lệnh assembly nằm bảng bên phải bảng số chứa lệnh số học phức tạp so với lệnh bên bảng trái Do bảng chứa số lệnh làm việc với số dấu chấm động (floating-point), nên lệnh có format có “F” phía trước tức lệnh làm việc với số dấu chấm động Do lệnh làm việc với số floating-point có format lệnh khác so với R-format I-format chuẩn (Có thêm trường „fmt‟: để phân biệt làm việc với số floating-point độ xác đơn hay độ kép) Ví dụ: lệnh bclt có giá trị cột “11/8/1/…” tức opcode lệnh = 11hex, fmt = hex, ft = hex funct không quan tâm GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 39 Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thơng Tin – ĐHQG Tp HCM A Các lệnh nhân chia GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 40 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Các lệnh assembly cần thực phép nhân chia: Nhân: mult/multu Chia: div/divu Hai lệnh hỗ trợ: mfhi/mflo Lệnh mult/multu Hai lệnh thuộc nhóm lệnh R-format, có opcode Lệnh mult có funct 18, lệnh multu có funct 19 Syntax: Ý nghĩa: {Hi, Lo} = R[rs] * R[rt] Giá trị ghi rs (số 32 bits) nhân với giá trị ghi rt (số 32 bits), kết số 64 bits 32 bits thuộc thấp kết lưu ghi Lo, 32 bits thuộc cao kết lưu ghi Hi Chú ý: Hi Lo ghi phụ thêm cho processor thực phép tốn nhân chia Vì ghi 32 bits, mà kết phép toán nhân 64 bits, nên phải dùng ghi tạm ghép lại mult: nhân số có dấu multu: nhân số khơng dấu Ví dụ: a mult $t1, $t2 Giả sử $t1 = 0x00008765 $t2 = 0x12345678 Kết quả: $hi = 0x000009a0 $lo = 0xc83f6558 GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 41 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM b mult $t1, $t2 Giả sử $t1 = 0x80008765 $t2 = 0x12345678 Kết quả: $hi = 0xf6e5de64 $lo = 0xc83f6558 Tức $t1*$t2 = -0x91A219B37C09AA8 (xét số có dấu dạng bù 2) Kiểm tra lại: $t1 = 0x80008765 = 1000 0000 0000 0000 1000 0111 0110 0101(2) = -0x7FFF789B $t2 = 0x12345678 $t1 * $t2 = -(0x7FFF789B x 0x12345678) = -0x91A219B37C09AA8 = 0xF6E5DE64C83F6558 (bù 2) GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 42 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM c multu $t1, $t2 Giả sử $t1 = 0x80008765 $t2 = 0x12345678 Kết quả: $hi = 0x091a34dc $lo = 0xc83f6558 Kiểm chứng kết quả: multu thực phép nhân số dạng không dấu $t1 = 0x80008765 = 20000103545(10) $t2 = 0x12345678 = 2215053170(10) $t1 x $t2 = 20000103545(10) x 2215053170(10) = 44321515631017662530(10) = 0x91A34DCC83F6558 GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 43 Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thơng Tin – ĐHQG Tp HCM Chia: div/divu Hai lệnh thuộc nhóm lệnh R-format, có opcode Lệnh div có funct 1ahex, lệnh divu có funct 1bhex Syntax: GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 44 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Ý nghĩa: rdest, rsrcl src2 ghi Hai lệnh lấy giá trị ghi rsrcl chia cho src2, thương số đặt vào ghi rdest Đồng thời ghi Lo chứa thương số giống than ghi rdest ghi Hi chứa phần dư div: chia số có xét tràn divu: chia số khơng xét tràn Ví dụ: a div $t1, $t2, $t3 giả sử $t2 = 0x6, $t3 = 0x5 Kết quả: $t1 = 0x1 $Lo= 0x1 $Hi = 0x1 Đưa thêm ví dụ kiểm chứng trường hơp tràn khơng tràn (div/divu) GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 45 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM CÁC LỆNH ASSEMBLY CHO SỐ DẤU CHẤM ĐỘNG (floating-point number) GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 46 Khoa Kỹ thuật Máy tính – Trường Đại học Cơng Nghệ Thơng Tin – ĐHQG Tp HCM Nhóm lệnh số học: Cộng add.s add.d Trừ sub.s sub.d Nhân mul.s mul.d Chia div.s div.d Chú ý: Các lênh làm việc với số floating-point làm việc 32 ghi f Các lệnh thuộc nhóm lệnh FR, có opcode 11hex Lệnh add có funct 0, lệnh sub có funct hex, lệnh mul có funct hex, lệnh div có funct hex GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 47 Khoa Kỹ thuật Máy tính – Trường Đại học Công Nghệ Thông Tin – ĐHQG Tp HCM Chú ý: lệnh s làm việc với độ xác đơn, có trường fmt ln 10hex; lệnh d làm việc với độ xác kep, có trường fmt 11hex add.s Syntax Ý nghĩa: F[fd] = F[fs] + F[ft] Giá trị ghi fs cộng với giá trị ghi ft, tổng lưu vào ghi fd add.d Syntax Ý nghĩa: {F[fd], F[fd+1]} = {F[fs], F[fs+1]} + {F[ft], F[ft+1]} Số tức thời lúc biểu diễn độ xác kép nên cần 64 bits, tức phải cần ghi f liên tục Lệnh add.d thực việc cộng giá trị số floating point độ xác kép lưu Giá trị ghi fs cộng với giá trị ghi ft, tổng lưu vào ghi fd GV Biên soạn: TTNNguyet-Khoa KTMT-UIT Lưu hành nội Page 48 ... học Cơng Nghệ Thơng Tin – ĐHQG Tp HCM Bảng Tóm tắt lệnh MIPS (tham khảo [1]) Các lệnh assembly MIPS tài liệu diễn tả theo hàng bảng Tên lệnh (đầy đủ) Tên lệnh Lệnh thuộc nhóm (R, I hay J) Lệnh. .. nhóm lệnh thật nhóm lệnh giả Nhóm lệnh thật: lệnh mà thực chất processor chạy lệnh Nhóm lệnh giả: lệnh mà thực thi thật lệnh chuyển thành lệnh thuộc nhóm lệnh thật (nhóm lệnh đặt để thuận tiện... học Cơng Nghệ Thông Tin – ĐHQG Tp HCM CÁC LỆNH ASSEMBLY TRONG KHỐI “ARITHMETIC CORE INSTRUCTION SET” Các lệnh assembly nằm bảng bên phải bảng số chứa lệnh số học phức tạp so với lệnh bên bảng