Hướng dẫn thực hành môn Kiến trúc máy tính & Hợp Ngữ - Lập trình hợp ngữ mips
Hợp ngữ (Assembly) là ngôn ngữ lập trình bậc thấp, nó gồm tập các từ khóa và từ gợi nhớ
rất gần với ngôn ngữ máy (machine code).
Mỗi kiến trúc vi xử lý đều có tập lệnh (instruction set) riêng, do đó sẽ có hợp ngữ riêng dành
cho kiến trúc đó. Ở đây, ta tập trung nghiên cứu về hợp ngữ dành cho kiến trúc MIPS. Môi
trường lập trình được sử dụng là chương trình MARS. MARS là môi trường lập trình giả lập
giúp ta viết, biên dịch và chạy hợp ngữ MIPS trên các máy x86
rất gần với ngôn ngữ máy (machine code).
Mỗi kiến trúc vi xử lý đều có tập lệnh (instruction set) riêng, do đó sẽ có hợp ngữ riêng dành
cho kiến trúc đó. Ở đây, ta tập trung nghiên cứu về hợp ngữ dành cho kiến trúc MIPS. Môi
trường lập trình được sử dụng là chương trình MARS. MARS là môi trường lập trình giả lập
giúp ta viết, biên dịch và chạy hợp ngữ MIPS trên các máy x86
Bạn đang xem tài liệu "Hướng dẫn thực hành môn Kiến trúc máy tính & Hợp Ngữ - Lập trình hợp ngữ mips", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- huong_dan_thuc_hanh_mon_kien_truc_may_tinh_hop_ngu_lap_trinh.pdf
Nội dung text: Hướng dẫn thực hành môn Kiến trúc máy tính & Hợp Ngữ - Lập trình hợp ngữ mips
- HDTH Kiến trúc máy tính & Hợp Ngữ Bộ môn MMTVT - HCMUS Các thanh ghi trong MIPS Thanh ghi đa năng Số Tên Ý nghĩa $0 $zero Hằng số 0 $1 $at Assembler Temporary $2-$3 $v0-$v1 Giá trị trả về của hàm hoặc biểu thức $4-$7 $a0-$a3 Các tham số của hàm $8-$15 $t0-$t7 Thanh ghi tạm (không giữ giá trị trong quá trình gọi hàm) $16-$23 $s0-$s7 Thanh ghi lưu trữ (giữ giá trị trong suốt quá trình gọi hàm) $24-$25 $t8-$t9 Thanh ghi tạm $26-27 $k0-$k1 Dự trữ cho nhân HĐH $28 $gp Con trỏ toàn cục (global pointer) $29 $sp Con trỏ stack $30 $fp Con trỏ frame $31 $ra Địa chỉ trả về Thanh ghi HI và LO Thao tác nhân của MIPS có kết quả chứa trong 2 thanh ghi HI và LO. Bit 0-31 thuộc LO và 32-63 thuộc HI. Thanh ghi dấu phẩy động MIPS sử dụng 32 thanh ghi dấu phẩy động để biểu diễn độ chính xác đơn của số thực. Các thanh ghi này có tên là : $f0 – $f31. Để biểu diễn độ chính xác kép (double precision) thì MIPS sử dụng sự ghép đôi của 2 thanh ghi có độ chính xác đơn. 2
- HDTH Kiến trúc máy tính & Hợp Ngữ Bộ môn MMTVT - HCMUS Nhóm lệnh nhảy Cú pháp Ý nghĩa j label Nhảy không điều kiện đến nhãn 'label' jal label Lưu địa chỉ trở về vào $ra và nhảy đến nhãn 'label' (dùng khi gọi hàm) jr Rs Nhảy đến địa chỉ trong thanh ghi Rs (dùng để trở về từ lời gọi hàm) bgez Rs, label Nhảy đến nhãn 'label' nếu Rs >= 0 bgtz Rs, label Nhảy đến nhãn 'label' nếu Rs > 0 blez Rs, label Nhảy đến nhãn 'label' nếu Rs <= 0 bltz Rs, label Nhảy đến nhãn 'label' nếu Rs < 0 beq Rs, Rt, label Nhảy đến nhãn 'label' nếu Rs = Rt bne Rs, Rt, label Nhảy đến nhãn 'label' nếu Rs != Rt System Call: Lệnh syscall làm treo sự thực thi của chương trình và chuyển quyền điều khiển cho HĐH (được giả lập bởi MARS). Sau đó, HĐH sẽ xem giá trị thanh ghi $v0 để xác định xem chương trình muốn nó làm việc gì. Bảng các system call Dịch vụ Giá trị trong $v0 Đối số Kết quả print_int 1 $a0 = integer print_float 2 $f12 = float print_double 3 $f12 = double print_string 4 $a0 = string read_int 5 integer (trong $v0) read_float 6 float (trong $f0) read_double 7 double (trong $f0) read_string 8 $a0 = buffer, $a1 = length sbrk 9 $a0 = amount address (trong $v0) exit 10 print_character 11 $a0 = char read_character 12 char (trong $v0) Ví dụ: .data # khai báo data segment 4
- HDTH Kiến trúc máy tính & Hợp Ngữ Bộ môn MMTVT - HCMUS Đối số $a0, $a1, $a2, $a3 Kết quả trả về $v0, $v1 Biến cục bộ $s0, $s1, , $s7 Địa chỉ quay về $ra Cấu trúc của một thủ tục: Đầu thủ tục entry_label: addi $sp,$sp, -framesize # khai báo kích thước cho stack sw $ra, framesize-4($sp) # cất địa chỉ trả về của thủ tục trong $ra vào ngăn xếp Lưu tạm các thanh ghi khác (nếu cần) Thân thủ tục (có thể gọi các thủ tục khác ) Cuối thủ tục Phục hồi các thanh ghi khác (nếu cần) lw $ra, framesize-4($sp) # lấy địa chỉ trả về ra $ra addi $sp,$sp, framesize jr $ra Gọi thủ tục: jal entry_label Giới thiệu chương trình MARS 6
- HDTH Kiến trúc máy tính & Hợp Ngữ Bộ môn MMTVT - HCMUS 5. Bật, tắt việc xem địa chỉ và giá trị ô nhớ ở dạng thập phân (decimal) hay thập lục phân (hexa). 6. Địa chỉ của các khai báo nhãn và dữ liệu. 7. Các giá trị trong thanh ghi, có thể chỉnh sửa được. 8. Điểm đặt breakpoint dùng cho việc debug chương trình. 9. Điều chỉnh tốc độ chạy chương trình, cho phép người dùng có thể xem những gì diễn ra thay vì chương trình kết thúc ngay. Tài liệu tham khảo [1] - Programmed Introduction to MIPS Assembly Language, Bradley Kjell [2] - MIPS Assembly Language Programming, Robert Britton. [3] - MIPS Assembly Language Programming, Daniel J. Ellard. [4] - MIPS Architecture and Assembly Language Overview [5] - MIPS Examples Bài tập Hãy viết chương trình hợp ngữ MIPS (không dùng lệnh giả) để giải quyết các bài toán sau: 1. Nhập vào một chuỗi, xuất lại chuỗi đó ra màn hình (echo). Ví dụ: Nhap mot chuoi: Hello Chuoi da nhap: Hello 2. Nhập vào một ký tự, xuất ra ký tự liền trước và liền sau. Ví dụ: Nhap mot ky tu: b Ky tu lien truoc: a Ky tu lien sau: c 3. Nhập vào một ký tự hoa, in ra ký tự thường. Ví dụ: Nhap mot ky tu: A Ky tu thuong: a 4. Nhập từ bàn phím 2 số nguyên, tính tổng, hiệu, tích, thương của 2 số. Ví dụ: Nhap so thu nhat: 7 8