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

Giới thiệu PCSPim pot

26 210 0

Đ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 26
Dung lượng 580,8 KB

Nội dung

1. Giới thiệu PCSPim PCSpim là chương trình chạy và mô phỏng chương trình hợp ngữ dành cho MIPS. Sau khi cài đặt PCSpim và chạy chương trình (Start -> All Programs -> PCSpim.exe), cửa sổ chương trình PCSpim hiện lên như hình 1. Hình 1: Cửa sổ chương trình PCSpim Cửa sổ hiển thị chia làm 4 phần: • Phần trên cùng hiển thị nội dung của 32 thanh ghi của CPU và FPU. Nội dung sẽ tự động cập nhật khi chương trình hợp ngữ chạy. • Phần dưới kế tiếp hiển thị mã của chương trình ở dạng hợp ngữ, dạng mã máy (số hex cột thứ 2 từ trái qua), và địa chỉ tương ứng của mỗi lệnh (cột đầu tiên bên trái). • Phần dưới kế tiếp hiển thị dữ liệu khai báo trong chương trình hợp ngữ (ví dụ: mảng hay chuỗi) và dữ liệu trong vùng ngăn xếp khi chương trình hợp ngữ được thực thi. • Phần dưới cùng hiển thị các thông tin phụ của SPIM, thông tin về lỗi nếu có. Chương trình hợp ngữ muốn chạy được phải được load trước. Đế load chương trình hợp ngữ (ở dạng một file có đuôi mở rộng là *.asm hay *.s), thực hiện thao tác File menu -> Open -> chọn file chứa chương trình cần load. Để tạo file *.asm, chúng ta có thể dùng các chương trình soạn thảo thô như Notepad, Notepad++, EditPlus… Hình 2. Load file chứa chương trình nguồn. Sau khi chương trình hợp ngữ đã được load, chúng ta có thể thực hiện chạy chương trình và quan sát sự thay đối giá trị các thanh ghi, các ô nhớ, vị trí và lệnh đang được thực thi … Các tác vụ chạy chương trình ở trong Simulator menu. Các bước để chạy và quan sát quá trình chạy của chương trình hợp ngữ trên PCSpim: • Chọn Simulator -> Breakpoints… (hoặc nhấn Ctrl+B). Cửa sổ hiện ra điền vào textbox Address giá trị 0x00400000, chọn Add. • Chọn Simulator -> Go (hoặc nhấn F5). Điền giá trị 0x00400000 vào texbox Starting Address, chọn OK. Giá trị của thanh ghi PC lúc này là 0x00400000. • Chọn Simulator -> Single Step (hoặc nhấn F10) để chạy từng dòng lện trong chương trình. Chúng ta có thể quan sát kết quả thực hiện thông qua giá trị của các thanh ghi, các ô nhớ liên quan. Cách khác để chạy chương trình nguồn: Simularor -> SetValue…, cửa sổ hiện ra, điền vào textbox Register Name giá trị PC, điền vào textbox Value giá trị 0x00400000. Sau đó nhấn F10 để chạy từng bước hay F5 để chạy cho đến khi gặp breakpoints. 2. Các kiến thức cơ sở 2.1 Đổi qua lại giữ số thập lục phân (hexadecimal) và số nhị phân (binary) Số thập lục phân được tạo thành từ 16 ký số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f. Số nhị phân tạo thành từ 2 ký số: 0, 1. Một ký số thập lục phân tương ứng với số nhị phân gồm 4 ký số theo bảng sau: Ví dụ: Số thập lục phân 0xeca86420 chuyển sang số nhị phân: Số nhị phân 1 0011 0101 0111 1001 1011 1101 1111 chuyển sang số thập lục phân: 2.2 Tổ chức bộ nhớ Bộ nhớ là một mảng 2 32 ô nhớ 8-bit, bắt đầu từ địa chỉ 0x000000 đến địa chỉ 0xFFFFFFFF. Người dùng chỉ có thể sử dụng vùng nhớ từ 0x00400000 đến 0x7FFFFFFF. Vùng nhớ người dùng chia làm 3 phần: vùng chứa mã (text segment), vùng chứa dữ liệu (data segment) và vùng nhớ stack (stack segment). Bộ xử lý tương tác với bộ nhớ thông qua việc di chuyển dữ liệu giữa các ô nhớ và các thanh ghi. Có hai thao tác để thực hiện việc di chuyển dữ liệu giữa bộ nhớ và thanh ghi: load và store. Dữ liệu di chuyển được tổ chức thành nhóm một, hai hay bốn byte liên tục nhau theo chiều tăng địa chỉ ô nhớ. • load: nhóm byte liên tục nhau theo chiều tăng địa chỉ ô nhớ bắt đầ u từ địa chỉ được chỉ định được copy vào thanh ghi. • store: nhóm dữ liệu 1, 2 byte thấp của thanh ghi hay cả 4 byte của thanh ghi được copy vào bộ nhớ từ địa chỉ được chỉ định. 2.3 Tổ chức thanh ghi MIPS có tấc cả 32 thanh ghi 32-bit có thê sử dụng trong ngôn ngữ assembly được liệt kê trong bảng sau: Bộ xử lý MIPS có bộ tính toán số học/luận lý (ALU) bên trong thực hiện các phép toán số học và luận lý trên số nguyên 32-bit. Phép toán thực hiện bởi ALU gồm hai toán hạng. Một toán hạng là số nguyên chứa trong thanh ghi, toán hạng còn lại có thể chứa trên thanh ghi hay là một phần của lệnh thực hiện phép toán (hằng số). Kết quả của phép toán luôn đặt vào thanh ghi. 3. Tập lệnh của MIPS Lệnh Cú pháp Định dạng lệnh Ý nghĩa Cộng số bù 2 add rd, rs, rt rd < rs+rt ; Cộng không dấu addu rd, rs, rt rd < rs+rt ; Cộng với hằng số 16 bit bù 2 addi rd, rs, const rd Å rs+const ; Cộng với hằng số 16 bit không dấu addiu rd, rs, const rd Å rs+const ; AND từng bit and rd, rs, rt rd Å bitwise AND of rs with rt AND từng bit với hằng số 16 bit andi rd, rs, const rd Å bitwise AND of rs with const Nhảy nếu bằng beq rs, rt, addr nhảy đến addr nếu rs == rt. Cần phải thêm delay theo sau (nop) Nhảy nếu lớn hơn hay bằng 0 bgez rs, addr nhảy đến addr nếu số bù 2 trong rs >= 0. Cần thêm delay Nhảy nếu nhỏ hơn 0 bltz rs, addr nhảy đến addr nếu số bù 2 trong rs < 0. Cần thêm delay Nhảy nếu khác bne rs, rt, addr nhảy đến addr nếu rs != rt. Cần thêm delay Chia hai số bù 2 div rs, rt lo Å rs div rt; hi Å rs mod rt hai số rs và rt ở dạng bù 2 Chia hai số không dấu divu rs, rt lo Å rs div rt; hi Å rs mod rt hai số rs và rt ở dạng không dấu Nhảy không điều kiện j target delay sau một chu kỳ máy: PC Å địa chỉ của target Nhảy không điều kiện và link jal target gọi hàm target, $ra = PC +4 PC Å địa chỉ của target, thêm nop Nhảy không điều kiện theo giá trị thanh ghi jr rs trở về hàm gọi, thường dùng jr $ra , PC Å $ra, cần thêm lệnh delay nop theo sau Load byte và mở rộng dấu lb rd, offset(base) rd Å byte đã được mở rộng dấu từ ô nhớ có địa chỉ base + offset, offset là số bù 2 Load byte và mở rộng số 0 đầu lbu rd, offset(base) rd Å byte đã được mở rộng 0 từ ô nhớ có địa chỉ base + offset, offset là số bù 2 Load half-word và mở rộng dấu lh rd, offset(base) rd Å 2 byte liên tiếp đã được mở rộng dấu từ ô nhớ có địa chỉ base + offset , offset là số bù 2 Load half-word và mở rộng số 0 lhu rd, offset(base) rd Å 2 byte liên tiếp đã được mở rộng 0 từ ô nhớ có địa chỉ base + offset, offset là số bù 2 Load hằng vào 16 bit cao lui rd, const 2 byte cao của rd Å 16 bit const 2 byte thấp của rd Å 0x0000 Load word lw rd, offset(base) rd Å word bộ nhớ có địa chỉ base + offset, offset là số bù 2 Chuyển giá trị từ hi vào thanh ghi mfhi rd rd Å hi Chuyển giá trị từ lo vào thanh ghi mflo rd rd Å lo Nhân hai số bù 2 mult rs, rt value(hi, lo) Å rs*rt; rs và rt là hai số bù 2 Nhân hai số không dấu multu rs, rt value(hi, lo) Å rs*rt; rs và rt là hai số không dấu NOT từng bit nor rd, rs, $0 rd Å NOT từng bit của rs NOR từng bit nor rd, rs, rt rd Å NOR từng bit của rs và rt OR từng bit or rd, rs, rt rd Å OR từng bit của rs và rt OR từng bit với hằng 16 bit or rd, rs, const rd Å OR từng bit của rs và hằng sau khi mở rộng 0 Lưu byte thấp của thanh ghi vào bộ nhớ sb rs, offset(base) byte ở offset +base Å byte thấp của rs, offset dạng bù 2 Lưu hai byte thấp vào bộ nhớ sh rs, offset(base) 2 byte ở offset +base Å 2 byte thấp của rs, offset dạng bù 2 Lệnh nop sll $0, $0, 0 tạo thời gian trễ cần thiết Dịch trái không dấu sll rd, rs, shft rd Å rs sau khi dich trái shft bit; 0 <= shft <32 So sánh hai thanh ghi dạng bù 2 slt rd, rs, rt if rs < rt rd < 1 else rd < 0 hai toán hạng dạng bù 2 So sánh thanh ghi với hằng bù 2 slti rd, rs, const if rs < const rd < 1 else rd < 0 hai toán hạng dạng bù 2 So sánh thanh ghi với hằng không dấu sltiu rd, rs, const if rs < const rd < 1 else rd < 0 hai toán hạng dạng không dấu So sánh hai thanh ghi không dấu sltu rd, rs, rt if rs < rt rd < 1 else rd < 0 hai toán hạng dạng không dấu Dịch phải có dấu sra rd, rs, shft rd Å rs sau khi dich phải shft bit và mở rộng dấu; 0 <= shft <32 Dịch phải luận lý srl rd, rs, shft rd Å rs sau khi dich phải shft bit; 0 <= shft <32 Trừ hai thanh ghi dạng bù 2 sub rd, rs, rt rd Å rs – rt; các toán hạng dạng bù 2 Trừ hai thanh ghi dạng không dấu subu rd, rs, rt rd Å rs – rt; các toán hạng dạng không dấu Lưu thanh ghi vào bộ nhớ sw rs, offset(base) word ở địa chỉ offset + base Å $rs; offset dạng bù 2 XOR từng bit xor rd, rs, rt rd Å XOR từng bit rs và rt XOR từng bit với hằng xori rd, rs, rt rd Å XOR từng bit rs và hằng sau khi mở rộng 0 4. Cú pháp của MIPS Assempler Chú thích (comment) chuỗi các từ bắt đầu bằng #, tất cả các từ bắt đầu từ # cho đến cuối dòng đều được bỏ qua. Tên định danh (identifier) là chuỗi các ký tự chữ, số, dấu gạch dưới (_) và dấu chấm (.) không bắt đầu bằng số. Tên không được trùng với các từ dành riêng là opcode của lệnh. Các ví dụ về tên định danh hợp lệ: main, loop, end_if, case1.2 Các ví dụ về tên định danh không hợp lệ: 1value # số đứng đầu b # trùng với opcode lệnh nhảy add # trùng với opcode lệnh cộng Nhãn bao gồm tên định danh theo sau là dấu hai chấm (:) được đặt ở đầu dòng. Ví dụ: Số (number) mặc định là cơ số 10. Số thập lục phân (hexadecimal) thêm 0x vào phía trước. Hai số 256 và 0x100 diễn tả số có cùng giá trị. Chuỗi (string) được đặt giữa hai dấu nháy kép (“). Ví dụ: “Hello world!\n”. Các ký tự đặt biệt cho phép trong chuỗi: Chỉ thị (directive) được hỗ trợ gồm có: Tên chỉ thị Ý nghĩa .text <addr> Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được đặt trong vùng nhớ chương trình (code segment). Tham số addr nếu có quy định địa chỉ bắt đầu của vùng nhớ chương trình dùng để lưu các phần trong phân đoạn mã chương trình này. Phần theo sau thường là các lệnh. .ktext <addr> Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được đặt vào vùng nhớ nhân (kernel) của hệ điều hành. Tham số addr nếu có quy định địa chỉ bắt đầu của vùng nhớ dùng để lưu. Phần theo sau thường là các lệnh. .globl sym Khai báo nhãn sym là toàn cục và có thể được tham khảo từ file khác .data <addr> Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được đặt trong vùng nhớ dữ liệu nhân (kernel data segment). Tham số addr nếu có quy định địa chỉ bắt đầu của vùng nhớ dùng để lưu. newline \n tab \t quote \” .data item: .word 1 .text .globl main # must be global main: … .kdata <addr> Tất cả các phần theo sau cho tới chỉ thị mới (.text, .ktext, .data, .kdata) được đặt trong vùng nhớ dữ liệu (data segment). Tham số addr nếu có quy định địa chỉ bắt đầu của vùng nhớ dùng để lưu. .ascii str Lưu chuỗi str vào bộ nhớ, không có ký tự kết thúc chuỗi (giá trị = 0) sau cùng .asciiz str Lưu chuỗi str vào bộ nhớ, thêm ký tự kết thúc chuỗi (giá trị = 0) sau cùng .byte b1, ,bn Lưu n byte liên tiếp nhau b1, ,bn vào bộ nhớ .half h1, ,hn Lưu n phần tử 16-bit liên tiếp nhau h1, ,hn vào bộ nhớ .word w1, ,wn Lưu n phần tử 32-bit liên tiếp nhau w1, ,wn vào bộ nhớ .float f1, ,fn Lưu n số thực dấu chấm động độ chính xác đơn liên tiếp nhau f1, ,fn vào bộ nhớ .double d1, ,dn Lưu n số thực dấu chấm động độ chính xác đơn liên tiếp nhau d1, ,dn vào bộ nhớ .space n Cấp phát n byte liên tiếp nhau trong phân đoạn dữ liệu hiện tại. Phải đặt sau chỉ thị .data .extern sym n Khai báo dữ liệu lưu ở sym có kích thước n byte và sym là nhãn toàn cục. Dữ liệu vùng nhớ này được truy xuất thông qua thanh ghi $gp 5. Các chương trình mẫu 5.1 Các lệnh luận lý: Thiết lập các tham số trong menu Simulator -> Settings: Bare Machine ON, Allow Pseudo Instructions OFF, Load Trap File OFF, Delayed Branches ON, Delayed Loads ON, Mapped IO OFF, Quiet OFF 5.2 Các lệnh số học: Thiết lập các tham số trong menu Simulator -> Settings: Bare Machine ON, Allow Pseudo Instructions OFF, Load Trap File OFF, Delayed Branches ON, Delayed Loads ON, Mapped IO OFF, Quiet OFF add addu div multu addi sub divu mfhi addiu subu mult mflo and ori nor andi xor sll or xori srl ## Put the bit pattern 0x0000FACE into register $1. .text .globl main main: ori $1,$0,0xFACE # 0x0000FACE into $1 andi $2,$1,0x0F0F # 0x0A0E in $2 andi $3,$1,0x00F0 # 0x00C0 in $3 sll $3,$3,8 # 0xC000 in $3 or $2,$2,$3 # 0xCA0E in $2 andi $3,$1,0xF000 # 0xF000 in $3 srl $3,$3,8 # 0x00F0 in $3 or $2,$2,$3 # 0xCAFE in $3 # done ## End of file . 1. Giới thiệu PCSPim PCSpim là chương trình chạy và mô phỏng chương trình hợp ngữ dành cho MIPS. Sau khi cài đặt PCSpim và chạy chương trình (Start -> All Programs -> PCSpim. exe),. (Start -> All Programs -> PCSpim. exe), cửa sổ chương trình PCSpim hiện lên như hình 1. Hình 1: Cửa sổ chương trình PCSpim Cửa sổ hiển thị chia làm 4 phần: • Phần trên cùng hiển thị. trong Simulator menu. Các bước để chạy và quan sát quá trình chạy của chương trình hợp ngữ trên PCSpim: • Chọn Simulator -> Breakpoints… (hoặc nhấn Ctrl+B). Cửa sổ hiện ra điền vào textbox

Ngày đăng: 03/07/2014, 07:20

w