Bài giảng môn Kiến trúc máy tính - Chương 2: Ngôn ngữ máy tính và các phép toán - Nguyễn Đức Minh

Đọc và ghi byte

68 HUST-FET, 13/02/2011

MIPS các lệnh đặc biệt để dịch chuyển bytes

lb $t0, 1($s3) #load byte from memory

sb $t0, 6($s3) #store byte to memory

op rs rt 16 bit number

Các byte 8bit nào được đọc và ghi?

 Lệnh đọc đưa byte được đọc vào 8 bit ngoài cùng bên

phải từ bộ nhớ vào thanh ghi đích

- Các bit khác của thanh ghi?

 Lệnh ghi lấy 8 bit ngoài cùng bên phải của thanh ghi

nguồn và ghi vào bộ nhớ

- Giữ các byte khác trong từ nhớ không thay đổiVí dụ 2.7. Đọc ghi byte

69 HUST-FET, 13/02/2011

Cho đoạn mã sau và trạng thái bộ nhớ. Xác định

trạng thái bộ nhớ sau khi thực hiện đoạn mã

add $s3, $zero, $zero

lb $t0, 1($s3)

sb $t0, 6($s3)

Memory

0x 0 0 9 0 1 2 A 0

Data Word

Address (Decimal)

8 4 0

12

16

20

24

0x F F F F F F F F

0x 0 1 0 0 0 4 0 2

0x 1 0 0 0 0 0 1 0

0x 0 0 0 0 0 0 0 0

0x 0 0 0 0 0 0 0 0

0x 0 0 0 0 0 0 0 0

 Giá trị lưu trong $t0?

 Điều gì xảy ra khi máy tính là loại little

Endian?

 Từ nào được ghi vào bộ nhớ ở vị trí

nào?Đọc ghi nửa từ

70 HUST-FET, 13/02/2011

MIPS also provides special instructions to move

half words

lh $t0, 1($s3) #load half word from memory

sh $t0, 6($s3) #store half word to memory

op rs rt 16 bit number

What 16 bits get loaded and stored?

 load half word places the half word from memory in the

rightmost 16 bits of the destination register

- what happens to the other bits in the register?

 store half word takes the half word from the rightmost

16 bits of the register and writes it to the half word in

memory

pdf142 trang | Chia sẻ: trungkhoi17 | Lượt xem: 553 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng môn Kiến trúc máy tính - Chương 2: Ngôn ngữ máy tính và các phép toán - Nguyễn Đức Minh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
không? (Vấn đề alighment) HUST-FET, 13/02/201144Chương 2. Ngôn ngữ máy tính và các phép toán 31 23 15 7 0 xx+1x+2x+3x+4 byte address word Địa chỉ bộ nhớ: Endianess và Alignment  Big Endian:  Địa chỉ word = địa chỉ của byte có ý nghĩa lớn nhất trong word (Most Significant Byte)  IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA  Litle Endian:  Địa chỉ word = địa chỉ của byte có ý nghĩa nhỏ nhất trong word (Least Significant Byte)  Intel 80x86, DEC Vax, DEC Alpha  Alignment:  Dữ liệu được lưu trữ ở địa chỉ byte chia hết cho kích thước. HUST-FET, 13/02/201145Chương 2. Ngôn ngữ máy tính và các phép toán Địa chỉ bộ nhớ: Endianess và Alignment  Big Endian:  Địa chỉ word = địa chỉ của byte có ý nghĩa lớn nhất trong word (Most Significant Byte)  IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA  Litle Endian:  Địa chỉ word = địa chỉ của byte có ý nghĩa nhỏ nhất trong word (Least Significant Byte)  Intel 80x86, DEC Vax, DEC Alpha  Alignment:  Dữ liệu được lưu trữ ở địa chỉ byte chia hết cho kích thước. HUST-FET, 13/02/201146Chương 2. Ngôn ngữ máy tính và các phép toán Địa chỉ bộ nhớ: Endianess và Alignment  Big Endian:  Địa chỉ word = địa chỉ của byte có ý nghĩa lớn nhất trong word (Most Significant Byte)  IBM 360/370, Motorola 68k, MIPS, Sparc, HP PA  Litle Endian:  Địa chỉ word = địa chỉ của byte có ý nghĩa nhỏ nhất trong word (Least Significant Byte)  Intel 80x86, DEC Vax, DEC Alpha  Alignment:  Dữ liệu được lưu trữ ở địa chỉ byte chia hết cho kích thước. HUST-FET, 13/02/201147Chương 2. Ngôn ngữ máy tính và các phép toán 0 1 2 3 Aligned Not Aligned Sử dụng chế độ địa chỉ  Displacement: 42% avg, 32% to 55%  Immediate: 33% avg, 17% to 43%  Register deferred (indirect): 13% avg, 3% to 24%  Scaled: 7% avg, 0% to 16%  Memory indirect: 3% avg, 1% to 6%  Misc: 2% avg, 0% to 3%  75% displacement & immediate  88% displacement, immediate & register indirect HUST-FET, 13/02/201148Chương 2. Ngôn ngữ máy tính và các phép toán 88% 75% Thống kê chế độ địa chỉ Kích thước trường toán hạng trực tiếp 8 bit: 50-60% 16 bit; 75%-80% Các chế độ địa chỉ quan trọng Dịch chuyển (Displacement) Trực tiếp (Immediate) Thanh ghi gián tiếp (Register indirect) Kích thước độ lệch trong chế độ địa chỉ: 12-16 bít Kích thước toán hạng trực tiếp: 8-16 bít HUST-FET, 13/02/201149Chương 2. Ngôn ngữ máy tính và các phép toán Định dạng chỉ thị HUST-FET, 13/02/201150Chương 2. Ngôn ngữ máy tính và các phép toán  Độ dài chỉ thị:  Cố định  Thay đổi  Lai: gồm 1 vài loại chỉ thị có độ dài cố định khác nhau  Khi kích thước chương trình quan trọng: dùng chỉ độ dài thay đổi  Khi hiệu năng quan trọng: dùng độ dài cố định Variable: Fixed: Hybrid: Một số kiến trúc tập lệnh HUST-FET, 13/02/201151Chương 2. Ngôn ngữ máy tính và các phép toán Kiến trúc RISC  Reduce Instruction Set Computer  DEC Alpha, AMD 29k, ARC, ARM, Atmel AVR, MIPS, PA-RISC, Power (PowerPC), SuperH, và SPARC.  Định dạng lệnh và độ dài lệnh cố định, đơn giản  Dễ giải mã lệnh  Các thanh ghi chung mục đích có thể sử dụng trong nhiều ngữ cảnh  Dễ thiết kế phần mềm biên dịch  Có thể cần các thanh ghi dấu phẩy động riêng biệt  Chế độ địa chỉ đơn giản  Các chế độ địa chỉ phức tạp được thực hiện thông qua chuỗi lệnh số học và lệnh nạp/ghi  Ít hỗ trợ các loại dữ liệu phức tạp HUST-FET, 13/02/201152Chương 2. Ngôn ngữ máy tính và các phép toán Kiến trúc CISC  Complex Instruction Set Computer  System/360, z/Architecture, PDP-11, VAX, Motorola 68k, và x86.  Lệnh có độ dài thay đổi, phức tạp  Có thể bao gồm 1 vài phép toán nhỏ  Gần ngôn ngữ lập trình bậc cao  Nhiều chế độ địa chỉ phức tạp  Hỗ trợ các loại dữ liệu phức tạp HUST-FET, 13/02/201153Chương 2. Ngôn ngữ máy tính và các phép toán CISC vs. RISC HUST-FET, 13/02/201154Chương 2. Ngôn ngữ máy tính và các phép toán RISC CISC - Tập lớn các thanh ghi - Tập lệnh đơn giản - Tập trung trao đổi dữ liệu giữa thanh ghi - Các lệnh thực hiện trong một chu kỳ máy - Các lệnh LOAD/STORE đơn giản để truy cập bộ nhớ - Giới hạn chế độ địa chỉ - Từ mã có chiều dài cố định - Giới hạn số thanh ghi - Tập lệnh phức tạp - Nhấn mạnh vào các hoạt động truy cập bộ nhớ - Lệnh có thể được thực hiện trong nhiều chu kỳ máy - Một lệnh có thể tương đương với nhiều lệnh của RISC - Nhiều chế độ địa chỉ - Mã lệnh có chiều dài thay đổi tùy vào từng lệnh CISC vs. RISC HUST-FET, 13/02/201155Chương 2. Ngôn ngữ máy tính và các phép toán RISC CISC - Mã lệnh thực hiện nhanh - Đơn vị điều khiển đơn giản - Giải mã nhanh - Xử lý song song đường ống hiệu suất cao - Thiết kế, phát triển và kiểm tra nhanh - Hỗ trợ trình dịch tăng cường sự tối ưu - Giảm các lỗi rẽ nhánh của đường ống - Tăng tốc truyền tham số cho các thủ tục - Ngôn ngữ lập trình assembly mạnh - Giảm các yêu cầu khi thiết kế trình dịch - Các tính năng với dấu phẩy động mạnh - Tăng khả năng của cache Ví dụ 2.4. So sánh hiệu năng RISV vs. CISC Kiến trúc tập lệnh ISA có 2 lớp chỉ thỉ phức tạp (C) và đơn giản (S). Trong 1 chương trình thời gian thực hiện chỉ thị S chiếm 95%. Để triển khai ISA bằng kiến trúc RISC ta sẽ triển khai các chỉ thị S bằng phần cứng và chỉ thị C bằng phần mềm (dùng đoạn chỉ thị S và coi như 1 chỉ thị giả C). So sánh với kiến trúc CISC, các chỉ thị S sẽ được thực hiện nhanh hơn 20% và các chỉ thị CISC bị chậm đi 3 lần. Kiến trúc nào có hiệu năng cao hơn và cao hơn bao nhiêu lần? HUST-FET, 13/02/201156Chương 2. Ngôn ngữ máy tính và các phép toán Kiến trúc tập lệnh MIPS Định dạng chỉ thị: 32 bit 3 loại định dạng: R-chỉ thị thanh ghi: 2 toán hạng nguồn thanh ghi, 1 toán hạng đích thanh ghi  I-chỉ thị trực tiếp: 1 toán hạng nguồn thanh ghi, 1 toán hạng nguồn trực tiếp, 1 toán hạng đích thanh ghi J-chỉ thị nhảy: 1 toán hạng nguồn trực tiếp HUST-FET, 13/02/201157Chương 2. Ngôn ngữ máy tính và các phép toán op op op rs rt rd sa funct rs rt immediate jump target R format I format J format Nguyên tắc thiết kế MIPS (RISC) HUST-FET, 13/02/201158Chương 2. Ngôn ngữ máy tính và các phép toán  Tính đơn giản quan trọng hơn tính quy tắc(Simplicity favors regularity)  Chỉ thị kích thước cố định (32 bit)  Ít định dạng chỉ thị (3 loại định dạng)  Mã lệnh ở vị trí cố định (6 bit đầu)  Nhỏ hơn thì nhanh hơn  Số chỉ thị giới hạn  Số thanh ghi giới hạn  Số chế độ địa chỉ giới hạn  Tăng tốc các trường hợp thông dụng  Các toán hạng số học lấy từ thanh ghi (máy tính dựa trên cơ chế load- store)  Các chỉ thị có thể chứa toán hạng trực tiếp  Thiết kế tốt đòi hỏi sự thỏa hiệp  3 loại định dạng chỉ thị Chỉ thị số học của MIPS HUST-FET, 13/02/201159 Mã hợp ngữ của chỉ thị số học add $t0, $s1, $s2 sub $t0, $s1, $s2  Mỗi chỉ thị số học thực hiện một phép toán  Mỗi chỉ thị chứa chính xác ba chỉ số của các thanh ghi trong tệp thanh ghi của đường dữ liệu ($t0,$s1,$s2) destination  source1 op source2  Định dạng chỉ thị loại thanh ghi (R format) 0 17 18 8 0 0x22 Các trường trong chỉ thị MIPS HUST-FET, 13/02/201160Chương 2. Ngôn ngữ máy tính và các phép toán Các trường trong 1 chỉ thị MIPS được đặt tên: op rs rt rd shamt funct op 6-bits mã lệnh xác định phép toán (opcode) rs 5-bits chỉ số thanh ghi chứa toán hạng nguồn 1 trong tệp thanh ghi rt 5-bits chỉ số thanh ghi chứa toán hạng nguồn 2 trong tệp thanh ghi rd 5-bits chỉ số thanh ghi sẽ lưu kết quả trong tệp thanh ghi shamt 5-bits số lượng dịch (cho chỉ thị dịch) funct 6-bits mã chức năng thêm cho phần mã lệnh Tệp thanh ghi của MIPS HUST-FET, 13/02/201161Chương 2. Ngôn ngữ máy tính và các phép toán Register File src1 addr src2 addr dst addr write data 32 bits src1 data src2 data 32 locations 325 32 5 5 32 write control  Gồm 32 thanh ghi 32-bit  2 cổng đọc  1 cổng ghi  Thanh ghi:  Nhanh hơn bộ nhớ chính - Nhiều thanh ghi sẽ chậm hơn (VD., 1 tệp gồm 64 thanh ghi word sẽ chậm hơn tệp gổm 32 thanh ghi khoảng 50%) - Số lượng cổng đọc ghi ảnh hưởng bậc 2 đến tốc độ  Dễ biên dịch - VD., (A*B) – (C*D) – (E*F) có thể thực hiện phép nhân theo thứ tự bất kỳ, không giống như ngăn xếp  Chứa biến chương trình - cải thiện độ lớn mã chương trình Các thanh ghi MIPS HUST-FET, 13/02/201162Chương 2. Ngôn ngữ máy tính và các phép toán Tên Chỉ số Công dụng Preserve on call? $zero 0 constant 0 (hardware) n.a. $at 1 reserved for assembler n.a. $v0 - $v1 2-3 returned values no $a0 - $a3 4-7 arguments yes $t0 - $t7 8-15 temporaries no $s0 - $s7 16-23 saved values yes $t8 - $t9 24-25 temporaries no $gp 28 global pointer yes $sp 29 stack pointer yes $fp 30 frame pointer yes $ra 31 return addr (hardware) yes Truy cập bộ nhớ HUST-FET, 13/02/201163Chương 2. Ngôn ngữ máy tính và các phép toán  2 chỉ thị dịch chuyển dữ liệu để truy cập bộ nhớ o lw $t0, 4($s3) #đọc 1 từ từ bộ nhớ o sw $t0, 8($s3) #ghi 1 từ vào bộ nhớ  Dữ liệu được đọc vào (lw) hoặc ghi ra từ (sw) 1 thanh ghi trong tệp thanh ghi – 5 bit chỉ số thanh ghi  32 bit địa chỉ bộ nhớ được tạo ra bằng cách cộng giá trị thanh ghi cơ sở (base register) với giá trị offset  Trường offset rộng 16 bit sẽ giới hạn các ô nhớ trong khoảng 213 hay 8,192 words (215 hay 32,768 bytes) tính từ giá trị của thanh ghi cơ sở Định dạng lệnh truy cập bộ nhớ HUST-FET, 13/02/201164Chương 2. Ngôn ngữ máy tính và các phép toán  Định dạng chỉ thị Load/Store (Định dạng I): lw $t0, 24($s3) 35 19 8 2410 Memory data word address (hex) 0x00000000 0x00000004 0x00000008 0x0000000c 0xf f f f f f f f $s3 0x12004094 2410 + $s3 = . . . 0001 1000 + . . . 1001 0100 . . . 1010 1100 = 0x120040ac 0x120040ac$t0 Ví dụ 2.5. Truy cập bảng (array) HUST-FET, 13/02/201165  Cho A[ ] = là 1 mảng bắt đầu tại địa chỉ cơ sở lưu trong thanh ghi $s3;  Biến h được gắn với thanh ghi $s2;  Dịch: A[5] = h + A[8]  Thành mã hợp ngữ MIPS: lw $t0, 32 ($s3) # $t0  A[8] add $t0, $s2, $t0 # $t0  h+$t0 sw $t0, 20 ($s3) # A[5]  $t0 OP rs rt immediateI-type 8 7 6 5 4 3 2 1 Ví dụ 2.6. Truy cập mảng với chỉ số thay đổi HUST-FET, 13/02/201166  A[ ] = array with base address in $s3;  variables g, h, i associated with registers $s1, $s2, $s4  Compile: g = h + A[i]  into MIPS instructions: add $t1, $s4, $s4 # $t1  i+i = 2i add $t1, $t1, $t1 # $t1  2i+2i = 4i add $t1, $t1, $s3 # $t1  address of A[i] lw $t0, 0 ($t1) # $t0  A[i] add $s1, $s2, $t0 # $s1  h + A[i] Lưu trữ byte: Endianess (Nhắc lại) HUST-FET, 13/02/201167 Big Endian: leftmost byte is word address Little Endian: rightmost byte is word address Thanh ghi lsb 3 2 1 0 Địa chỉ:little endian byte 0 0 1 2 3 Địa chỉ:big endian byte 0 msb Đọc và ghi byte HUST-FET, 13/02/201168 MIPS các lệnh đặc biệt để dịch chuyển bytes lb $t0, 1($s3) #load byte from memory sb $t0, 6($s3) #store byte to memory op rs rt 16 bit number Các byte 8bit nào được đọc và ghi?  Lệnh đọc đưa byte được đọc vào 8 bit ngoài cùng bên phải từ bộ nhớ vào thanh ghi đích - Các bit khác của thanh ghi?  Lệnh ghi lấy 8 bit ngoài cùng bên phải của thanh ghi nguồn và ghi vào bộ nhớ - Giữ các byte khác trong từ nhớ không thay đổi Ví dụ 2.7. Đọc ghi byte HUST-FET, 13/02/201169 Cho đoạn mã sau và trạng thái bộ nhớ. Xác định trạng thái bộ nhớ sau khi thực hiện đoạn mã add $s3, $zero, $zero lb $t0, 1($s3) sb $t0, 6($s3) Memory 0x 0 0 9 0 1 2 A 0 Data Word Address (Decimal) 0 4 8 12 16 20 24 0x F F F F F F F F 0x 0 1 0 0 0 4 0 2 0x 1 0 0 0 0 0 1 0 0x 0 0 0 0 0 0 0 0 0x 0 0 0 0 0 0 0 0 0x 0 0 0 0 0 0 0 0  Giá trị lưu trong $t0?  Điều gì xảy ra khi máy tính là loại little Endian?  Từ nào được ghi vào bộ nhớ ở vị trí nào? Đọc ghi nửa từ HUST-FET, 13/02/201170 MIPS also provides special instructions to move half words lh $t0, 1($s3) #load half word from memory sh $t0, 6($s3) #store half word to memory op rs rt 16 bit number What 16 bits get loaded and stored?  load half word places the half word from memory in the rightmost 16 bits of the destination register - what happens to the other bits in the register?  store half word takes the half word from the rightmost 16 bits of the register and writes it to the half word in memory - leaving the other half word in the memory word unchanged Lệnh trực tiếp HUST-FET, 13/02/201171Chương 2. Ngôn ngữ máy tính và các phép toán addi $sp, $sp, 4 #$sp = $sp + 4 slti $t0, $s2, 15 #$t0 = 1 if $s2<15  Định dạng mã máy (Định dạng I):  Các hằng số trong chương trình thường có giá trị nhỏ  Các phương pháp lưu trữ và sử dụng hằng số:  Lưu các hằng thường dùng trong bộ nhớ và đọc chúng  Tạo 1 thanh ghi kết nối cứng (như $zero) để lưu hằng số  Dùng các lệnh đặc biệt có chứa hằng số 0x0A 18 8 0x0F  Hằng số được chứa trong lệnh!  Định dạng trực tiếp giới hạn giá trị trong khoảng +215–1 to -215 Lệnh dịch HUST-FET, 13/02/201172Chương 2. Ngôn ngữ máy tính và các phép toán  Shifts move all the bits in a word left or right sll $t2, $s0, 8 #$t2 = $s0 << 8 bits srl $t2, $s0, 8 #$t2 = $s0 >> 8 bits  Instruction Format (R format)  Such shifts are called logical because they fill with zeros  Notice that a 5-bit shamt field is enough to shift a 32-bit value 25 – 1 or 31 bit positions 0 16 10 8 0x00 Lệnh logic HUST-FET, 13/02/201173Chương 2. Ngôn ngữ máy tính và các phép toán  There are a number of bit-wise logical operations in the MIPS ISA and $t0, $t1, $t2 #$t0 = $t1 & $t2 or $t0, $t1, $t2 #$t0 = $t1 | $t2 nor $t0, $t1, $t2 #$t0 = not($t1 | $t2)  Instruction Format (R format) andi $t0, $t1, 0xFF00 #$t0 = $t1 & ff00 ori $t0, $t1, 0xFF00 #$t0 = $t1 | ff00  Instruction Format (I format) 0 9 10 8 0 0x24 0x0D 9 8 0xFF00 Sử dụng các hằng số lớn HUST-FET, 13/02/201174  Đưa 1 hằng số 32 bit vào 1 thanh ghi  Sử dụng 2 lệnh:  Lệnh nạp vào phần cao "load upper immediate“ lui $t0, 0xaaaa  Lệnh nạp vào phần thấp: ori $t0, $t0, 0xaaaa 16 0 8 1010101010101010 1010101010101010 0000000000000000 1010101010101010 0000000000000000 1010101010101010 1010101010101010 Lệnh điều khiển dòng chương trình HUST-FET, 13/02/201175Chương 2. Ngôn ngữ máy tính và các phép toán  Lệnh rẽ nhánh có điều kiện: bne $s0, $s1, Lbl #go to Lbl if $s0$s1 beq $s0, $s1, Lbl #go to Lbl if $s0=$s1  Ex: if (i==j) h = i + j; bne $s0, $s1, Lbl1 add $s3, $s0, $s1 Lbl1: ...  Định dạng lệnh (Định dạng I): 0x05 16 17 16 bit offset  Địa chỉ đến được xác định như thế nào ? Xác định địa chỉ rẽ nhánh đến HUST-FET, 13/02/201176  Sử dụng 1 thanh ghi (giống như lw và sw) cộng với 16-bit offset  Thanh ghi địa chỉ lệnh PC (Instruction Address Register ) - Việc sử dụng PC được tự động bao hàm trong lệnh - PC được cập nhật (PC+4) khi lệnh được nạp vì vậy khi tính toán nó chứa giá trị địa chỉ của lệnh kế tiếp  giới hạn khoảng cách rẽ nhánh trong khoảng -215 đến +215-1 (word) lệnh kể từ lệnh sau lệnh rẽ nhánh. Tuy nhiên phần lớn các rẽ nhánh là địa phương. PC Add 32 32 32 32 32 offset 16 32 00 sign-extend Trường 16 bit thấp của lệnh rẽ nhánh branch dst address ? Add 4 32 So sánh hỗ trợ lệnh rẽ nhánh HUST-FET, 13/02/201177  Có lệnh beq, bne, các loại điều kiện khác? (VD., rẽ nhánh nếu nhỏ hơn)? Cần 1 lệnh so sánh khác: slt  Set on less than: slt $t0, $s0, $s1 # if $s0 < $s1 then # $t0 = 1 else # $t0 = 0  Instruction format (R format):  Các phiên bản khác của slt slti $t0, $s0, 25 # if $s0 < 25 then $t0=1 ... sltu $t0, $s0, $s1 # if $s0 < $s1 then $t0=1 ... sltiu $t0, $s0, 25 # if $s0 < 25 then $t0=1 ... 0 16 17 8 0x24 Sử dụng slt HUST-FET, 13/02/201178  Dùng slt, beq, bne, và giá trị 0 trong thanh ghi $zero để tạo ra các điều kiện rẽ nhánh khác  less than blt $s1, $s2, Label  less than or equal to ble $s1, $s2, Label  greater than bgt $s1, $s2, Label  great than or equal to bge $s1, $s2, Label  Các lệnh rẽ nhánh được thêm vào tập lệnh như các lệnh giả, được nhận dạng và mở rộng bằng trình dịch assembler  Trình dịch assembler cần thanh ghi riêng ($at) slt $at, $s1, $s2 #$at set to 1 if bne $at, $zero, Label #$s1 < $s2 Lệnh nhảy không điều kiện HUST-FET, 13/02/201179  Lệnh nhảy không điều kiện: j label #go to label  Định dạng lệnh (J Format): 0x02 26-bit address PC 4 32 26 32 00 từ trường 26 bits thấp của lệnh nhảy Nhảy đến địa chỉ ở xa HUST-FET, 13/02/201180  Khi địa chỉ nhảy đến ở xa hơn, và không thể biểu diễn bằng 16 bits?  Phần mềm assembler hỗ trợ – nó chèn 1 lệnh nhảy không điều kiện đến địa chỉ nhảy đến và đảo điều kiện rẽ nhánh beq $s0, $s1, L1 trở thành bne $s0, $s1, L2 j L1 L2: Nhảy đến địa chỉ thay đổi HUST-FET, 13/02/201181  Các ngôn ngữ bậc cao có các lệnh như case hay switch cho phép lựa chọn trong nhiều trường hợp phụ thuộc vào 1 biến  Lệnh: jr $t1 #go to address in $t1  Mã máy: op rs funct 0 9 0 0 0 8 = 0x08 R format Lệnh case (switch) ở ngôn ngữ bậc cao HUST-FET, 13/02/201182 switch (k) { case 0: h=i+j; break; /*k=0*/ case 1: h=i+h; break; /*k=1*/ case 2: h=i-j; break; /*k=2*/  Giả sử 3 từ liên tiếp trong bộ nhớ bắt đầu từ địa chỉ lưu trong $t4 chứa giá trị của các nhãn L0, L1, và L2 và k lưu trong $s2 $t4 L2 L1 L0 Memory add $t1, $s2, $s2 #$t1 = 2*k add $t1, $t1, $t1 #$t1 = 4*k add $t1, $t1, $t4 #$t1 = addr of JumpT[k] lw $t0, 0($t1) #$t0 = JumpT[k] jr $t0 #jump based on $t0 L0: add $s3, $s0, $s1 #k=0 so h=i+j j Exit L1: add $s3, $s0, $s3 #k=1 so h=i+h j Exit L2: sub $s3, $s0, $s1 #k=2 so h=i-j Exit: . . .  Các từ lưu địa chỉ các nhãn như trên gọi là bảng địa chỉ nhảy (jump address table)  Bảng này chứa dữ liệu nhưng thường nằm chung với đoạn mã chương trình Gọi hàm hoặc thủ tục HUST-FET, 13/02/201183 1. Hàm chính (hàm gọi, caller) đặt các tham số vào vị trị mà thủ tục (hàm bị gọi, callee) có thể truy cập  $a0 - $a3: 4 thanh ghi tham số 2. Hàm gọi chuyển quyền điều khiển cho hàm bị gọi 3. Hàm bị gọi được cấp chỗ lưu trữ cần thiết 4. Hàm bị gọi thực hiện công việc mong muốn 5. Hàm bị gọi đặt kết quả vào vị trí hàm gọi có thể truy cập  $v0 - $v1: 2 thanh ghi kết quả 6. Hàm bị gọi trả điều khiển cho hàm gọi  $ra: 1 thanh ghi địa chỉ trở về để quay về vị trí xuất phát Lệnh để gọi 1 hàm HUST-FET, 13/02/201184  MIPS procedure call instruction: jal ProcAddress #jump and link  Lưu PC+4 vào thanh ghi $ra như là đường dẫn đến lệnh kế tiếp khi trở về từ hàm  Định dạng mã máy:  Hàm sẽ trở về hàm gọi bằng: jr $ra #return op 26 bit address J format 3 ???? Tổng kết MIPS HUST-FET, 13/02/201185  Các loại lệnh  Load/Store  Computational  Jump and Branch  Floating Point - coprocessor  Memory Management  Special  3 định dạng lệnh: độ rộng 32 bit R0 - R31 PC HI LO OP rs rt rd shamt funct OP rs rt 16 bit number OP 26 bit jump target Registers R format I format 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits J format Tổng kết các lệnh MIPS HUST-FET, 13/02/201186 Category Instr OpC Example Meaning Arithmetic (R & I format) add 0 & 20 add $s1, $s2, $s3 $s1 = $s2 + $s3 subtract 0 & 22 sub $s1, $s2, $s3 $s1 = $s2 - $s3 add immediate 8 addi $s1, $s2, 4 $s1 = $s2 + 4 shift left logical 0 & 00 sll $s1, $s2, 4 $s1 = $s2 << 4 shift right logical 0 & 02 srl $s1, $s2, 4 $s1 = $s2 >> 4 (fill with zeros) shift right arithmetic 0 & 03 sra $s1, $s2, 4 $s1 = $s2 >> 4 (fill with sign bit) and 0 & 24 and $s1, $s2, $s3 $s1 = $s2 & $s3 or 0 & 25 or $s1, $s2, $s3 $s1 = $s2 | $s3 nor 0 & 27 nor $s1, $s2, $s3 $s1 = not ($s2 | $s3) and immediate c and $s1, $s2, ff00 $s1 = $s2 & 0xff00 or immediate d or $s1, $s2, ff00 $s1 = $s2 | 0xff00 load upper immediate f lui $s1, 0xffff $s1 = 0xffff0000 Tổng kết các lệnh MIPS HUST-FET, 13/02/201187 Category Instr OpC Example Meaning Data transfer (I format) load word 23 lw $s1, 100($s2) $s1 = Memory($s2+100) store word 2b sw $s1, 100($s2) Memory($s2+100) = $s1 load byte 20 lb $s1, 101($s2) $s1 = Memory($s2+101) store byte 28 sb $s1, 101($s2) Memory($s2+101) = $s1 load half 21 lh $s1, 101($s2) $s1 = Memory($s2+102) store half 29 sh $s1, 101($s2) Memory($s2+102) = $s1 Cond. branch (I & R format) br on equal 4 beq $s1, $s2, L if ($s1==$s2) go to L br on not equal 5 bne $s1, $s2, L if ($s1 !=$s2) go to L set on less than immediate a slti $s1, $s2, 100 if ($s2<100) $s1=1; else $s1=0 set on less than 0 & 2a slt $s1, $s2, $s3 if ($s2<$s3) $s1=1; else $s1=0 Uncond. jump jump 2 j 2500 go to 10000 jump register 0 & 08 jr $t1 go to $t1 jump and link 3 jal 2500 go to 10000; $ra=PC+4 Tổ chức máy tính MIPS HUST-FET, 13/02/201188 Processor Memory 32 bits 230 words read/write addr read data write data word address (binary) 00000 00100 01000 01100 11100 Register File src1 addr src2 addr dst addr write data 32 bits src1 data src2 data 32 registers ($zero - $ra) 32 32 32 32 32 32 5 5 5 PC ALU 32 32 32 32 32 0 1 2 3 7654 byte address (big Endian) Fetch PC = PC+4 DecodeExec Add 32 32 4 Add 32 32 br offset Chế độ địa chỉ MIPS HUST-FET, 13/02/201189 1. Register addressing op rs rt rd funct Register word operand op rs rt offset 2. Base addressing base register Memory word or byte operand 3. Immediate addressing op rs rt operand 4. PC-relative addressing Program Counter (PC) Memory branch destination instruction 5. Pseudo-direct addressing op jump address Program Counter (PC) Memory jump destination instruction|| op rs rt offset Nguyên tắc thiết kế RISC HUST-FET, 13/02/201190 Simplicity favors regularity  fixed size instructions – 32-bits  small number of instruction formats Smaller is faster  limited instruction set  limited number of registers in register file  limited number of addressing modes Good design demands good compromises  three instruction formats Make the common case fast  arithmetic operands from the register file (load-store machine)  allow instructions to contain immediate operands Biên dịch HUST-FET, 13/02/201191 C program compiler assembly code Biến đổi chương trình C thành hợp ngữ  Các ưu điểm của chương trình ngôn ngữ bậc cao  Số dòng mã ít hơn rất nhiều  dễ hiểu dễ biên dịch   Ngày nay các trình biên dịch tối ưu có thể tạo ra mã hợp ngữ tốt như chuyên gia lập trình và thường tốt hơn khi dịch các chương trình lớn  Kích thước mã nhỏ hơn, tốc độ nhanh hơn Assembler HUST-FET, 13/02/201192 C program compiler assembly code assembler object code Kiểm tra cú pháp mã hợp ngữ và chuyển đổi mã biểu tượng (mã hợp ngữ) thành mã đổi tượng (mã máy).  Chú ý: Khi xác định hiệu năng cần đếm số chỉ thị được thực thi chứ không phải kích thước mã chương trình.  Ưu điểm của assembler  Dễ nhớ  Sử dụng nhãn địa chỉ - giá trị địa chỉ được tính bởi assembler  Sử dụng chỉ thị giả - VD., “move $t0, $t1” chỉ có trong assembler và sẽ được chuyển thành chỉ thị “add $t0,$t1,$zero”) Nhiệm vụ chính của assembler HUST-FET, 13/02/201193 1. Tạo bảng biểu tượng (symbol table) chứa tên biểu tượng (nhãn) và địa chỉ tương ứng  1 biểu tượng địa phương được sử dụng trong tệp nó được định nghĩa. Biểu tượng được quy ước mặc định là địa phương.  1 biểu tượng toàn cục (ngoại) tham chiếu/được tham chiếu đến mã hoặc dữ liệu ở 1 tệp. Các biểu tượng toàn cục được khai báo rõ ràng là toàn cục (VD., .globl main) 2. Dịch các lệnh ở mã hợp ngữ thành ngôn ngữ máy bằng cách “lắp ghép” các giá trị số tương ứng với mã lệnh (opcode), chỉ số thanh ghi (register specifiers), số bít dịch (shift amounts), và độ lệch các lệnh jump/branch. Các nhiệm vụ khác của Assembler HUST-FET, 13/02/201194  Thay mã giả lệnh bằng mã hợp ngữ hợp lệ  Thanh ghi $at được dành riêng cho assembler để làm việc này  Thay lệnh rẽ nhánh xa bằng 1 lệnh rẽ nhánh gần theo sau bởi 1 lệnh nhảy  Thay lệnh với giá trị tức thời lớn bằng lệnh lui theo sau bởi 1 lệnh ori  Đổi các số ở dạng thập phân và hệ 16 thành các số ở dạng nhị phân và ký tự thành mã ASCII tương ứng.  Xử lý các dẫn hướng sắp xếp dữ liệu (e.g., .asciiz)  Triển khai các macro thành các chuỗi chỉ thị Sơ đồ bộ nhớ MIPS HUST-FET, 13/02/201195 Memory 230 words 0000 0000 f f f f f f f c Text Segment Reserved Static data Mem Map I/O 0040 0000 1000 0000 1000 8000 7f f f f f fc Stack Dynamic data $sp $gp PC Kernel Code & Data Cấu trúc 1 tệp mã máy HUST-FET, 13/02/201196  Object file header: kích thước và vị trí các phần sau trong tệp  Text (code) segment (.text) : mã máy  Data segment (.data) : dữ liệu đi kèm với mã  Dữ liệu tĩnh (static data) – được cấp phát trong toàn bộ quá trình chạy  Dữ liệu động (dynamic data) – cấp phát khi cần thiết  Relocation information: xác định các lệnh (dữ liệu) sử dụng (nằm tại vị trị) địa chỉ tuyệt đối – không liên quan đến 1 thanh ghi (kể cả PC)  Trên MIPS các lệnh j, jal, và 1 số lệnh đọc ghi (VD., lw $t1, 100($zero) ) sử dụ

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_mon_kien_truc_may_tinh_chuong_2_ngon_ngu_may_tinh.pdf
Tài liệu liên quan