








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