lOMoARcPSD| 59994889
1
Môn hc: H thng Máy tính
BÁO CÁO BÀI TP S 3
Lp trình Assembly s dng b lnh LEGv8
1.Thông tin sinh viên thc hin
ST T
MSSV
H và tên
Email
1
2312007
4
Nguyễn Văn Phước
nguyenvanphuoc1172@gmail.c om
2.Đánh giá mức độ hoàn thành đồ án.
Đim t đánh giá: 10/10
Bài
Đặc điểm
Mức độ
Ghi chú
1
Viết chương trình nhập s nguyên
n. Kim tra n có là s nguyên t hay
không
100%
-
Viết được chương
trình nm trong tp
songuyento.asm để
thc hin kim tra n
là s nguyên t
-
Có thc hin kim tra
hp l cho đầu vào là
s n
2
Viết chương trình nhập s nguyên
n. Kim tra n có là s hoàn thin
hay không
100%
-
Viết được chương
trình nm trong tp
sohoanthien.asm để
thc hin kim tra n
là s hoàn thin
-
Có thc hin kim tra
hp l cho đầu vào là
s n
lOMoARcPSD| 59994889
2
3
Viết chương trình nhập s nguyên
n. Kim tra n có là s chính phương
hay không
100%
-
Viết được chương
trình nm trong tp
sochinhphuong.asm
để thc hin kim tra
n là s chính phương
-
Có thc hin kim tra
hp l cho đầu vào là
s n
4
Viết chương trình nhập s nguyên
n. Kim tra n có là s đối xng hay
không
100%
-
Viết được chương
trình nm trong tp
sodoixung.asm để
thc hin kim tra n
là s đối xng
-
Có thc hin kim tra
hp l cho đầu vào là
s n
5
Bài tp 5. Viết chương trình thực
hin các chức năng sau:
1. Nhp mng 1 chiu n phn t
s nguyên
2. Xut mng
3. Lit kê các s nguyên t
4. Tìm giá tr ln nht trong
mng
5. Tính trung bình mng
-
-
-
Viết được chương
trình nm trong tp
thaotacmang.asm để
thc hiện được các
thao tác k trên Có
kim tra hp l cho
kích thước mng Có
thc hin kim tra
hp l khi thc hin
kim tra và xut s
nguyên t
-
Thc hin các thao
tác gi hàm, tr con
tr khung,… trên
thanh ghi x28 (sp)
3.Thông s kĩ thuật của môi trường phát trin
- Môi trường phát trin:
o H điu hành: Ubuntu 24.04.1 LTS (24.04.2)
Kernel: Linux 5.15.167.4 trên nn
lOMoARcPSD| 59994889
3
* Đây không phi kernel chính ch ca Linux mà là mt bn dng trên
nn Windows Subsystem for Linux 2(WSL2) 2.4.13.0 o Ngôn ng đưc dùng:
Assembly cho tp lnh LEGv8:
Kiến trúc s dng: AArch64 (ARMv8-A) cho các CPU ARM 64-bit *Vì là
mã lnh dành cho kiến trúc ARM 64-bit, nên ta phi s dng các
trình biên dch chéo hay trình gi lp kiến trúc trên cho CPU x8664
Trình gi lp: QEMU cho AArch64 (package qemu-aarch64) bn 8.2.2
Trình biên dch chéo: S dng aarch64-linux-gnu-gcc bn 13.3.0 (và
aarch64-linux-gnu-gcc-9 bn 9.5.0 ) - Lưu ý:
o H điu hành: S dng các h điu hành kernel Linux là hiu qu nht:
Ubuntu, Kali Linux, Debian, … o Có th s dng máy o chy h điu hành
Kernel Linux thay cho s dng WSL o Ngôn ng: Buc dùng tp lnh LEGv8
o Trình biên dch: Có th s dng aarch64-linux-gnu-gcc bn 13.3.0 (hoc
nhng bn minor 13.x.x) hoc aarch64-linux-gnu-gcc-9 bản 9.x.x để tránh li
khi tương thích ngược.
4.Kết qu thc hin các yêu cu
4.1. Câu 1
lOMoARcPSD| 59994889
4
Thc hin kim tra trên các test case: S nguyên t (s dương), hp s dương, số
0, s âm, ta thu được kết qu sau
4.2. Câu 2
Thc hin kim tra các s hoàn thin (6, 28, 496); các s không hoàn thin (14,
42, 56), các s âm và s 0, ta thu được kết qu sau:
lOMoARcPSD| 59994889
5
Nếu c tình nhp các s như 1.3, -2.25, 4.781,… sẽ đưc t động ép kiu nguyên
(b đi phần thp phân)
4.3. Câu 3
Kim th vi các s chính phương (16, 25); số không chính phương (-17, 14) và
s 0, ta thu được kết qu sau:
4.4. Câu 4
lOMoARcPSD| 59994889
6
Kim th vi các s đối xng (có s ch s l: 121, 2424242, có s ch s chn:
5775, 48877884), s không đối xng (1315), s 0 và s âm, ta thu được kết qu
sau:
4.5. Câu 5
lOMoARcPSD| 59994889
7
Kết qu thu được khi nhp mng {5,7,9,-3,-11,25,5,6,14,9} như sau:
5.Mt s lưu ý
lOMoARcPSD| 59994889
8
- Trong các file .asm cha mã Assembly nói trên, format đưc s dng là %ld thay vì
%d. S dĩ có lí do trên là vì: Thanh ghi đọc ghi x mặc định ca Assembly AArch64 s
có dung lượng 8 bytes thay vì 4 bytes, phù hợp hơn khi đi ở dng %ld.
- file thaotacmang.asm, có mt s thao tác trên s thc, ch yếu các label liên
quan đến tìm giá tr trung bình:
o fmov <thanh ghi đích> <thanh ghi đích>: Đưa thanh ghi giá trị s thc vào
một thanh ghi khác cũng lưu trữ s thc
o scvtf <thanh ghi đích > <thanh ghi nguồn>: Đưa dữ liu t thanh ghi ngun
chuyn kiu double (hoặc float, tùy định dạng) sang cho thanh ghi đích
o fadd: Tương tự như add, nhưng dành cho số thc (s chấm động) o fcmp:
Tương tự như cmp, nhưng dành cho số thc (s chấm động) o fdiv: Tương
t như sdiv/udiv nhưng dành cho số thc (s chấm động)
- Có s dng các thanh ghi x28 (sp stack pointer) để lưu trữ các con tr cn thiết để
bo toàn, tránh b ghi đè (như x30 – LR hay x29 FP). Đảm bo không b li tr đến
vùng nh không hp l
6.Kết lun
lOMoARcPSD| 59994889
9
Trong khi thc hin bài tp này, s có vài s c không mong muốn, đôi khi xuất hin trong lúc
thc thi, dẫn đến các kết qu tr ra không theo mong muốn. Điều này là do trình độ còn “non”
ca em trong vic lập trình, mong được thầy “nương tay” ạ. Em cảm ơn thy rt nhiu.
7.nh chp màn hình kết qu đin form

Preview text:

lOMoAR cPSD| 59994889
Môn học: Hệ thống Máy tính
BÁO CÁO BÀI TẬP SỐ 3
Lập trình Assembly sử dụng bộ lệnh LEGv8
1.Thông tin sinh viên thực hiện ST T MSSV Họ và tên Email 1 2312007 Nguyễn Văn Phước nguyenvanphuoc1172@gmail.c om 4
2.Đánh giá mức độ hoàn thành đồ án.
Điểm tự đánh giá: 10/10 Bài Đặc điểm Mức độ Ghi chú hoàn thành 1
Viết chương trình nhập số nguyên 100% - Viết được chương
n. Kiểm tra n có là số nguyên tố hay trình nằm trong tệp không songuyento.asm để thực hiện kiểm tra n là số nguyên tố - Có thực hiện kiểm tra
hợp lệ cho đầu vào là số n 2
Viết chương trình nhập số nguyên 100% - Viết được chương
n. Kiểm tra n có là số hoàn thiện trình nằm trong tệp hay không sohoanthien.asm để thực hiện kiểm tra n là số hoàn thiện - Có thực hiện kiểm tra
hợp lệ cho đầu vào là số n 1 lOMoAR cPSD| 59994889 3
Viết chương trình nhập số nguyên 100% - Viết được chương
n. Kiểm tra n có là số chính phương trình nằm trong tệp hay không sochinhphuong.asm
để thực hiện kiểm tra n là số chính phương - Có thực hiện kiểm tra
hợp lệ cho đầu vào là số n 4
Viết chương trình nhập số nguyên 100% - Viết được chương
n. Kiểm tra n có là số đối xứng hay trình nằm trong tệp không sodoixung.asm để thực hiện kiểm tra n là số đối xứng - Có thực hiện kiểm tra
hợp lệ cho đầu vào là số n 5
Bài tập 5. Viết chương trình thực - Viết được chương hiện các chức năng sau: trình nằm trong tệp 1.
Nhập mảng 1 chiều n phần tử thaotacmang.asm để số nguyên thực hiện được các 2. Xuất mảng thao tác kể trên Có - 3.
Liệt kê các số nguyên tố kiểm tra hợp lệ cho 4.
Tìm giá trị lớn nhất trong kích thước mảng Có mảng - thực hiện kiểm tra 5. Tính trung bình mảng hợp lệ khi thực hiện kiểm tra và xuất số nguyên tố - Thực hiện các thao tác gọi hàm, trả con trỏ khung,… trên thanh ghi x28 (sp)
3.Thông số kĩ thuật của môi trường phát triển
- Môi trường phát triển:
o Hệ điều hành: Ubuntu 24.04.1 LTS (24.04.2)
Kernel: Linux 5.15.167.4 trên nền 2 lOMoAR cPSD| 59994889
* Đây không phải kernel chính chủ của Linux mà là một bản dựng trên
nền Windows Subsystem for Linux 2(WSL2) 2.4.13.0 o Ngôn ngữ được dùng:
Assembly cho tập lệnh LEGv8:
Kiến trúc sử dụng: AArch64 (ARMv8-A) cho các CPU ARM 64-bit *Vì là
mã lệnh dành cho kiến trúc ARM 64-bit, nên ta phải sử dụng các
trình biên dịch chéo hay trình giả lập kiến trúc trên cho CPU x8664
Trình giả lập: QEMU cho AArch64 (package qemu-aarch64) bản 8.2.2
Trình biên dịch chéo: Sử dụng aarch64-linux-gnu-gcc bản 13.3.0 (và
aarch64-linux-gnu-gcc-9 bản 9.5.0 ) - Lưu ý:
o Hệ điều hành: Sử dụng các hệ điều hành kernel Linux là hiệu quả nhất:
Ubuntu, Kali Linux, Debian, … o Có thể sử dụng máy ảo chạy hệ điều hành
Kernel Linux thay cho sử dụng WSL o Ngôn ngữ: Buộc dùng tập lệnh LEGv8
o Trình biên dịch: Có thể sử dụng aarch64-linux-gnu-gcc bản 13.3.0 (hoặc
những bản minor 13.x.x) hoặc aarch64-linux-gnu-gcc-9 bản 9.x.x để tránh lỗi khi tương thích ngược.
4.Kết quả thực hiện các yêu cầu 4.1. Câu 1 3 lOMoAR cPSD| 59994889
Thực hiện kiểm tra trên các test case: Số nguyên tố (số dương), hợp số dương, số
0, số âm, ta thu được kết quả sau 4.2. Câu 2
Thực hiện kiểm tra các số hoàn thiện (6, 28, 496); các số không hoàn thiện (14,
42, 56), các số âm và số 0, ta thu được kết quả sau: 4 lOMoAR cPSD| 59994889
Nếu cố tình nhập các số như 1.3, -2.25, 4.781,… sẽ được tự động ép kiểu nguyên
(bỏ đi phần thập phân) 4.3. Câu 3
Kiểm thử với các số chính phương (16, 25); số không chính phương (-17, 14) và
số 0, ta thu được kết quả sau: 4.4. Câu 4 5 lOMoAR cPSD| 59994889
Kiểm thử với các số đối xứng (có số chữ số lẻ: 121, 2424242, có số chữ số chẵn:
5775, 48877884), số không đối xứng (1315), số 0 và số âm, ta thu được kết quả sau: 4.5. Câu 5 6 lOMoAR cPSD| 59994889
Kết quả thu được khi nhập mảng {5,7,9,-3,-11,25,5,6,14,9} như sau: 5.Một số lưu ý 7 lOMoAR cPSD| 59994889
- Trong các file .asm chứa mã Assembly nói trên, format được sử dụng là %ld thay vì
%d. Sở dĩ có lí do trên là vì: Thanh ghi đọc ghi x mặc định của Assembly AArch64 sẽ
có dung lượng 8 bytes thay vì 4 bytes, phù hợp hơn khi đi ở dạng %ld.
- Ở file thaotacmang.asm, có một số thao tác trên số thực, chủ yếu ở các label liên
quan đến tìm giá trị trung bình:
o fmov : Đưa thanh ghi giá trị số thực vào
một thanh ghi khác cũng lưu trữ số thực
o scvtf : Đưa dữ liệu từ thanh ghi nguồn
chuyển kiểu double (hoặc float, tùy định dạng) sang cho thanh ghi đích
o fadd: Tương tự như add, nhưng dành cho số thực (số chấm động) o fcmp:
Tương tự như cmp, nhưng dành cho số thực (số chấm động) o fdiv: Tương
tự như sdiv/udiv nhưng dành cho số thực (số chấm động)
- Có sử dụng các thanh ghi x28 (sp – stack pointer) để lưu trữ các con trỏ cần thiết để
bảo toàn, tránh bị ghi đè (như x30 – LR hay x29 – FP). Đảm bảo không bị lỗi trỏ đến
vùng nhớ không hợp lệ
6.Kết luận 8 lOMoAR cPSD| 59994889
Trong khi thực hiện bài tập này, sẽ có vài sự cố không mong muốn, đôi khi xuất hiện trong lúc
thực thi, dẫn đến các kết quả trả ra không theo mong muốn. Điều này là do trình độ còn “non”
của em trong việc lập trình, mong được thầy “nương tay” ạ. Em cảm ơn thầy rất nhiều.
7.Ảnh chụp màn hình kết quả điền form 9