1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo môn học assembly language and computer architechture lab it 3280e

33 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Báo Cáo Môn Học Assembly Language And Computer Architechture Lab IT 3280E
Tác giả Hà Quang Thiều - 20184309, Phan Hùng Khánh - 20184277
Người hướng dẫn TS. Đỗ Cộng Thuần
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Assembly Language and Computer Architechture Lab
Thể loại final project
Năm xuất bản 2020-2021
Thành phố Hà Nội
Định dạng
Số trang 33
Dung lượng 2,66 MB

Cấu trúc

  • I. Bài 1 (4)
    • 1. Đềề bài (4)
    • 2. Phân tch cách th c hi n ự ệ (4)
    • 3. Ý nghĩa các ch ươ ng trình con (5)
    • 4. Kềết qu ch y ch ả ạ ươ ng trình (7)
  • II. Bài 7 (7)
    • 1. Đềề bài: Ch ươ ng trình ki m tra cú pháp l nh MIPS: ể ệ (7)
    • 2. Phân tch cách th c hi n: ự ệ (7)
    • 3. Ý nghĩa ch ươ ng trình con (8)
    • 4. Kềết qu th c hi n ả ự ệ (9)
  • III. Source Code (10)
    • 1. Bài 6 (10)
    • 2. Bài 7 (0)

Nội dung

Báo cáo Final - project 20212Architechture Lab Trong báo cáo này , nhóm em xin được trình bày n i d ng th c hi n các ch đềầ đã độụựệủược phần cỗng nh sau:ưPhầần 1: Bài 6 do Phan Hùng Khá

Bài 1

Đềề bài

Đềầ bài: Hàm cầấp phát b nh malloc() ộ ớ Mỗ t : Ch ả ươ ng trình cho bền d ướ i là hàm malloc(), kèm theo đó là ví d minh h a, ụ ọ đ ượ c viềất băầng h p ng MIPS, đ cầấp phát b nh cho m t biềấn con tr nào đó.Hãy ợ ữ ể ộ ớ ộ ỏ đ c ch ọ ươ ng trình và hi u rõ nguyền tăấc cầấp phát b nh đ ng.Trền c s đó, hãy ể ộ ớ ộ ơ ở hoàn thi n ch ệ ươ ng trình nh sau L u ý, ngoài viềất các hàm đó, cầần viềất thềm m t ư ư ộ sỗấ ví d minh h a đ thầấy vi c s d ng hàm đó nh thềấ nào ụ ọ ể ệ ử ụ ư

1) Vi c cầấp phát b nh ki u word/m ng word có 1 lỗỗi, đó là ch a b o đ m qui tăấc ệ ộ ớ ể ả ư ả ả đ a ch c a ki u word ph i chia hềất cho 4 Hãy khăấc ph c lỗỗi này ị ỉ ủ ể ả ụ

2) Viềất hàm lầấy giá tr Word /Byte c a biềấn con tr (t ị ủ ỏ ươ ng t nh *CharPtr, *BytePtr, ự ư

*WordPtr) 3) Viềất hàm lầấy đ a ch biềấn con tr (t ị ỉ ỏ ươ ng t nh &CharPtr, &BytePtr, *WordPtr) ự ư 4) Viềất hàm th c hi n copy 2 con tr xầu kí t (Xem ví d vềầ CharPtr) ự ệ ỏ ự ụ

5) Viềất hàm tnh toàn b l ộ ượ ng b nh đã cầấp phát cho các biềấn đ ng ộ ớ ộ 6) Hãy viềất hàm Malloc2 đ cầấp phát cho m ng 2 chiềầu ki u word v i tham sỗấ vào ể ả ể ớ gỗầm: a.Đ a ch đầầu c a m ng ị ỉ ủ ả b.Sỗấ dòng c.Sỗấ c t ộ7) Tiềấp theo cầu 6, hãy viềất 2 hàm GetArray[i][j] và SetArray[i][j] đ lầấy/thiềất l p giá ể ậ tr cho phầần t dòng i c t j c a m ng ị ử ở ộ ủ ả

Phân tch cách th c hi n ự ệ

Đỗấi v i t ng phầần: ớ ừ 1) Vi c cầấp phát b nh ki u word/m ng word có 1 lỗỗi, đó là ch a b o đ m qui tăấc ệ ộ ớ ể ả ư ả ả đ a ch c a ki u word ph i chia hềất cho 4 Hãy khăấc ph c lỗỗi này ị ỉ ủ ể ả ụ Trong phầần này, t i hàm cầấp phát b nh malloc, xầy d ng m t hàm ạ ộ ớ ự ộ checkDevide4 đ ki m tra xem đ a ch c a ki u đã chia hềất cho 4 hay ch a, ể ể ị ỉ ủ ể ư nềấu ch a, hãy tăng giá tr c a đ a ch đó ư ị ủ ị ỉ

2) Viềất hàm lầấy giá tr Word /Byte c a biềấn con tr (t ị ủ ỏ ươ ng t nh *CharPtr, ự ư

*BytePtr, *WordPtr) Đ lầấy giá tr c a m t biềấn con tr , s d ng hàm lw đ lầấy giá tr t i ỗ nh , có ể ị ủ ộ ỏ ử ụ ể ị ạ ớ đ a ch t ị ỉ ươ ng đ ươ ng v i giá tr c a con tr đó ớ ị ủ ỏ 3) Viềất hàm lầấy đ a ch biềấn con tr (t ị ỉ ỏ ươ ng t nh &CharPtr, &BytePtr, *WordPtr) ự ư Đ lầấy đ a ch c a biềấn con tr , ch cầần load giá tr c a con tr và in ra ể ị ỉ ủ ỏ ỉ ị ủ ỏ 4) Viềất hàm th c hi n copy 2 con tr xầu kí t (Xem ví d vềầ CharPtr) ự ệ ỏ ự ụ Đ copy 2 con tr xầu kí t , tr ể ỏ ự ướ c tền lầấy đ a ch c a con tr cầần copy, sau đó ị ỉ ủ ỏ l u nó vào vùng nh c a con tr th 2 ư ớ ủ ỏ ứ

5) Viềất hàm tnh toàn b l ộ ượ ng b nh đã cầấp phát cho các biềấn đ ng ộ ớ ộ Trong yều cầầu này, có hai tr ườ ng h p cầần tnh toán: ợ

- TH1: Tính kích th ướ c th c dùng đã cung cầấp cho các con tr , trong tr ự ỏ ườ ng h p này, ch cầần tnh t ng kích th ợ ỉ ổ ướ c t i phầần cầấp phát ạ

- TH2: Tính kích th ướ c đã dùng sau khi chu n hóa, trong tr ẩ ườ ng h p này, ợ ngoài vi c tnh kích th ệ c t i phầần cầấp phát, cầần c ng thềm c phầần ướ ạ ộ ả chu n hóa c a các biềấn con tr ẩ ủ ỏ

6) Hãy viềất hàm Malloc2 đ cầấp phát cho m ng 2 chiềầu ki u word v i tham sỗấ vào ể ả ể ớ gỗầm: a.Đ a ch đầầu c a m ng ị ỉ ủ ả b.Sỗấ dòng c.Sỗấ c t ộ B i vì trong b nh , các ỗ nh đ ở ộ ớ ớ ượ c săấp xềấp theo th t , khỗng ph i d ng ứ ự ả ạ m ng, nền th c chầất, vi c cầấp phát b nh cho m t m ng 2 chiềầu t ả ự ệ ộ ớ ộ ả ươ ng đ ươ ng v i vi c cầấp phát cho m ng này m t dãy ỗ nh liềần nhau v i kích ớ ệ ả ộ ớ ớ th ướ c băầng ( sỗấ dòng * sỗấ c t * kích th ộ ướ c ki u ) ể

7) Tiềấp theo cầu 6, hãy viềất 2 hàm GetArray[i][j] và SetArray[i][j] đ lầấy/thiềất l p giá ể ậ tr cho phầần t dòng i c t j c a m ng ị ử ở ộ ủ ả

Theo ph ươ ng pháp cầấp phát b nh phầần 6), t i phầần này, tr ộ ớ ở ạ ướ c tền, chúng ta seỗ tm v trí ỗ nh đ ị ớ ượ c gán cho phầần t hàng i, c t j c a m ng, ử ộ ủ ả băầng cách (đ a ch đầầu c a m ng + (i * sỗấ dòng c a m ng + j)* kích th ị ỉ ủ ả ủ ả ướ c ki u ể Sau khi tm đ ượ c v trí ỗ nh đó, tềấn hành Set (băầng l nh sw) ho c Get ị ớ ệ ặ(băầng lw) giá tr phầần t t i v trí [i][j] ị ử ạ ị

Ý nghĩa các ch ươ ng trình con

a SysInitMem: Kh i t o vùng cầấp phát đ ng, đánh dầấu v trí băất đầầu c a vùng ở ạ ộ ị ủ có th cầấp phát b nh đ ng ể ộ ớ ộ b malloc: hàm cầấp phát b nh cho các biềấn con tr ộ ớ ỏ Input: - $a0: đ a ch c a biềấn con tr ị ỉ ủ ỏ

- $s1: sỗấ phầần tử - $a2: kích th ướ c mỗỗi phầần t ử Kích th ướ c c a vùng nh seỗ đ ủ ớ ượ c tnh băầng $s1*$a2, sau đó c ng thềm ộ phầần chu n hóa ẩ

Output: - $v0: đ a ch c a biềấn con tr cầần c p nh t ị ỉ ủ ỏ ậ ậ c checkDevide4: Hàm chu n hóa, ki m tra xem đ a ch đã th a mãn chia hềất ẩ ể ị ỉ ỏ cho 4 hay ch a, nềấu ch a thì c ng thềm 1 và tềấp t c l p l i ư ư ộ ụ ặ ạ

Input: - $t8: đ a ch hi n t i ị ỉ ệ ạ Outpyt: -$t8: đ a ch sau khi đ ị ỉ ượ c chu n hóa ẩ

5 d done: Hoàn thành cỗng vi c chu n hóa và l u l i đ a ch đầầu tền m i là đ a ệ ẩ ư ạ ị ỉ ớ ị ch hi n t i cho các hàm malloc tềấp theo ỉ ệ ạ e getValue: Hàm lầấy giá tr c a m t con tr , ị ủ ộ ỏ Input: -$a0: đ a ch c a con tr ị ỉ ủ ỏ

Output: -$v0: giá tr c a biềấn con tr $a0 ị ủ ỏ f getAddress: Hàm lầấy đ a ch c a biềấn con tr ị ỉ ủ ỏ Input: -$a0: đ a ch c a biềấn con tr ị ỉ ủ ỏ

Output: tr vềầ giá tr $a0 ả ị g CopyPointer: Hàm copy đ a ch c a con tr này, vào m t con tr khác ị ỉ ủ ỏ ộ ỏ

Input: - $a0: đ a ch c a biềấn con tr nguỗần ị ỉ ủ ỏ Output: -$v0: đ a ch c a biềấn con tr đích ị ỉ ủ ỏ h CalculateMemory: Tính toán l ượ ng b nh đã s d ng (ch a tnh phầần chu n ộ ớ ử ụ ư ẩ hóa ) Đ tnh t ng l ể ổ ượ ng b nh đã s d ng, dùng m t thanh ghi $t0 là biềấn ộ ớ ử ụ ộ toàn c c, $t0 seỗ đ ụ ượ c tăng thềm đúng m t l ộ ượ ng băầng b nh đ ộ ớ ượ c cầấp phát cho con tr đó Hàm CalculateMemory seỗ tr vềầ giá tr $t0 hi n t i khi đ ỏ ả ị ệ ạ ượ c g i đềấn ọ i CalculateMemory2: Tính toán l ượ ng b nh đã s d ng (đã tnh phầần chu n ộ ớ ử ụ ẩ hóa ) Cách ho t đ ng t ạ ộ ươ ng t v i hàm CalculateMemory, khác bi t chỗỗ, ự ớ ệ ở thành ghi $t3 (biềấn toàn c c l u tr l ụ ư ữ ượ ng b nh s d ng) ngoài vi c c ng ộ ớ ử ụ ệ ộ thềm kích th ướ c đ ượ c cung cầấp, seỗ c ng thềm phầần kích th ộ ướ c đ ượ c chu n ẩ hóa (đ th a mãn chia hềất cho 4) Hàm CalculateMemory2 seỗ tr vềầ giá tr $t3 ể ỏ ả ị hi n t i khi đ ệ ạ ượ c g i đềấn ọ j malloc2, checkDevide4_2, và done_2: các hàm này ho t đ ng t ạ ộ ươ ng t nh ự ư các hàm malloc, checkDevide4, và done trền ở k GetArrayAt: hàm lầấy giá tr t i v trí c th c a m ng ị ạ ị ụ ể ủ ả Input: - $a0: đ a ch đầầu tền c a m ng ị ỉ ủ ả

- $a1: v trí dòng ị - $a2: v trí c t ị ộ Output: - $v0: giá tr c a phầần t t i v trí [i][j] c a m ng ị ủ ử ạ ị ủ ả

6 l SetArrayAt: hàm đ t giá tr t i v trí c th c a m ng ặ ị ạ ị ụ ể ủ ả Input: - $v0: giá tr cầần đ t cho phầần t th [i][j] c a m ng ị ặ ử ứ ủ ả

- $a0: đ a ch đầầu tền c a m ng ị ỉ ủ ả - $a1: v trí dòng ị

- $a2: v trí c t ị ộ m exit: Hàm thoát ch ươ ng trình do lỗỗi index

Kềết qu ch y ch ả ạ ươ ng trình

Sau khi ch y ch ạ ươ ng trình, thu đ ượ c kềất qu c a các cầu h i t 1-7 nh sau: ả ủ ỏ ừ ư

Bài 7

Đềề bài: Ch ươ ng trình ki m tra cú pháp l nh MIPS: ể ệ

Trình biền d ch c a b x lý MIPS seỗ tềấn hành ki m tra cú pháp các l nh h p ng trong ị ủ ộ ử ể ệ ợ ữ mã nguỗần, xem có phù h p vềầ cú pháp hay khỗng, rỗầi m i tềấn hành d ch các l nh ra mã ợ ớ ị ệ máy Hãy viềất m t ch ộ ươ ng trình ki m tra cú pháp c a 1 l nh h p ng MIPS bầất kì ể ủ ệ ợ ữ (khỗng làm v i gi l nh) nh sau: ớ ả ệ ư

- Nh p vào t bàn phím m t dòng l nh h p ng Ví d beq s1,31,t4 ậ ừ ộ ệ ợ ữ ụ - Ki m tra xem mã opcode có đúng hay khỗng? Trong ví d trền, opcode là beq là h p l ể ụ ợ ệ thì hi n th thỗng báo “opcode: beq, h p l ” ệ ị ợ ệ

- Ki m tra xem tền các toán h ng phía sau có h p l hay khỗng? Trong ví d trền, toán ể ạ ợ ệ ụ h ng s1 là h p l , 31 là khỗng h p l , t4 thì kh i ph i ki m tra n a vì toán h ng tr ạ ợ ệ ợ ệ ỏ ả ể ữ ạ ướ c đã b sai rỗầi ị

- Cho biềất l nh h p ng đó cầần bao nhiều chu kì thì m i th c hi n xong ệ ợ ữ ớ ự ệG i ý: nền xầy d ng m t cầấu trúc ch a khuỗn d ng c a t ng l nh v i tền l nh, ki u c a ợ ự ộ ứ ạ ủ ừ ệ ớ ệ ể ủ toán h ng 1, toán h ng 2, toán h ng 3, sỗấ chu kì th c hi n ạ ạ ạ ự ệ

Phân tch cách th c hi n: ự ệ

Bài toán đ t ra đầy: Nh p vào 1 cầu l nh, sau đó ki m trra cú pháp c a cầu l nh ặ ở ậ ệ ể ủ ệ Do đó, ra chia thành các bài toán nh : ỏ

L u l i cầu l nh và chia thành các phầần gỗầm opcode + toán h ng ư ạ ệ ạ Ki m tra opcode ể

Ki m tra sỗấ l ể ượ ng, cầấu trúc c a các toán h ng có đúng khỗng ủ ạ L u ý vi c b qua kho ng trăấng ư ệ ỏ ả

In kềất quả Ngoài ra, ta cũng xầy d ng cầấu trúc ch a khuỗn d ng c a t ng l nh v i tền l nh, ki u ự ứ ạ ủ ừ ệ ớ ệ ể c a toán h ng 1, toán h ng 2, toán h ng 3, sỗấ chu kì th c hi n và cầấu trúc l u các ủ ạ ạ ạ ự ệ ư thanh ghi đ ki m tra ể ể

C th , vi c phần tch cầu l nh đ ụ ể ệ ệ ượ c th hi n qua s đỗầ d ể ệ ơ ướ i đầy:

Ý nghĩa ch ươ ng trình con

+) open_and_read_fle: ý nghĩa c a ch ủ ươ ng trình này seỗ m và đ c các fle cầấu trúc có săỗn ở ọ gỗầm: Register.txt và Opcode.txt Sau khi m các fle thì d li u c a Opcode.txt seỗ đ ở ữ ệ ủ ượ ư c l u trong Library_Opcode và d li u c a Register seỗ đ ữ ệ ủ ượ ư c l u trong List_Register

+) skipSpace: ý nghĩa c a ch ủ ươ ng trình con này là seỗ b qua các kho ng trăấng Trong quá ỏ ả trình nh p, ng ậ i dùng seỗ ngăn cách cách thành phầần băầng các kho ng trăấng, c th là ‘ ’ ườ ả ụ ể ho c ‘\tab’ Trong hàm này seỗ s d ng $s2 l u đ a ch c a Command, và $s7 l u v trí c a kí ặ ử ụ ư ị ỉ ủ ư ị ủ t đang xét trong Command ự

+) check_Opcode: ý nghĩa c a hàm này là seỗ ki m tra Opcode có h p l hay khỗng? Băầng ủ ể ợ ệ cách truy xuầất d li u vềầ opcode đ ữ ệ ượ ư c l u trong Library_Opcode

Hàm seỗ tr vềầ kềất qu $v0: băầng 0 khi opcode khỗng h p l , băầng 1 khi opcode h p l ả ả ợ ệ ợ ệ

+) check_ToanHang: hàm này seỗ giúp th c hi n vi c ki m tra s h p l c a các toán h ng ự ệ ệ ể ự ợ ệ ủ ạ t ươ ng ng v i t ng Opcode ứ ớ ừ

Hàm seỗ tr vềầ kềất qu $v0: băầng 0 khi khỗng h p l , băầng 1 khi h p l ả ả ợ ệ ợ ệ

T i ch ạ ươ ng trình con này, seỗ s d ng các ch ử ụ ươ ng trình con khác gỗầm:

-) read_Toan_Hang: đ c và l u toán h ng vào ToanHang1, ToanHang2, ToanHang3 ọ ư ạ -) check_register: ki m tra xem toán h ng có ph i thanh ghi hay khỗng? ể ạ ả Hàm có các param:

[in] $s1: ch a đ a ch c a toán h ng ứ ị ỉ ủ ạ [out] $v0: băầng 0 khi khỗng h p l , băầng 1 khi h p l ợ ệ ợ ệ -) check_Number: ki m tra xem toán h ng có ph i sỗấ nguyền hay khỗng? ể ạ ả Hàm có các param:

[in] $s1: ch a đ a ch c a toán h ng ứ ị ỉ ủ ạ [out] $v0: băầng 0 khi khỗng h p l , băầng 1 khi h p l ợ ệ ợ ệ -) check_Hex: ki m tra xem toán h ng có ph i sỗấ Hex hay khỗng? ể ạ ả Hàm có các param:

[in] $s1: ch a đ a ch c a toán h ng ứ ị ỉ ủ ạ [out] $v0: băầng 0 khi khỗng h p l , băầng 1 khi h p l ợ ệ ợ ệ -) check_Label: ki m tra xem toán h ng có ph i Label h p l hay khỗng? ể ạ ả ợ ệ Hàm có các param:

[in] $s1: ch a đ a ch c a toán h ng ứ ị ỉ ủ ạ[out] $v0: băầng 0 khi khỗng h p l , băầng 1 khi h p l ợ ệ ợ ệ

Kềết qu th c hi n ả ự ệ

+) Ki m tra cầu l nh: div $s1, $s2, $s3 ể ệ

+) Ki m tra cầu l nh: div $s1, $s2 ể ệ

+) Ki m tra cầu l nh: j main ể ệ

Source Code

Bài 6

# 1)Vi c c p phát b nh ki u word/m ng wordcó 1 l i, đó là ch a b o đ m qui t c đ a ch c a ki u ấ ộ ớ ể ả ỗ ư ả ả ắ ị ỉ ủ ể wordph i chia h t cho 4 Hãy kh c ph c l i này. ả ế ắ ụ ỗ

# 2)Vi t hàm l y giá tr Word /Byte c a bi n con tr (t ng t nh *CharPtr, *BytePtr, *WordPtr) ấ ị ủ ế ỏ ươ ự ư

# 3)Vi t hàm l y đ a ch bi n con tr (t ng t nh &CharPtr, &BytePtr, *WordPtr) ế ấ ị ỉ ế ỏ ươ ự ư

# 4)Vi t hàm th c hi n copy 2 con tr xâu kí t (Xem ví d v CharPtr) ế ự ệ ỏ ự ụ ề

# 5)Vi t hàm tính toàn b l ng b nh đã c p phát cho các bi n đ ng ế ộ ượ ộ ớ ấ ế ộ

# 6)Hãy vi t hàm Malloc2 đ c p phát cho m ng 2 chi u ki u word v i tham s vào g m: ế ể ấ ả ề ể ớ ố ồ

# 7)Ti p theo câu 6, hãy vi t 2 hàm GetArray[i][j] và SetArray[i][j] đ l y/thi t l p giá tr cho ế ể ấ ế ậ ị ph n t dòng I c t j c a m ng. ầ ử ở ộ ủ ả

.data CharPtr: word 0 # Bien con tro, tro toi kieu asciiz BytePtr: word 0 # Bien con tro, tro toi kieu Byte WordPtr: word 0 # Bien con tro, tro toi mang kieu Word CpyCharPtr: word 0

Message11: asciiz "Dia chi o nho CharPtr da chuan hoa la: "

Message12: asciiz "Dia chi o nho BytePtr da chuan hoa la: "

Message13: asciiz "Dia chi o nho WordPtr da chuan hoa la: "

Message21: asciiz " Gia tri cua con tro CharPtr la: "

Message22: asciiz " Gia tri cua con tro BytePtr la: "

Message23: asciiz " Gia tri cua con tro WordPtr la: "

Message31: asciiz " Dia chi cua bien con tro la: "

Message32: asciiz " Dia chi cua bien con tro la: "

Message33: asciiz " Dia chi cua bien con tro la: "

Message4: asciiz "Q4: Dia chi cua con tro va con tro copy la: "

Message5: asciiz "Q5: Luong bo nho da cap phat la: "

Message6: asciiz "Q6: Luong bo nho sau khi su dung malloc 2 (thuc dung vs chuan hoa): "

Message71: asciiz "Q7.1: SetArray[3][3], Set gia tri 1007 cho phan tu vi tri [3][3] cua mang co dia chi la: "

Message72: asciiz "Q7.2: GetArray[3][3], Lay gia tri phan tu vi tri [3][3] cua mang: " exitMess: asciiz "The index is out of range"

#Bien chua dia chi dau tien cua vung nho con trong Sys_TheTopOfFree: word 1

#Vung khong gian tu do, dung de cap bo nho cho cac bien con tro Sys_MyFreeSpace:

#Khoi tao bien dem bo nho dung thuc li $t0, 0

#Khoi tao bien dem bo nho dung sau chuan hoa li $t3, 0

#Khoi tao vung nho cap phat dong jal SysInitMem

# Cap phat cho bien con tro, gom 3 phan tu, moi phan tu 1 byte

# - la $a0, CharPtr addi $a1, $zero, 3 addi $a2, $zero, 1 li $v0, 4 la $a0, Message11 syscall jal malloc

11 la $a0, CharPtr jal getValue add $a0, $v0, $zero li $v0, 1 syscall li $v0, 4 la $a0, newline syscall li $v0, 4 la $a0, Message31 syscall la $a0, CharPtr jal getAddress add $a0, $v0, $zero li $v0, 1 syscall li $v0, 4 la $a0, newline syscall

# Cap phat cho bien con tro, gom 6 phan tu, moi phan tu 1 byte

# - la $a0, BytePtr addi $a1, $zero, 6 addi $a2, $zero, 1 li $v0, 1 sw $v0, 0($a0) li $v0, 4 la $a0, Message12 syscall jal malloc li $v0, 4 la $a0, Message22 syscall la $a0, BytePtr jal getValue add $a0, $v0, $zero li $v0, 1 syscall li $v0, 4 la $a0, newline syscall li $v0, 4 la $a0, Message32 syscall la $a0, BytePtr jal getAddress add $a0, $v0, $zero

12 li $v0, 1 syscall li $v0, 4 la $a0, newline syscall

# Cap phat cho bien con tro, gom 5 phan tu, moi phan tu 4 byte

# - la $a0, WordPtr addi $a1, $zero, 5 addi $a2, $zero, 4 li $v0, 4 la $a0, Message13 syscall jal malloc li $v0, 4 la $a0, Message23 syscall la $a0, WordPtr jal getValue add $a0, $v0, $zero li $v0, 1 syscall li $v0, 4 la $a0, newline syscall li $v0, 4 la $a0, Message33 syscall la $a0, WordPtr jal getAddress add $a0, $v0, $zero li $v0, 1 syscall li $v0, 4 la $a0, newline syscall

# Question 4: Copy hai con tro

# - li $v0, 4 la $a0, Message4 syscall la $a0, CharPtr li $v0, 1 syscall

13 li $v0, 4 la $a0, Space syscall la $a0, CharPtr la $a1, CpyCharPtr jal CopyPointer add $a1,$a1,$zero li $v0, 1 syscall li $v0, 4 la $a0, newline syscall

#Question 5: Tinh tong bo nho su dung

# - li $v0, 4 la $a0, Message5 syscall jal CalculateMemory li $v0,1 syscall li $v0, 4 la $a0, Space syscall jal CalculateMemory2 li $v0,1 syscall li $v0, 4 la $a0, newline syscall

# Cap phat cho mang con tro word 2 chieu, gom 5 dong, 5 cot moi phan tu 4 byte

# - la $a0, ArrayWordPtr la $a1, MaxDong lw $a1,0($a1) la $a2, MaxCot lw $a2, 0($a2) jal malloc2 li $v0, 4 la $a0, Message6 syscall jal CalculateMemory li $v0,1 syscall li $v0, 4 la $a0, Space

14 syscall jal CalculateMemory2 li $v0,1 syscall li $v0, 4 la $a0, newline syscall li $v0, 4 la $a0, Message71 syscall li $v0, 1007 la $a0, ArrayWordPtr li $a1,3 la $s0, MaxDong lw $s0, 0($s0) bge $a1, $s0, exit li $a2, 3 la $s0, MaxCot lw $s0, 0($s0) bge $a2, $s0, exit jal SetArrayAt li $v0, 1 syscall li $v0, 4 la $a0, newline syscall li $v0, 4 la $a0, Message72 syscall la $a0, ArrayWordPtr li $a1,3 la $s0, MaxDong lw $s0, 0($s0) bge $a1, $s0, exit li $a2, 3 la $s0, MaxCot lw $s0, 0($s0) bge $a2, $s0, exit jal GetArrayAt add $a0,$v0,$zero li $v0, 1 syscall li $v0, 4 la $a0, newline syscall lock: j lock

# Ham khoi tao cho viec cap phat dong

# @detail Danh dau vi tri bat dau cua vung nho co the cap phat duoc

# - SysInitMem: la $t9, Sys_TheTopOfFree #Lay con tro chua dau tien con trong, khoi tao la $t7, Sys_MyFreeSpace #Lay dia chi dau tien con trong, khoi tao sw $t7, 0($t9) #Luu lai jr $ra

# Ham cap phat bo nho dong cho cac bien con tro

# @param [in/out] $a0 Chua dia chi cua bien con tro can cap nhat

# Khi ham ket thuc, dia chi vung nho duoc

# cap phat se luu tru vao bien con tro

# @param [in] $a1 So phan tu can cap nhat

# @param [in] $a2 Kich thuoc 1 phan tu, tinh theo byte

# @return $v0 Dia chi cua vung nho can cap nhat

# - malloc: la $t9, Sys_TheTopOfFree lw $t8, 0($t9) #Lay dia chi dau tien con trong sub $t3,$t3,$t8 li $v0, 1 add $a0, $t8, $zero syscall li $v0, 4 la $a0, Space syscall checkDevide4: li $t4, 4 div $t8, $t4 mfhi $t5 beq $t5, $zero, done addi $t8, $t8,1 j checkDevide4 done: add $t3, $t8, $t3 li $v0, 1 add $a0, $t8, $zero syscall li $v0, 4 la $a0, newline syscall sb $t8, 0($a0) #Cat dia chi do vao bien con tro addi $v0, $t8, 0 #Dong thoi la ket qua tra ve cua ham mul $t7, $a1, $a2 #Tinh kich thuoc cua mang can cap nhat add $t0, $t0, $t7 add $t3, $t3, $t7 add $t6, $t8, $t7 #Tinh dia chi dau tien con trong

16 sw $t6, 0($t9) #Luu tro lai dia chi dau tien do vao bien Sys_TheTopOfFree jr $ra

# Ham lay gia tri cua bien con tro

# @param [in] $a0 Chua dia chi cua bien con tro can lay gia tri

# @return $v0 Gia tri cua bien con tro

# Ham lay dia chi cua bien con tro

# @param [in] $a0 Chua dia chi cua bien con tro can lay dia chi

# @return $v0 dia chi cua bien con tro

# - getAddress: add $v0, $zero, $a0 jr $ra

# Ham Copy 2 con tro xau ki tu

# @param [in] $a0 Chua dia chi cua bien con tro nguon

# [in] $a1 Chua dia chi cua bien con tro dich

#Khong tinh phan nhay coc dia chi CalculateMemory: add $a0, $zero, $t0 jr $ra

#Khong tinh phan nhay coc dia chi CalculateMemory2: add $a0, $t3, $zero jr $ra

# Ham cap phat bo nho dong cho cac bien con tro

# @param [in] $a0 Chua dia chi dau tien

# @return $v0 Dia chi cua vung nho can cap nhat

17 lw $t8, 0($t9) #Lay dia chi dau tien con trong sub $t3,$t3, $t8 checkDevide4_2: li $t4, 4 div $t8, $t4 mfhi $t5 beq $t5, $zero, done_2 addi $t8, $t8,1 j checkDevide4_2 done_2:

#syscall add $t3,$t3,$t8 sw $t8, 0($a0) #Cat dia chi do vao bien con tro addi $v0, $t8, 0 #Dong thoi la ket qua tra ve cua ham mul $t7, $a1, $a2 #Tinh so luong phan tu mul $t7, $t7, 4 #Tinh kich thuoc bo nho can cung cap add $t0, $t0, $t7 add $t3, $t3, $t7 add $t6, $t8, $t7 #Tinh dia chi dau tien con trong sw $t6, 0($t9) #Luu tro lai dia chi dau tien do vao bien

# - GetArrayAt: la $t1, MaxDong lw $t1,0($t1) la $t2, MaxCot lw $t2, 0($t2) mul $t7, $a1, $t2 add $t7, $t7, $a2 mul $t7, $t7, 4 add $a0, $a0, $t7 lw $v0, 0($a0) jr $ra

# - SetArrayAt: la $t1, MaxDong lw $t1,0($t1) la $t2, MaxCot lw $t2, 0($t2) mul $t7, $a1, $t2 add $t7, $t7, $a2 mul $t7, $t7, 4 add $a0, $a0, $t7 sw $v0, 0($a0) jr $ra exit:

18 open_file_registers: li $v0, 13 la $a0, File_Registers li $a1, 0 syscall # mo file Registers.txt. move $s1, $v0 bltz $s1, error # kiem tra file co doc duoc ko? read_file_registers: li $v0, 14 move $a0, $s1 la $a1, List_Registers #Luu tai List_Register li $a2, 500 syscall # doc file Registers.txt

# INPUT AND SAVE THE COMMAND #

#################################################################################### input_command: li $v0, 4 la $a0, Message_input syscall li $v0, 8 la $a0, Command li $a1, 100 syscall # nhap vao dong lenh end_input_command:

# - print: print_Command: li $v0, 4 la $a0, Message1_Command # message 1 command syscall la $a0, Command syscall # in ra Command la $a0, Message2_Command syscall # message 2 command

# CHECK THE COMMAND THEN RETURN RESULTS #

#################################################################################### xy_ly_Command: add $s7, $0, $0 # khoi tao index = 0 add $s6, $0, $0 # s6 : address OpCode in Library_Opcode (neu co) jal skipSpace # bo qua khoang trang

#s2 hien tai dang la address of Command nop check_OpcodeOfCommand: jal check_Opcode # kiem tra opcode co hop le nop beq $v0, $0, waning_opcode # ko hop le -> waning_Opcode li $v0, 4 # hop le -> in ra OpCode hop le!

21 la $a0, Message1_Opcode syscall li $v0, 4 la $a0, OpCode syscall li $v0, 4 la $a0, Message2_Opcode syscall check_ToanHang: jal skipSpace # bo qua khoang trang nop jal check_Toan_Hang # kiem tra cac toan hang cua OpCode nop beq $v0, $0, waning_command check_cac_ky_tu_con_lai: jal skipSpace # bo qua khang trang nop

# - phan bo qua chu thich - add $t0, $s2, $s7 # t0 : address Command[index] lb $t1, 0($t0) # t1 = Command[index] bne $t1, 35, check_KetThuc_Command # Command[index] != '#' > check_KetThuc_Command addi $s7, $s7, 1 # index += 1 duyet_het_Command: add $t0, $s2, $s7 # t0 : address Command[index] lb $t1, 0($t0) # t1 = Command[index] beq $t1, 10, end_duyet_het_Command # Command[index] == '\n' > ket thuc addi $s7, $s7, 1 # index += 1 j duyet_het_Command end_duyet_het_Command: j Opcode_chu_ky

# - check_KetThuc_Command: bne $t1, 10, error_cu_phap # Command[index] != '\n' > lenh khong hop le!

Opcode_chu_ky: # in ra thong tin chu ky ung voi OpCode li $v0, 4 la $a0, Message_Chu_ky syscall addi $t3, $s6, 15 # t3 : address chu ky Opcode lb $t4, 0($t3) # t4 = chu ky li $v0, 11 move $a0, $t4 syscall # message chu ky li $v0, 11 addi $a0, $0, 10 syscall # xuong dong end_Opcode_chu_ky:

ThongBaoHoanThanh: # thong bao hop le li $v0, 4 la $a0, Message_ThongBao syscall end_check_CKTCL: j close_file

#################################################################################### waning: # phan canh bao trong qua trinh xu ly command waning_opcode: li $v0, 4 la $a0, Message1_Opcode

22 syscall li $v0, 4 la $a0, OpCode syscall li $v0, 4 la $a0, Waning_Opcode syscall waning_command: li $v0, 4 la $a0, Waning_Command syscall end_waning: j close_file error_cu_phap: li $v0, 4 la $a0, Waning_CuPhap syscall end_error_cu_phap: j close_file error: # bao loi doc file li $v0, 4 la $a0, Error_Open_File syscall end_error: close_file: # phan dong file close_file_opcode: li $v0, 16 move $a0, $s0 syscall # dong file OpCode.txt close_file_registers: li $v0, 16 move $a0, $s1 syscall # dong file Registers.txt end_close_file: exit: li $v0, 10 syscall # thoat CT end_main:

# Procedure skipSpace: Bo qua khoang trang #

# s2: [in]: Luu dia chi cua chuoi muon bo qua khoang trang

# s7: [in]: Chua index cua chuoi tren

#################################################################################### skipSpace: addi $sp, $sp, -20 sw $t0, 16($sp) sw $t1, 12($sp) sw $t7, 8($sp) sw $t8, 4($sp) sw $t9, 0($sp)

#Luu lai gia tri tai cac thanh ghi sap dung, tranh truong hop bi mat du lieu lap: add $t0, $s2, $s7 # get address of Command[index] baseAddress s2 + index s7 lb $t1, 0($t0) # get vakue of Command[index] then save into t1

23 seq $t9, $t1, 32 # check if t1 is equal 32 or not

# t9 = 1 if Command[index] == ' ' seq $t8, $t1, 9 # check if t1 is \tab or not

# t8 = 1 if Command[index] == '\tab' or $t7, $t8, $t9 beq $t7, $zero, end_lap # !(Command[index] == ' '

#or Command[index] == '\tab') -> done addi $s7, $s7, 1 # tang index them 1

# de kiem tra ki tu tiep theo (index++) j lap end_lap: lw $t9, 0($sp) lw $t8, 4($sp) lw $t7, 8($sp) lw $t1, 12($sp) lw $t0, 16($sp) addi $sp, $sp, 20

#da hoan thanh viec su dung, tra du lieu dang luu lai cho cac thanh ghi vua su dung end_skipSpace: jr $ra

# Procedure check_Opcode : Kiem tra opcode co hop le hay khong #

# 0 neu khong tim thay check_Opcode: luu_value_registers:

#luu lai du lieu cua cac thanh ghi sap su dung, phong truong hop bi mat du lieu addi $sp, $sp, -52 sw $s5, 48($sp) sw $t0, 44($sp) sw $t6, 40($sp) sw $t5, 36($sp) sw $s0, 32($sp) sw $s1, 28($sp) sw $t1, 24($sp) sw $t2, 20($sp) sw $t3, 16($sp) sw $t4, 12($sp) sw $t7, 8($sp) sw $t8, 4($sp) sw $t9, 0($sp)

Ngày đăng: 25/05/2024, 22:07

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w