BÁO cáo môn học THỰC HÀNH KIẾN TRÚC máy TÍNH CE119 làm QUEN với lập TRÌNH hợp NGỮ

40 32 0
BÁO cáo môn học THỰC HÀNH KIẾN TRÚC máy TÍNH CE119 làm QUEN với lập TRÌNH hợp NGỮ

Đ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

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN KHOA KỸ THUẬT MÁY TÍNH BÁO CÁO MƠN HỌC THỰC HÀNH KIẾN TRÚC MÁY TÍNH CE119 GIẢNG VIÊN HƯỚNG DẪN: SINH VIÊN THỰC HIỆN: TP HỒ CHÍ MINH, THÁNG 12 NĂM 20xx ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN KHOA KỸ THUẬT MÁY TÍNH BÁO CÁO MƠN HỌC THỰC HÀNH KIẾN TRÚC MÁY TÍNH CE119 GIẢNG VIÊN HƯỚNG DẪN: SINH VIÊN THỰC HIỆN: TP HỒ CHÍ MINH, THÁNG 12 NĂM 20xx MỤC LỤC DANH MỤC HÌNH ẢNH Danh mục hình ảnh DANH MỤC BẢNG Bảng DANH MỤC TỪ VIẾT TẮT ABC : nghĩa ABC CHƯƠNG LÀM QUEN VỚI LẬP TRÌNH HỢP NGỮ 1.1 Lý thuyết 1.1.1 Cách cài đặt Ubuntu, Vim Perl Bước Cài ứng dụng Ubuntu Windows 10 + + Start → Turn Windows features on or off → Windows Subsystem for Linux Start → Store → Ubuntu → Get → Launch Bước Cài đặt Perl Vim Ubuntu + + + Sudo apt-get install perl Sudo apt-get install vim Sudo apt-get install vimtutor Bước Vimtutor để học cách sử dụng Vim 1.1.2 Cách sử dụng Vim Bài - Sử dụng phím h, j, k, l để di chuyển trỏ qua trái, xuống, lên trên, qua phải Khi nhập không chắn, nhấn phím ESC tiến hành nhập lại Để Vim, nhấn phím ESC, nhập :q! nhấn phím ENTER Nhấn phím x để xố ký tự nằm trỏ Nhấn phím i để chèn thêm văn vào trước trỏ Nhấn phím a để thêm văn Sử dụng :wq để lưu thoát Bài - Để xoá từ trỏ đến từ tiếp theo, sử dụng :dw Để xoá từ trỏ đến cuối hàng, sử dụng :d$ Để xoá hàng, sử dụng :dd Để lặp lại chuyển động, thêm vào trước số :2w Format để thay đổi câu lệnh: operator [number] motion Trong đó: + + + - operator: lệnh cần thực number: số lần lặp lại motion: di chuyển qua văn để thao tác (w – word, $ – đến cuối hàng) Để di chuyển đầu hàng, sử dụng :0 (:zero) Để hoàn tác hành động trước, sử dụng :u Để hoàn tác thay đổi hàng, sử dụng :U - Để hồn tác bỏ, sử dụng tổ hợp phím Ctrl+R Bài - Để trở văn vừa bị xoá: p, đặt văn bị xoá sau trỏ Để thay ký tự chân trỏ: r Ấn ce để thay đổi từ trỏ đến cuối từ Ấn c$ để thay đổi đến cuối hàng Bài - - - ctrl + G : hiển thị vị trí file trạng thái file + G: di chuyển đến cuối file + Number G: di chuyển đến hàng số điền + gg: di chuyển đến hàng Nhấn / để tìm cụm từ theo sau cụm từ + Tìm cụm từ lần nữa, nhấn n + Tìm cụm từ giống hướng ngược lại, nhấn N Tìm cụm từ theo hướng lùi, nhấn ? thay cho / Để trở từ nơi bạn nhấn: Ctrl + O (giữ Ctrl lúc nhấn o), lặp lại để trở Nhấn Ctrl + I để tiến tới Nhấn % lúc trỏ (, [, { để tìm ), ], } phù hợp lại (dễ debug hơn) Thay cho cũ hàng, nhấn :s/old/new Thay mới cho tất cũ hàng, nhấn :s/old/new/g Thay cụm từ hàng #, nhấn :#,#s/old/new/g Thay tất lần xuất file, nhấn :%s/old/new/g Để hỏi xác nhận sau lần thêm ‘c’, nhấn :%s/old/new/gc Bài - :!command thi hành câu lệnh :w FILENAME: viết file Vim với tên FILENAME v montion :w FILENAME: lưu dòng chọn file FILENAME :r FILENAME: lấy lại đĩa FILENAME đặt vị trí trỏ :r !dir: đọc output lệnh dir đặt vị trí trỏ Bài - Gõ o để mở hàng trỏ bắt đầu chế độ Insert Gõ O để mở hàng trỏ Gõ a để chèn văn sau trỏ Gõ A để chèn văn sau hàng cuối Gõ e để di chuyển câu lệnh tới cuối từ y để chép văn bản, p để dán Nhấn R in hoa để thay chế độ Replace phím nhấn Gõ “:set xxx” cài lựa chọn cho “xxx” Bỏ trước “no” để lựa chọn tắt: :set noic Bài - Gõ :help nhấn F1 để mở cửa sổ trợ giúp Gõ :help cmd để tìm trợ giúp cmd Gõ ctrl + W ctrl + W để nhảy đến cửa sổ khác Gõ :q để đóng cửa sổ trợ giúp Gõ : command, nhấn ctrl + D để nhìn hồn thành khả dụng, nhấn phím để sử dụng hồn thành 1.1.3 Lí thuyết chương trình hợp ngữ 1.1.3.1 Bộ nhớ - Lưu liệu theo byte, half, word - Một ký tự lưu byte - Một số nguyên lưu word - Một lệnh lưu word 1.1.3.2 Biểu diễn thơng tin - Kí số: + Hệ thập phân: Viết bình thường (17) + Hệ thập lục phân: Thêm tiền tố 0x (0x11) - Ký tự: Đặt cặp nháy đơn (‘d’) - Chuỗi: Đặt cặp nháy kép (“Integrated circuit”) (“d”) 1.1.3.3 Thanh ghi - Có 32 ghi đa dụng (từ 0->31) - Biểu diễn: Tiền tố $ theo sau số tên ($2 hay $sp) - Thanh ghi Hi Lo dành riêng cho phép nhân phép chia (mfhi , mflo) - Qui ước: + $at dành cho Trình biên dịch hợp ngữ, $k0 $k1 dành cho OS + $gp, $sp, $fp, $ra dành cho lệnh chuyên biệt, không nên sử dụng để lưu trữ tạm q trình tính tốn 1.1.3.4 Cấu trúc chương trình # Chú thích ký tự # data # Khai báo liệu sau hàng # Khai báo liệu text main: # Viết chương trình sau hang # Nhãn thể bắt đầu chương trình # Viết chương trình 1.1.3.5 Khai báo liệu [:] - Ví dụ: + + + + var1: word # biến ngun var1 có kích thước word giá trị arr1: byte ‘a’,’k’ # mảng arr1 có phần tử, phần tử byte arr2: space 40 # mảng arr2 có kích thước 40 byte liên tục str1: ascciz “ahihi” # chuỗi str1 có kết thúc null 1.2 Thực hành 1.2.1 Mô việc thực thi lệnh Bảng 1.1 – Chức số lệnh MIPS STT LỆNH VÍ DỤ CHỨC NĂNG add add $t1, $t2, $t3 Gán $t1 tổng giá trị $t2 $t3 addi addi $t1, $t2, -100 Gán $t1 tổng giá trị $t2 giá trị addu addu $t1, $t2, $t3 Tương tự lệnh add, kết trả số không dấu addiu addiu $t1, $t2, -100 Tương tự lệnh addi, kết trả số không dấu sub sub $t1, $t2, $t3 Gán $t1 kết phép trừ giá trị $t2 $t3 subu subu $t1, $t2, $t3 Tương tự lệnh sub, kết trả số không dấu and and $t1, $t2, $t3 Gán $t1 “and” giá trị luận lý $t2 $t3 andi andi $t1, $t2, 100 Gán $t1 “and” giá trị luận lý $t2 & giá trị or or $t1, $t2, $t3 Gán $t1 “or” giá trị luận lý $t2 $t3 10 nor nor $t1, $t2, $t3 Gán $t1 “nor” giá trị luận lý $t2 $t3 11 lw lw $t1, label Đưa giá trị label vào ghi $t1 kiểu word 12 sw sw $t1, label Lưu giá trị kiểu word ghi $t1 vào địa label 13 slt slt $t1, $t2, $t3 Nếu $t2 < $t3 $t1 = 1, khơng $t1 = 14 slti slti $t1, $t2, -100 Nếu $t2 < -100 $t1 = 1, khơng $t1 = 15 sltu sltu $t1, $t2, $t3 Tương tự lệnh slt dùng quy tắc so sánh không dấu 16 sltiu sltiu $t1, $t2, -100 Tương tự lệnh slti dùng quy tắc so sánh không dấu syscal 17 Gọi chức nhập xuất tuỳ thuộc theo giá trị $v0 l 1.2.2 Ý nghĩa chương trình Bảng 1.2 – Ý nghĩa chương trình mẫu STT Chương trình Ý nghĩa data var1: word 23 text start: lw li sw data array1: text start: var1 = 23 $t0, var1 $t1, $t1, var1 $t0 = *var1 $t1 = var1 = $t1 space 12 array1[12], array1=&array1[0] la $t0 = array1 = &array1[0] $t0, array1 10 .data addrA: word addrB: word addrC: word text main: lui $1, 0x00001001 lw $8, 0x00000000($1) lui lw $1, 0x00001001 $9, 0x00000004($1) add $10, lui sw $1, 0x00001001 $10,0x00000008($1) $9, $8 3.1.2 Làm việc với mảng - Mảng với n phần tử chuỗi n phần tử liên tiếp nhớ Thao tác với mảng MIPS thao tác trực tiếp với byte/word nhớ + Để cấp phát chuỗi word byte nhớ, có giá trị khởi tạo sử dụng “.word” “.byte” “.data” + Để cấp phát chuỗi byte khơng có giá trị khởi tạo trước, sử dụng “.space” “.data” - Ví dụ: clear1(int array[], int size) { int i; for (i = 0; i < size; i++) array[i] = 0; } - - Ý tưởng: $a0 địa array, $a1 kích thước array (size), tìm địa phần tử mảng (bằng cách cộng 0, 4, 8, 12, vào địa mảng $a0) lưu giá trị đó, lặp lại đến biến i ($t0) khơng nhỏ kích thước mảng ($a1) Chương trình: 26 .text add $8, $0, $0 loop: sll add sw addi slt bne $9, $8, 0x00000002 $10, $4, $9 $0, 0x00000000($10) $8, $8, 0x00000001 $11, $8, $5 $11, $0, loop 3.1.3 Làm việc với trỏ - Con trỏ biến lưu địa biến khác Thao tác với trỏ MIPS thao tác trực tiếp với địa nhớ Ví dụ: clear2(int *array, int size) { int *p; for (p = &array[0]; p < &array[size]; p++) *p = 0; } - Ý tưởng: $a0 địa array, $a1 kích thước array (size), trỏ $t0 địa phần tử đầu tiên, $t2 địa phần tử cuối (qua tính tốn), sau lặp lại việc thay đổi giá trị trỏ ($t0=0) dời trỏ sang địa phần tử ($t0+=4) trỏ $t0 không nhỏ $t2 (địa phần tử cuối) - Chương trình: add sll add loop: text $8, $0, $4 $9, $5, 0x00000002 $10,$4,$9 sw addi slt bne $0, $8, $11, $11, 0x00000000($8) $8, 0x00000004 $8, $10 $0, loop 27 3.1.4 Lý nên sử dụng trỏ - Tốc độ nhanh (vì số câu lệnh vòng lặp (LOOP) sử dụng trỏ sử dụng mảng) Đúng với chất việc truy xuất nhớ 3.2 Thực hành 3.2.1 Thao tác với mảng Cho mảng với cấp phát liệu nhớ sau: array1: size1: data word 5, 6, 7, 8, 1, 2, 3, 9, 10, word 10 array2: size2: byte word 16 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 array3: size3: space word 8 Mảng array1 có 10 words, kích thước lưu size1; Mảng array2 có 16 bytes, kích thước lưu size2; Mảng array3 có bytes, kích thước lưu size3 Viết code phần “.text” thực riêng phần việc:   In cửa sổ I/O MARS tất phần tử mảng array1 array2 Gán giá trị cho mảng array3 cho: array3[i] = array2[i] + array2[size2 – – i]  Người sử dụng nhập vào mảng thứ số phần tử cần lấy mảng đó, chương trình xuất phần tử tương ứng Trả lời: Yêu cầu 1: xuất phần tử mảng array1 array2 cửa sổ I/O: - Ý tưởng: truy xuất phần tử mảng theo số mảng, tức nghĩa dựa vào số mảng để tính tốn địa phần tử xét (mảng array1 với phần tử kiểu word có độ lớn bytes, mảng array2 với phần tử có độ lớn byte), lặp lại - cơng đoạn tính tốn đến số mảng khơng nhỏ kích thước mảng Ta có sơ đồ thuật tốn sau: 28 $a0 = &array2[$t0] $t0 = $v0 = 1, Syscall $t2 = size2 Xuất phần tử mảng $a2 = &array2 $t0 = $t0 + Bắt đầu Kết thúc $t0 = $t0 < $t2 $t1 = size1 $a1 = &array1 $a0 = &array1[$t0] Đ $v0 = 1, Syscall Xuất phần tử mảng $t0 = $t0 + Đ S $t0 < $t1 Hình 3.1 – Sơ đồ thuật tốn xuất phần tử mảng array1 array2 29 S Yêu cầu 2: thực gán giá trị cho phần tử mảng array3 theo biểu thức array3[i] = array2[i] + array2[size2 – – i] - Ý tưởng: truy xuất phần tử mảng theo số mảng (tương tự yêu cầu 1), nhiên việc tính tốn địa phần tử array2[size2 – – i] có khác so với phần tử array2[i] chỗ ta phải tính địa phần tử cuối mảng - array2 trước Ta có sơ đồ thuật tốn sau: 30 $t2 = size2 – $a2 = &array2 $t4 = *($s2) $t5 = *($s3) $t6 = $t5 + $t4 Bắt đầu *($s1) = $t6 $t0 = $t3 = size3 $a3 = &array3 $s1 = &array3[$t0] $s2 = &array2[$t0] $s3 = &array2[size2 – – $t0] Kết thúc $t0 = $t0 + 31 S Hình 3.2 – Sơ đồ thuật toán thực gán giá trị cho phần tử mảng array3 Yêu cầu 3: xuất phần tử tuỳ chọn tương ứng - Ý tưởng: số nguyên nhập vào truy xuất mảng array1, truy xuất mảng array2; thực việc truy xuất phần tử có số số nguyên nhập vào thứ hai tương tự cách tính u cầu - Ta có sơ đồ thuật toán sau: 32 Bắt đầu $v0 = 5, Syscall Nhập số nguyên Kết thúc $s0 (array1) (array2) $s0 = $v0 $v0 = 5, Syscall Nhập số nguyên $s1 số phần tử mảng $s1 = $v0 $s0 == 33 $a0 = array1[$s1] $a0 = array2[$s1] Hình 3.3 – Sơ đồ thuật tốn xuất phần tử tuỳ chọn Chương trình: $v0 = 1, Syscall Xuất số nguyên 34 3.2.2 Thao tác với trỏ Thực lại nội dung “Thao tác với mảng” với trỏ Trả lời: - - Ý tưởng: truy xuất phần tử số mảng điều kiện dừng, biến chạy phải so sánh với kích thước mảng, cịn thao tác với trỏ biến trỏ phải so sánh với biến trỏ khác chứa địa phần tử cuối Sơ đồ giải thuật: Hình 3.4 – Sơ đồ giải thuật toán thao tác với trỏ - Chương trình: 3.3 Bài tập 3.3.1 Bài tập a Đề bài: Nhập mảng số nguyên n phần tử (nhập vào số phần tử giá trị phần tử), xuất cửa sổ I/O MARS theo yêu cầu sau:    Xuất giá trị lớn nhỏ mảng Tổng tất phần tử mảng Người sử dụng nhập vào số phần tử giá trị phần tử in cửa sổ b Sơ đồ giải thuật: c Chương trình: 3.3.2 Bài tập a Đề bài: Nhập mảng số nguyên n phần tử (nhập vào số phần tử giá trị phần tử), xuất cửa sổ I/O MARS theo yêu cầu sau:    Xuất giá trị lớn nhỏ mảng Tổng tất phần tử mảng Người sử dụng nhập vào số phần tử giá trị phần tử in cửa sổ b Sơ đồ giải thuật: c Chương trình: CHƯƠNG THỦ TỤC (HÀM CON) 4.1 Lí thuyết 4.1.1 Thủ tục - Quy trình thực hiện: Lệnh A Gọi thủ tục Quay chương trình Thực thi thủ tục Lệnh C Hình 4.1 – Quy trình thực lời gọi thủ tục 4.1.2 Thủ tục với MIPS Chuẩn bị đối số Lưu trạng thái Nhảy tới thủ tục Thực thi thủ tục Chuẩn bị kết Quay chương trình (tại lệnh kế tiếp) • Quy ước: + Thanh ghi đối số: $a0 - $a3 + Thanh ghi kết quả: $v0, $v1 + Thanh ghi tạm: $t0 - $t9 + Thanh ghi lưu trữ: $s0 - $s7 + Thanh ghi địa trả về: $ra + Thanh ghi trỏ ngăn xếp: $sp • Lưu ý: phải bảo tồn liệu ngăn xếp trước gọi thủ tục 4.1.3 VÍ DỤ Bước Bước Bước Bước Bước Bước void main ( ) { int s = 0; s = sum(15,12); } int sum(int a, int b) { int t = a + b; return t; } add $s0, $0, $0 … addi $a0, $0, 15 add $a1, $0, 12 jal sumPro add $s0, $0, $v0 j exit sumPro: add $v0, $a0, $a1 jr $ra exit: 4.1.4 LỒNG THỦ TỤC Bước Bước Bước Bước Bước Bước • Lưu Chuẩn bị đối số Lưu trạng thái Nhảy tới thủ tục Thực thi thủ tục Chuẩn bị kết Quay chương trình (tại lệnh kế tiếp) ý: Trước gọi thủ tục khác phải lưu lại ghi $ra nhảy tới thủ tục (Nếu muốn chắn lưu lại ghi $sp) 4.2 Thực hành 4.2.1 IN RA CỬA SỔ I/O GIÁ TRỊ CỦA SỐ INT NHẬP VÀO CỘNG THÊM abc 4.2.2 TÍNH GIÁ TRỊ BIỂU THỨC (A+B) – (C+D) VÀ (A-B) + (C-D) abc 4.2.3 TÍNH GIÁ TRỊ BIỂU THỨC (A+B) – (C+D) VÀ (E-F) abc 4.3 Bài tập 4.3.1 TÍNH GIAI THỪA abc TÀI LIỆU THAM KHẢO [1] Làm quen cách sử dụng Vim với Vimtutor, http://notes.viphat.work/vimtutor ...ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN KHOA KỸ THUẬT MÁY TÍNH BÁO CÁO MƠN HỌC THỰC HÀNH KIẾN TRÚC MÁY TÍNH CE119 GIẢNG VIÊN HƯỚNG DẪN: SINH VIÊN THỰC... ẢNH Danh mục hình ảnh DANH MỤC BẢNG Bảng DANH MỤC TỪ VIẾT TẮT ABC : nghĩa ABC CHƯƠNG LÀM QUEN VỚI LẬP TRÌNH HỢP NGỮ 1.1 Lý thuyết 1.1.1 Cách cài đặt Ubuntu, Vim Perl Bước Cài ứng dụng Ubuntu Windows... $at dành cho Trình biên dịch hợp ngữ, $k0 $k1 dành cho OS + $gp, $sp, $fp, $ra dành cho lệnh chuyên biệt, không nên sử dụng để lưu trữ tạm q trình tính tốn 1.1.3.4 Cấu trúc chương trình # Chú

Ngày đăng: 09/04/2022, 06:39

Từ khóa liên quan

Mục lục

  • Chương 1. LÀM QUEN VỚI LẬP TRÌNH HỢP NGỮ

    • 1.1 Lý thuyết

      • 1.1.1. Cách cài đặt Ubuntu, Vim và Perl

      • 1.1.2. Cách sử dụng Vim

      • 1.1.3. Lí thuyết chương trình hợp ngữ

        • 1.1.3.1. Bộ nhớ

        • 1.1.3.2. Biểu diễn thông tin

        • 1.1.3.3. Thanh ghi

        • 1.1.3.4. Cấu trúc chương trình

        • 1.1.3.5. Khai báo dữ liệu

        • 1.2. Thực hành

          • 1.2.1. Mô phỏng việc thực thi các lệnh

          • 1.2.2. Ý nghĩa của chương trình

          • 1.3 Bài tập

            • 1.3.1. Khai báo chuỗi và xuất các chuỗi được khai báo

            • 1.3.2. Biểu diễn chuỗi trên dưới bộ nhớ

            • 1.3.3. Xuất ra đúng chuỗi đã nhập

            • 1.3.4. Tính tổng hai số nguyên được nhập từ bàn phím

            • Chương 2. CÁC CẤU TRÚC ĐIỀU KHIỂN

              • 2.1. Lí thuyết

                • 2.1.1. Cấu trúc if, if-else

                • 2.1.2. Cấu trúc switch/case

                • 2.1.3. Cấu trúc vòng lặp

                • 2.2. Thực hành

                  • 2.2.1. Cấu trúc rẽ nhánh

                  • 2.2.2. Cấu trúc vòng lặp

                  • 2.3. Bài tập

                    • 2.3.1. Phân biệt ký tự nhập vào và xuất ký tự liền trước, liền sau.

                    • 2.3.2. Tìm số lớn hơn và tính toán theo yêu cầu

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

Tài liệu liên quan