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

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á

Trang 1

TRƯỜNG Đ I H C BÁCH KHOA HÀ N IẠỌỘ

BÁO CÁO

Final projects Course 2020-2021

Computer Architechture Lab

Gi ng viên hảướng dẫẫn:

TS Đỗỗ Cỗng Thuầần

Sinh viên th c hi n:ựệNhóm 16:

Hà Quang Thiềầu - 20184309Phan Hùng Khánh - 20184277

Mã l p:ớ 131102

Hà N i, tháng 7 năm 2022ộ

Trang 3

Báo cáo Final - project 20212

Architechture 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ánh th c hi n.ựệPhầần 2: Bài 7 do Hà Quang Thiềầu th c hi n.ựệ

Trang 4

I Bài 11.Đềề 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

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ướ ủỏứ

Trang 5

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ựỏườngh 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]ịử ạ ị

3 Ý 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ẩ

Trang 6

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átcho 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ị ủử ạ ịủả

Trang 7

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

4 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:ả ủỏ ừư

II.Bài 7

1 Đềề 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:ớả ệư

- 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.ạạạựệ

2 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 :ỏ

Trang 8

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:

3 Ý 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ảảợệợệ

Trang 9

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:

Trang 10

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

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

III Source Code

Trang 11

CharPtr: word 0 # Bien con tro, tro toi kieu asciizBytePtr: word 0 # Bien con tro, tro toi kieu ByteWordPtr: word 0 # Bien con tro, tro toi mang kieu WordCpyCharPtr: word 0

ArrayWordPtr: word 0MaxDong: word 5MaxCot: word 5Space: asciiz " -> "newline: asciiz "\n\n"

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".kdata

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

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

# -li $v0, 4la $a0, Message21syscall

Trang 12

jal getValueadd $a0, $v0, $zeroli $v0, 1syscall

li $v0, 4la $a0, newlinesyscall

li $v0, 4la $a0, Message31syscall

la $a0, CharPtrjal getAddressadd $a0, $v0, $zeroli $v0, 1syscall

li $v0, 4la $a0, newlinesyscall

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

la $a0, BytePtraddi $a1, $zero, 6addi $a2, $zero, 1li $v0, 1sw $v0, 0($a0)li $v0, 4la $a0, Message12syscalljal malloc

li $v0, 4la $a0, Message22syscall

la $a0, BytePtrjal getValueadd $a0, $v0, $zeroli $v0, 1syscall

li $v0, 4la $a0, newlinesyscall

li $v0, 4la $a0, Message32syscall

la $a0, BytePtrjal getAddressadd $a0, $v0, $zero

Trang 13

li $v0, 4la $a0, newlinesyscall

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

la $a0, WordPtraddi $a1, $zero, 5addi $a2, $zero, 4

li $v0, 4la $a0, Message13syscalljal malloc

li $v0, 4la $a0, Message23syscall

la $a0, WordPtrjal getValueadd $a0, $v0, $zeroli $v0, 1syscall

li $v0, 4la $a0, newlinesyscall

li $v0, 4la $a0, Message33syscall

la $a0, WordPtrjal getAddressadd $a0, $v0, $zeroli $v0, 1syscall

li $v0, 4la $a0, newlinesyscall

# Question 4: Copy hai con tro# -li $v0, 4

# -la $a0, Message4syscall

la $a0, CharPtr li $v0, 1syscall

Trang 14

la $a0, Spacesyscall

la $a0, CharPtrla $a1, CpyCharPtrjal CopyPointeradd $a1,$a1,$zeroli $v0, 1syscall

li $v0, 4la $a0, newlinesyscall

#Question 5: Tinh tong bo nho su dung# -

# -li $v0, 4la $a0, Message5syscall

jal CalculateMemoryli $v0,1syscallli $v0, 4la $a0, Spacesyscalljal CalculateMemory2li $v0,1syscall

li $v0, 4la $a0, newlinesyscall

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

la $a0, ArrayWordPtrla $a1, MaxDonglw $a1,0($a1)la $a2, MaxCotlw $a2, 0($a2)jal malloc2

li $v0, 4la $a0, Message6syscall

jal CalculateMemoryli $v0,1syscallli $v0, 4la $a0, Space

Trang 15

jal CalculateMemory2li $v0,1syscall

li $v0, 4la $a0, newlinesyscall

li $v0, 4la $a0, Message71syscall

li $v0, 1007la $a0, ArrayWordPtrli $a1,3la $s0, MaxDonglw $s0, 0($s0)bge $a1, $s0, exitli $a2, 3la $s0, MaxCotlw $s0, 0($s0)bge $a2, $s0, exitjal SetArrayAtli $v0, 1syscall

li $v0, 4la $a0, newlinesyscall

li $v0, 4la $a0, Message72syscall

la $a0, ArrayWordPtrli $a1,3la $s0, MaxDonglw $s0, 0($s0)bge $a1, $s0, exitli $a2, 3la $s0, MaxCotlw $s0, 0($s0)bge $a2, $s0, exitjal GetArrayAtadd $a0,$v0,$zeroli $v0, 1syscall

li $v0, 4la $a0, newlinesyscalllock:j lock

Trang 16

# Ham khoi tao cho viec cap phat dong

# -# @param khong co

# @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 taola $t7, Sys_MyFreeSpace #Lay dia chi dau tien con trong, khoi tao

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

duoc

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

# -la $t9, Sys_TheTopOfFree

lw $t8, 0($t9) #Lay dia chi dau tien con trongsub $t3,$t3,$t8

li $v0, 1add $a0, $t8, $zerosyscall

li $v0, 4la $a0, SpacesyscallcheckDevide4:

li $t4, 4div $t8, $t4mfhi $t5beq $t5, $zero, doneaddi $t8, $t8,1j checkDevide4 done:

add $t3, $t8, $t3

li $v0, 1add $a0, $t8, $zerosyscall

li $v0, 4la $a0, newlinesyscall

sb $t8, 0($a0) #Cat dia chi do vao bien con troaddi $v0, $t8, 0 #Dong thoi la ket qua tra ve cua hammul $t7, $a1, $a2 #Tinh kich thuoc cua mang can cap nhatadd $t0, $t0, $t7

add $t3, $t3, $t7

add $t6, $t8, $t7 #Tinh dia chi dau tien con trong

Trang 17

Sys_TheTopOfFreejr $ra

# -# Ham lay gia tri cua bien con tro

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

# -getValue:lw $v0, 0($a0)jr $ra

# -# Ham lay dia chi cua bien con tro

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

# -getAddress:add $v0, $zero, $a0jr $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# -CopyPointer:

sw $a0, 0($a1)jr $ra

# -#Khong tinh phan nhay coc dia chiCalculateMemory:

add $a0, $zero, $t0jr $ra

#Khong tinh phan nhay coc dia chiCalculateMemory2:add $a0, $t3, $zerojr $ra

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

# -la $t9, Sys_TheTopOfFree

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