Kiến trúc máy tính & hợp ngữ - Chương 4.2

110 18 0
Kiến trúc máy tính & hợp ngữ - Chương 4.2

Đ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

Tiếp theo chương 4: giới thiệu về kích thước lệnh và nhiệm vụ cơ bản nhất của CPU và khái niệm về Hợp ngữ là một ngôn ngữ cấp thấp dùng để viết các chương trình máy tính. Cách dùng các thuật nhớ thân thiện để viết chương trình đã thay thế cách lập trình trực tiếp lên máy tính bằng mã máy dạng số- từng áp dụng cho những máy tính đầu tiên ...

KIẾN TRÚC MÁY TÍNH & HỢP NGỮ ThS Vũ Minh Trí – vmtri@fit.hcmus.edu.vn 04 – Lập trình hợp ngữ (Phần 2) Giới thiệu  Nhiệm vụ CPU phải thực lệnh yêu cầu, gọi instruction  Các CPU sử dụng tập lệnh (instruction set) khác để giao tiếp với Kích thước lệnh   Kích thước lệnh bị ảnh hưởng bởi:  Cấu trúc đường truyền bus  Kích thước tổ chức nhớ  Tốc độ CPU Giải pháp tối ưu lệnh:  Dùng lệnh có kích thước ngắn, lệnh nên thực thi chu kỳ CPU  Dùng nhớ cache Bộ lệnh MIPS  Chúng ta làm quen với tập lệnh cho kiến trúc MIPS (PlayStation 1, 2; PSP; Windows CE, Routers…)  Được xây dựng theo kiến trúc (RISC) với nguyên tắc:  Càng đơn giản, ổn định  Càng nhỏ gọn, xử lý nhanh  Tăng tốc xử lý cho trường hợp thường xuyên xảy  Thiết kế đòi hỏi thỏa hiệp tốt Cấu trúc chương trình hợp ngữ MIPS data # khai báo data label (có thể hiểu biến) # sau thị label1: label2: … text # viết lệnh sau thị globl globl main # Đây text label toàn cục bắt buộc program … main: … # điểm text label bắt đầu program Hello.asm data str: # data segment asciiz “Hello asm !” text globl # text segment main main: # starting point of program addi $v0, $0, # $v0 = + =  print str syscall la $a0, str # $a0 = address(str) syscall # excute the system call Bộ lệnh MIPS – Thanh ghi  Là đơn vị lưu trữ data CPU  Trong kiến trúc MIPS:   Có tổng cộng 32 ghi đánh số từ $0  $31  Càng dễ quản lý, tính tốn nhanh  Có thể truy xuất ghi qua tên (slide sau) Mỗi ghi có kích thước cố định 32 bit  Bị giới hạn khả tính tốn chip xử lý  Kích thước tốn hạng câu lệnh MIPS bị giới hạn 32 bit, nhóm 32 bit gọi từ (word) Thanh ghi toán hạng  Như biết lập trình, biến (variable) khái niệm quan trọng muốn biểu diễn toán hạng để tính tốn  Trong kiến trúc MIPS khơng tồn khái niệm biến, thay vào ghi tốn hạng Thanh ghi tốn hạng  Ngơn ngữ cấp cao (C, Java…): toán hạng = biến (variable)    Các biến lưu nhớ Ngơn ngữ cấp thấp (Hợp ngữ): tốn hạng chứa ghi  Thanh ghi khơng có kiểu liệu  Kiểu liệu ghi định thao tác ghi So sánh:  Ưu: Thanh ghi truy xuất nhanh nhiều nhớ  Khuyết: Khơng nhớ chính, ghi phần cứng có số lượng giới hạn cố định  Phải tính tốn kỹ sử dụng Một số ghi toán hạng quan tâm 10  Save register:  MIPS lấy ghi ($16 - $23) dùng để thực phép tính số học, đặt tên tương ứng $s0 - $s7   Tương ứng C, để chứa giá trị biến (variable) Temporary register:  MIPS lấy ghi ($8 - $15) dùng để chứa kết trung gian, đặt tên tương ứng $t0 - $t7  Tương ứng C, để chứa giá trị biến tạm (temporary variable) Vấn đề I-format 96  Trường số (immediate) có kích thước 16 bit  Nếu muốn thao tác với số 32 bit?  Tăng kích thước trường immediate thành 32 bit?  Tăng kích thước lệnh thao tác với số có cấu trúc I-format  Phá vỡ cấu trúc lệnh 32 bit MIPS Vấn đề I-format (tt) 97  Giải pháp: MIPS cung cấp lệnh “lui”  lui register, immediate  Load  Đưa Upper Immediate số 16 bit vào byte cao ghi  Giá trị byte thấp ghi gán =  Lệnh có cấu trúc I-format Ví dụ 98  Muốn cộng giá trị 32 bit 0xABABCDCD vào ghi $t0 ?  Không thể dùng: addi $t0, $t0, 0xABABCDCD  Giải pháp dùng lệnh lui: lui $at, 0xABAB ori $at, $at, 0xCDCD add $t0, $0, $at Vấn đề rẽ nhánh có điều kiện I-format 99  Các lệnh rẽ nhánh có điều kiện có cấu trúc I-format bits 5 16 opcode rs rt immediate  opcode: xác định lệnh beq hay bne  rs, rt: chứa giá trị ghi cần so sánh  immediate chứa địa (nhãn) cần nhảy tới?  immediate có 16 bit  nhảy tới địa từ – 216 (65535) ?  Chương trình bị giới hạn khơng gian nhiều  Câu trả lời: immediate KHÔNG phải chứa địa cần nhảy tới Vấn đề rẽ nhánh có điều kiện I-format (tt) 100  Trong MIPS, ghi PC (Program Counter) chứa địa lệnh thực  immediate: số có dấu, chứa khoảng cách so với địa lệnh thực nằm ghi PC   immediate + PC  địa cần nhảy tới Cách xác định địa gọi PC-Relative Addressing (định vị theo ghi PC)  Xem slide “Addressing Mode” (phần sau) để biết thêm Addressing mode MIPS Vấn đề rẽ nhánh có điều kiện I-format (tt) 101  Mỗi lệnh MIPS có kích thước 32 bit (1 word – từ nhớ)  MIPS truy xuất nhớ theo nguyên tắc Alignment Restriction  Đơn vị immediate, khoảng cách so với PC, từ nhớ (word = byte) khơng phải byte  Các lệnh rẽ nhánh nhảy tới địa có khoảng cách ± 215 word tính từ địa lưu PC (± 217 byte) Vấn đề rẽ nhánh có điều kiện I-format (tt) 102  Cách tính địa rẽ nhánh:  Nếu không rẽ nhánh: PC = PC + = địa lệnh nhớ  Nếu thực rẽ nhánh: PC = (PC + 4) + (immediate * 4)  Vì cộng immediate với (PC + 4) thay PC?  Khi rẽ nhánh bị delayed lệnh kề với lệnh rẽ nhánh  Nhận xét: immediate cho biết số lệnh cần nhảy qua để đến nhãn Ví dụ I-format 103  Loop: beq $t1, $0, End add $t0, $t0, $t2 addi $t1, $t1, -1 j Loop End: … opcode rs rt immediate 000100 01001 00000 0000 0000 0000 0000 0011  opcode = 4: Xác định thao tác lệnh beq  rs = (toán hạng nguồn thứ $t1 ~ $9)  rt = (toán hạng nguồn thứ $0 ~ $0)  immediate = (nhảy qua lệnh kể từ lệnh rẽ nhánh có điều kiện) Vấn đề I-format 104  Mỗi lệnh MIPS có kích thước 32 bit  Mong muốn: Có thể nhảy đến lệnh (MIPS hỗ trợ hàm nhảy không điều kiện j)  Nhảy khoảng 232 (4 GB) nhớ  I-format bị hạn chế giới hạn vùng nhảy  Dùng J-format  Tuy nhiên, dù format phải cần tối thiểu bit cho opcode để quán lệnh với format khác  J-format dùng 32 – = 26 bit để biểu diễn khoảng cách nhảy J-format 105  bits 26 opcode target address opcode (operation code): mã thao tác, cho biết lệnh làm (tương tự opcode R-format I-format)  Để quán với cấu trúc lệnh khác (R-format Iformat)  target address: Lưu địa đích lệnh nhảy  Tương tự lệnh rẽ nhánh, địa đích lệnh nhảy tính theo đơn vị word Nhận xét 106  Trong J-format, lệnh nhảy nhảy tới lệnh có địa khoảng 226  Muốn nhảy tới lệnh có địa lớn từ 227 đến 232 ?  MIPS  Tuy hỗ trợ lệnh jr (đọc phần thủ tục) nhiên nhu cầu khơng cần thiết chương trình thường khơng q lớn Bảng tóm tắt Format 107 31 R 31 I 31 J op 25 rs 20 rt 15 bits bits bits Opcode Source register Source register op 25 rs 20 rt rd 10 bits Destination register 15 sh fn 5 bits bits Shift amount Opcode extension operand / offset bits bits bits 16 bits Opcode Source or base Destination or data Immediate operand or address offset op 25 jump target address 0 bits 0 0 0 0 0 26 bits 0 0 0 1 1 Opcode Memory word address (byte address divided by 4) Phụ lục 4: Addressing mode 108  Là phương thức định vi trí (địa hóa) tốn hạng kiến trúc MIPS  Có phương pháp chính:  Immediate addressing (Vd: addi $t0, $t0, 5) Toán hạng = số 16 bit câu lệnh  Register addressing (Vd: add $t0, $t0, $t1) Toán hạng = nội dung ghi  Base addressing (Vd: lw $t1, 8($t0) ) Tốn hạng = nội dung nhớ (địa nhớ = nội dung ghi + số 16 bit câu lệnh)  PC-relative addressing (Vd: beq $t0, $t1, Label) Tốn hạng = địa đích lệnh nhảy = nội dung ghi PC + số 16 bit câu lệnh  Pseudodirect addressing (Vd: j 2500) Tốn hạng = địa đích lệnh nhảy = bit cao ghi PC + số 26 bit câu lệnh Addressing mode 109 Homework 110  Sách Petterson & Hennessy: Đọc hết chương  Tài liệu tham khảo: Đọc “08_HP_AppA.pdf” ...  Càng nhỏ gọn, xử lý nhanh  Tăng tốc xử lý cho trường hợp thường xuyên xảy  Thiết kế đòi hỏi thỏa hiệp tốt Cấu trúc chương trình hợp ngữ MIPS data # khai báo data label (có thể hiểu biến) #... để tính tốn  Trong kiến trúc MIPS khơng tồn khái niệm biến, thay vào ghi tốn hạng Thanh ghi tốn hạng  Ngơn ngữ cấp cao (C, Java…): toán hạng = biến (variable)    Các biến lưu nhớ Ngơn ngữ. ..  Hãy chuyển thành mã hợp ngữ MIPS: g = h + A[8]  Trả lời: lw $t0, 32($s3) add $s1, $s2, $t0 # Chứa A[8] vào $t0 Ví dụ 34  Hãy chuyển thành mã hợp ngữ MIPS: A[12] = h - A[8]  Trả lời: lw $t0,

Ngày đăng: 11/05/2021, 04:52

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

Tài liệu liên quan