Đồng thời, bài báo cáo sẽ phân tích một chương trình mẫu, giúp người đọc hiểu rõ cách viết và chạy chương trình hợp ngữ trong môi trường mô phỏng.. Giới thiệu hợp ngữ Hợp ngữ hay Assembl
Trang 1TRUONG DAI HQC GIAO THONG VAN TAI TP HO CHi MINH
KHOA CONG NGHE THONG TIN
- @[) -
a UNIVERSITY
OF TRANSPORT HOCHIMINH CITY
BAO CAO BAI TAP LON HỌC PHẢN: KIÊN TRÚC MÁY TÍNH
DE TAI: TINH TONG CHU SO CUA MOT SO
Giang viên hướng dẫn: Nguyễn Thanh Tien Sinh viên thực hiện: MSSV:
Bui Tién V¥ 051205007212 Dinh Quéc Dat 052205000317
Huynh Tuan Luong 052205000366 Ngô Minh Đức 051205001661
Võ Tran Ngọc Anh 049205010492 Nguyễn Hữu Nhất Duy 051205011574
TP Hỗ Chí Minh, 2024
Lớp:
CN2301C CN2301C CN2301C CN2301C CN2301C CN2301C CN2301C
Trang 2LOI MO DAU
Lập trình hợp ngữ (Assembly) là công cụ quan trọng giúp lập trình viên hiểu sâu về cách máy tính hoạt động và tối ưu hóa hiệu suất phần mềm Bài báo cáo này nhằm giới thiệu hợp ngữ và cách sử dụng công cụ EMUS8086 để mô phỏng lập trình trên bộ vi xử ly 8086
Đồng thời, bài báo cáo sẽ phân tích một chương trình mẫu, giúp người đọc hiểu rõ cách viết và chạy chương trình hợp ngữ trong môi trường mô phỏng Qua đó, sinh viên sẽ có cái nhìn rõ nét hơn về việc lập trình ở cấp độ thấp, trang bị những kiến thức cần thiết đề phát triển các ứng dụng hiệu suất cao trong tương lai
Trang 3MUC LUC
I CAI DAT VÀ CÁCH SỬ DỤNG EMU8086 (5° 5 ca ccscccscsesecsee 4
2 Các cài đặt công cụ 8086 EmuÌfOT 75 5 5 050 15555055550 Y1 9195 1 55m 4
3 Hướng dẫn sử dụng emu8086 << <s se se SetseEetsstsssxseseseecssrse 6
1 Phéin tich dé Dai scssssssssssesssessscsncsnecsscsascsnecenscaseesecsnesancenccsneeseenes 9
1 Cài đặt chương trÌn o o- 5 s s s 9 SH HT nH mm 900 0m91 11
Trang 4I CAI DAT VA CACH SỬ DUNG EMU8086
1 Giới thiệu hợp ngữ
Hợp ngữ hay Assembly language là một loại ngôn ngữ lập trình bậc thấp gân gũi với ngôn ngữ máy (Machine language), được thiết kế đề chuyển đổi mã nguôn thành mã máy mà máy tính có thể hiểu và thực thí Nó cung cấp cách thức giao tiếp trực tiếp với phần cứng của máy tính, cho phép lập trình viên kiếm soát chỉ tiết các hoạt động của bộ
xử lý
Về mặt lịch sử, đã từng có một số lượng lớn các chương trình đã được viết hoàn toàn bằng hợp ngữ Trước khi xuất hiện ngôn ngữ C vào những năm 1270 và đầu thập niên 1980, các hệ điều hành độc quyên hầu như được viết bằng hợp ngữ Nhiều ú ứng dụng thương mại cũng được viết bằng hợp ngữ, bao gồm một khối lượng lớn các phần mềm cho máy tính lớn của IBM được các tập đoàn lớn viết Cuối cùng thì các ngôn ngữ khác
ra đời và đã thay thế hợp ngữ mặc dù còn nhiều tô chức vẫn giữ lại các kiến trúc ứng dụng kiểu hợp ngữ trong suốt thập niên 1980
Một số điểm chính về hợp ngữ:
- _ Là ngôn ngữ lập trình thế hệ đầu tiên
- _ Thực thi nhanh mang lại hiệu suất cao
- _ Cung cấp khả năng kiêm soát chỉ tiết về tài nguyên phần cứng
- _ Có cú pháp và cấu trúc phức tạp, khó đọc và sử dụng
- _ Được ứng dụng để lập trình hệ thống, viết driver thiết bị, và tối ưu hóa mã nguồn cho hiệu suất cao
2 Cách cài đặt công cụ 8086 Emulator
Đề lập trình hợp ngữ ta sẽ sử dụng công cụ 8086 Emulator (emu8086), đây là một
công cụ với dung lượng rất nhỏ cho nên việc cải đặt sẽ khá đễ dàng và nhanh chóng Hướng dẫn cài đặt:
Bước l: Truy cập vào đường link: Emu8086.rar - Google Drive để tải về 2 file exe va txt
Bước 2: Giải nén và chạy file emu8086v408r.exe dé khởi động trình cài đặt Nhân next
để tiếp tục
Trang 5j Setup - emu8086 microprocessor emulator
trại Hit
Pade
Welcome to the emu8086 microprocessor emulator Setup
Wizard
This will install emu8086 microprocessor emulator on your
computer
Itis recommended that you close all other applications before continuing
Click Next to continue, or Cancel to exit Setup
iä Setup - emu8086 microprocessor emulator Information
Please read the following important information before continuing
When you are ready to continue with Setup, click Next
Itis required to close any running instances of emu8086 and all instances of any virtual devices!
Bước 3: Chọn đường dẫn đến thư mục cài đặt Nhắn next để tiếp tục
l Setup - emu8086 microprocessor emulator
Select Destination Location Where should i
<Back
= Setup will install
To continue, click Next If you would like to select a different folder click Browse
c:\emu8086
Atleast 10.4 MB of free disk space is required
<Back Cancel
Trang 6
Select Start Menu Folder Where should Setup place the program's shortcuts? Es‡
xã Setup will create the program's shortcuts in the following Start Menu folder
To continue click Next If you would like to select a different folder, click Browse
emu8086| Browse
Bước 4: Sau khi trình cài đặt thu thập đủ thông tin, nó hiện thông báo sẵn sảng cho việc
cai đặt và tong hop các thông tin đã thu thập được trong các bước trước Nhắn nút Install
để tiễn hành cài đặt chương trinh
8 Setup - emu8086 microprocessor emulator — x
Ready to Install Setup is now ready to begin installing emu8086 microprocessor emulator on your feos}
computer
Click Install to continue with the installation, or click Back if you want to review or change any
settings
Destination location c:\emu8086 Start Menu folder:
emu8086
< Back Install ij Cancel
Bước 5: Sau khi đã hoàn tất tải về, chạy chương trình emu8086, giao dién cho lần đầu đăng nhập sẽ yêu câu chúng ta nhập mã đăng ký Nhân Please Enter the Registration Key
đề đăng ký
Bước 6: Truy cập file Emu8086-408Serial.txt dé lay tài khoản và mật khâu đăng ký
- Sau khi đã hoàn tất đây đủ các bước trên, ta sẽ có một công cụ sẵn sảng dé bat dau vào lập trình hợp ngữ,
3 Hướng dẫn sử dụng emu8086
Chương trình cho phép ta sử đụng các chức năng chính sau:
6
Trang 7+ Soan thao ma hop ngữ trên màn hình soạn thảo, dịch ra file exe hoặc file com và chạy
mô phỏng, debue trực tiếp
+ Trao cứu tập lệnh của bộ vi xử lý 8086 (Help>8086 Instruction Set)
+ Tra ctu bang ma ASCII (Muc ascii codes trén menu)
+ Thực hiện các phép toán và chuyến đổi giữa các hệ cơ số thông dụng (nhị phân, thập phân, thập lục phân) (Mục math trên menu)
- Chương trình của chúng ta thường có dạng COM hoặc EXE, ta chon | trong 2 và nhân
OK cửa số soạn thảo sẽ xuât hiện
( EXE template - advanced executable file header: relocation, checksum
( BIN template - pure binary file, allows all sorts of customizations (advanced) ( BOOT template - for creating floppy disk boot records (very advanced)
Thanh công cụ chuan
© cr0006 - szsenbler and microprocessor emus
2 1 8m
vơ optere hp - shơế
Vùng không gian soạn thảo của chương trình,
U
new open examples save compile emulate | calculator convertor options help about
7
Trang 8- Với thanh công cu nay ta sẽ có:
+New: Tạo file mới
+ Save: Lưu trữ file
+ Compile: bién dich file
+ Emulate: bién dịch và thực hiện mô phỏng
- Giao điện chạy và gỡ lỗi sẽ hiện ra khi chúng ta nhân nút Emulate trên thanh công cụ của chương trình Với giao điện debug nảy, chúng ta có thê chạy cả chương trình hay chạy ở chế độ từng lệnh đề dò lỗi Chương trình cung cấp giao điện trực quan cho phép người lập trinh:
+ Theo dõi trực tiếp mã lệnh, địa chỉ và nội dung của các lệnh cũng như dữ liệu trone bộ
nhớ
+ Quan sát trực tiếp sự thay đối của các thanh ghi, các biến, dữ liệu trong ngăn xếp và các
cờ trong thanh phi cờ
I t 1g ev mi rtual devices virtual drive help
Load reload ep ba single step run step delay ms: 0 stack 58 ;khai bao =
OU “m" nấu DS, AR r thê dh 18,13, Tong cac c
XOR CX, CX
HOU CL (8080! h] nov ds, ax
OR AK, AK
4
+ 8798 scieen | source | teset | aux | vars | debug | stack | flags | «| 1|
- Chương trình mô phóng có 2 chế độ là chạy từng lệnh và chạy tất cả các lệnh:
+ Nếu muốn chạy từng lệnh nhắn phím Single step hoặc F8
+ Nếu muốn chạy tất cả các lệnh nhắn phím Run hoặc Shift + F8
- Tuỳ thuộc vào nội dung của chương trình yêu cầu chúng ta có thể xem nội dung của stack, flags
Ngoài ra chương trình có phần trợ giúp rất hữu ích (Mục help trên menu) Người dùng có thê tìm hiệu cách sử dụng chương trình, tra cứu tập lệnh của vi xử lý 8086 và các ngắt cơ bản cũng như các ví dụ sử dụng các lệnh này
Trang 9II PHAN TICH DE BAI VA THUAT TOAN
1 Phan tich dé bai
Đê bài: Nhập vào một sô, tính tông các chữ sô của một sô
Nhập một chuỗi ký tự số.Đều là các _ | Chương trình sẽ in ra tổng các chữ sô mà
Mời bạn nhập số nguyên: 20232023 | Tông các chứ số là: 14
Hướng giải bài toán:
- Chương trình sẽ yêu cầu người dùng nhập vào một chuỗi kí tự số
- Sau đó, chương trình sẽ duyệt qua từng ký tự trong chuỗi để chuyền đôi ký tự từ dạng ASCII thành số nguyên rồi cộng tất cả chúng lại với nhau đề tính tông
- Cuối cùng, chương trình in ra tông các chữ số vừa tính được
Với đề bài trên chúng ta thực hiện các bước sau:
Bước l:
-Khỏi tạo bộ nhớ và khai báo kích thước của ngắn xếp
-Khai báo các biến trong phần data
Bước 2:Nhập một chuỗi ký tự số từ bàn phím
+Hién thị thông báo “moi ban nhap so nguyen”
+Cho phép nhập số từ bàn phím
Bước 3: Xử lý ký tự số vừa nhập và tính tổng
+Chuyền đôi ký tự số ASCII thành giá trị số bang cach trừ đi 30h
+Tĩính tổng các chữ số
Bước 4:Chuyên đổi tổng thành chuỗi
+Chia tổng cho 10
+Chuyên đôi phần dư thành ký tự số ASCII bằng cách cộng 30h và đây vào stack Bước 5:Hiễn thị thông báo “Tong cac chu so la”
Bước 6:Hiễn thị kết quả đã tính
+Lấy kí tự số từ stack và hiển thị ra màn hình
Trang 102 Thuật toán
Bắt đầu
Nhập số nguyên
V
CX <- 0,AX <- 0
SI <- chuỗi ký tự vừa nhập
CL <- số ký tự trong chuỗi
BL <- BL-30h
AX <- AX+BX
SI <-SI+1
CX < CX-1 NO ————
DX <- 0
AX < AX /10
AH < AH + 30h
DL <- AH
Day giá trị DX vào
>
stack
CX <-CX +1
AH <-0 INO
từ stack
Xuất ký tự từ
DX
10
Trang 11HI CÀI ĐẶT VÀ GIẢI THÍCH CHƯƠNG TRÌNH
1 Cài đặt chương trình
; CHUONG TRINH DANG EXE
-model small
stack 100
data
so db 255, 0, 255 dup($)
tb1 db 'Moi ban nhap so nguyen: $'
tb2 db 10,13,'Tong cac chu so: $'
muoi db 10
„code
main proc
; 1 Tro thanh ghi ds vao doan data
mov ax, @data
mov ds, ax
; 2 Hien thi thong bao 'Nhap so:'
lea dx, tbl
mov ah, 9
int 21h
; 3 Nhap chuoi so vao bo dem
lea dx, so
mov ah, 0Ah
int 21h
; 4 Lay so luong ki tu da nhap
xOr CX, cx
lea sĩ, so + 2
mov cl, [so + 1]
; 5.Chuyen ki tu so thanh gia tri so va tinh tong luu vao stack
xOr ax, ax
Lap:
xor bx, bx
mov bl, [si]
sub bl, 30h
11
Trang 12add ax, bx
inc si
loop Lap
36 Xu ly tong
xOr CX, cx
lapchia:
xor dx, dx
div muoi
add ah, 30h
mov dl, ah
push dx
inc cx
xor ah, ah
cmp ax, 0
Jne lapchia
37 Hien thi chuoi 'Tong cac chu so:'
lea dx, th2
mov ah, 9
int 21h
38 Hien thi ket qua tong da tinh
Hienthi:
pop dx
mov ah, 2
int 21h
loop Hienthi
39 Ket thua chuong trinh
moy ah, 4Ch
int 21h
main endp
end main
12
Trang 132 Giải thích chương trình
Sử dụng chương trình đạng exe
lệnh gói gọn trong mét đoạn, dữ liệu nam trong một đoạn
hang so sẽ được lưu trữ
- Byte dau tiên chứa 255 byte đề biểu thị độ dài tối đa của chuỗi nhập vào
- Byte thir hai la 0 biểu thị số lượng kí tự đã nhập
- 255 byte con lai chita $, str dụng để chứa các kí tự số được nhập sau này
so:" Ra man hinh
tb2 db 10,13, "Tong cac chu so: $' Khai báo chuỗi tb2 đề hiển thi thong bao "Tong
cac chu so:" ; ky tự điêu khiên 10 (xuông dòng) và
13 (lùi đầu dòng) đê định dạng khi In ra màn hình
trong quá trình tính toán tông các chữ số
đoạn bộ nhớ cho các mã lệnh của chương trình sẽ được thực thị
thực thị
; 1 Tro thanh ghi ds vao doan data
segment) vao thanh ghi ax
doan dit liéu
; 2 Hien thi thong bao ‘Nhap so:’
13
Trang 14
chuan bi in ra man hinh
chuôi cua DOS interrupt 21h
; 3 Nhap chuoi so vao bo dem
chuẩn bị nhận chuỗi nhập vào từ bàn phím
nhập chuỗi từ ban phim cua DOS interrupt 21h
mảng so
; 4 Lay so luong ki tu da nhap
(chứa độ dài tối đa và số lượng ký tự nhập vào) và
bắt đầu trỏ đến ký tự số đầu tiên trong chuỗi
; 5.Chuyen ki tu so thanh gia tri so
; tinh tong luu vao stack
SỐ
từng ký tự số trong chuỗi Máy tính sử dụng nhãn
từng ký tự
trong chuỗi so) va lưu vao bl
số tương ứng (ví dụ: 3) băng cách trừ đi giá trị
ASCII cua '0' (30h) ti bl
tổng ax, nơi lưu trữ tông các chữ số đã nhập
chuỗi
sau nhãn Lap đủ n lân, với n được đặt trước trong
thanh ghi CX Sau môi lân lặp CX tự động giảm l
đơn vị (Cx = Cx — 1) và lệnh lặp sẽ dừng khi Cx =
0
14
Trang 15
Đặt gia tri cx bang 0 dé chuan bi cho vong lap chia
số thành các ky ty riêng le
phép chia
dư trong ah
cộng 30h
nào còn lại đề chia không
chia tiếp
37 Hien thi chuoi ‘Tong cac chu so:’
38 Hien thi ket qua tong da tinh
thị các ký tự SỐ
loop Hienthi giảm giá trị cx vả nếu cx không bằng 0, quay lại
nhãn Hienthi dé hién thị ky tự số tiếp theo từ stack; nêu cx băng 0, vòng lặp kết thúc
;9 Ket thua chuong trình
chương trình của DOS interrupt 21h
15