nguyen ngoc linh - bao cao bt assembly
Post on 03-Jan-2016
232 Views
Preview:
TRANSCRIPT
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
1
z
TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BÀI TẬP LỚN
Kiến trúc các hệ thống thông tin
Giảng viên hướng dẫn : PGS.TS Nguyễn Thị Hoàng Lan
Sinh viên thực hiện : Nguyễn Ngọc Linh
Lớp : Hệ thống thông tin và truyền thông
KSCLC - K52
HHàà NNộộ ii 44 -- 22001111
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
2
MỤC LỤC
Trang
A . MỤC ĐÍCH ....................................................................................................... 3
B . NỘI DUNG CÁC BÀI TẬP
Bài tập 1
Lập trình hợp ngữ với các cấu trúc điều khiển …………………….............. 4
Bài tập 2
1. Dịch lời gọi thủ tục ..................................................................................... 6
2. Cơ chế ngắt và lời gọi hệ thống + Khảo sát version DOS ....................................................................... 8
+ Phân tích các vector ngắt .................................................................. 8 + Khảo sát ngắt 21h ............................................................................. 10
+ Lời gọi hệ thống ................................................................................ 14
Bài tập 3
1. Khảo sát cấu hình & hệ thống bộ nhớ ........................................................ 16
2. Phân tích cơ chế quản lý bộ nhớ ................................................................. 16 3. Dùng công cụ Debug khảo sát nội dung các thanh ghi .............................. 18
4. Giải thích nội dung thanh ghi ..................................................................... 20
C. KẾT LUẬN ........................................................................................................ 21 D . PHỤ LỤC : CÁC CHƢƠNG TRÌNH ASSEMBLY
Bài 1 . ............................................................................................................. 22 Bài 2.1 . .......................................................................................................... 29
Bài 2.2 . ................................................................................................. ......... 33
E . TÀI LIỆU THAM KHẢO ................................................................................ 37
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
3
A . MỤC ĐÍCH
Hợp ngữ ( assembly languague ) là ngôn ngữ bậc thấp gần với ngôn ngữ
máy , được sử dụng để xây dựng phần mềm cho hệ vi xử lý .
Do hợp ngữ sử dụng trực tiếp tập lệnh của bộ vi xử lý nên quá trình điều
hành chức năng rất sát với cấu trúc phần cứng của hệ thống , triệt để khai thác
đước khả năng của phần cứng .
Mục đích của bài tập lớn là giúp sinh viên làm quen với môi trường lập
trình hợp ngữ , có những hiểu biết cơ bản về tập lệnh , cách thức quản lý & sử
dụng tài nguyên ( thanh ghi , bộ nhớ ) của bộ vi xử lý Intel 8x86 . Điều này thể
hiện qua 3 bài tập với các yêu cầu khác nhau :
• Bài 1: Lập trình hợp ngữ với các cấu trúc điều khiển.
• Bài 2: Lập trình hợp ngữ dịch lời gọi thủ tục, khảo sát tổ chức hệ thống, cơ chế
ngắt và thực hành các lời gọi hệ thống
• Bài 3: Thực hành quản lý bộ nhớ cho một ứng dụng
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
4
B . NỘI DUNG CÁC BÀI TẬP
Bài 1 . Lập trình hợp ngữ với các cấu trúc điều khiển
Viết và thực hành một thủ tục assembler thực hiện so sánh xâu chuỗi ký tự theo
các yêu cầu sau:
Cho hai xâu chuỗi ký tự X và Y có độ dài tương ứng là n và m (kể cả ký tự
rỗng) với n>m, kết quả chương trình trả lời các câu hỏi dưới đây:
– Xâu Y có phải là xâu con của xâu X không?
– Nếu xâu Y là xâu con của xâu X thì chỉ ra vị trí xâu Y ở xâu X, xâu X
chứa mấy xâu Y?
( So sánh chuỗi kí tự -> file 1s.Chuoi con.asm , 1s.Chuoi con.exe )
Giải thích chương trình :
- Nhập chuỗi kí tự X , Y với độ dài tối đa 255 như đã khai báo trong code . Nếu nhập
quá số kí tự tối đa , chương trình có thể cho kết quả sai .
Việc nhập chuỗi kí tự được thực hiện nhờ thủ tục INPUTSTR . Chiều dài chuỗi vừa
nhập được chứa trong thanh ghi BX sau đó đưa ra các biến N1 ( độ dài X ) , N2 ( độ
dài Y )
Thủ tục BACKSPACE được gọi trong trường hợp xóa kí tự khi nhập : thay thế kí tự
bị xóa bằng khoảng trắng , biến đếm độ dài và con trỏ đều giảm 1 .
- So sánh độ dài 2 chuỗi X , Y . Các trường hợp : chuỗi rỗng ( độ dài = 0 ) , N2 > N1 ,
chương trình kết luận Y không là chuỗi con của X .
- Trong trường hợp N2 <= N1 , chương trình tiến hành kiểm tra ( thủ tục CHECK )
bằng cách so sánh liên tiếp các chuỗi con dài N2 trong X ( trỏ bởi DI ) với chuỗi Y (
trỏ bởi SI ) , ngừng quá trình khi tới 1 vị trí giới hạn .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
5
- In ra vị trí tìm thấy chuỗi con ( nếu có )
- Sử dụng 1 biến đếm (DEM) để xác định số lần xuất hiện chuỗi con Y trong X .
- Khi việc kiểm tra kết thúc , nếu DEM = 0 -> Y không là chuỗi con của X . Ngược
lại , Y là chuỗi con của X .
- Việc in số thực hiện nhờ thủ tục PRTNUM ( chia liên tiếp số cần in cho 10 , in lần
lượt các số dư ra màn hình )
- Khai báo & sử dụng Macro Thongbao để in 1 chuỗi kí tự ra màn hình .
Chạy chương trình :
- Trong trường hợp tìm thấy xâu con :
- 1 trường hợp đặc biệt :
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
6
Bài 2 . Lời gọi thủ tục , tổ chức hệ thống , cơ chế ngắt và lời gọi hệ thống
Phần 1 . Dịch lời gọi thủ tục
Viết và thực hiện chương trình tìm số lớn nhất trong một mảng N các số
nguyên 16 bit và hiển thị kết quả lên màn hình bằng mã ASCII. Viết thủ tục con SAP
thực hiện chuyển đổi một số nguyên VAL 16 bit thành số CHA hệ cơ số 10 biểu diễn
bằng mã ASCII. Thủ tục con này được gọi bởi chương trình tìm số lớn nhất
( Tìm số lớn nhất trong dãy số -> file 2s.1.Max.asm , 2s.1.Max.exe )
Giải thích chương trình :
- Dãy số có dấu nhập từ bàn phím ( gọi thủ tục Nhap ) .
Các phần tử phải nằm trong khoảng ( -32768 , 32767 ) . Nếu nhập sai , kết quả
chương trình sẽ không chính xác
- Tìm phần tử lớn nhất bằng cách so sánh liên tiếp từng cặp phần tử cho tới khi duyệt
hết dãy số
Sử dụng :
+ Thanh ghi CX làm biến đếm ( chứa số phần tử N của dãy số )
+ Thanh ghi AX chứa phần tử lớn nhất tạm thời ( ban đầu chính là phần tử đầu
dãy số )
+ Thanh ghi BX trỏ tới từng phần tử của dãy số sau đó thực hiện so sánh .
Kết thúc quá trình so sánh , AX chứa phần tử lớn nhất của dãy .
- Việc chuyển đổi số 16bit thành thập phân và in ra màn hình được thực hiện nhờ thủ
tục SAP ( chia liên tiếp số cần in cho 10 , in lần lượt các số dư ra màn hình )
- Khai báo & sử dụng MACRO Thongbao để in 1 chuỗi kí tự ra màn hình , MACRO
Xuongdong để chuyển con trỏ xuống 1 dòng mới .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
7
Chạy chương trình :
- Trường hợp bình thường
- Trường hợp nhập sai quy định , chương trình cho ra kết quả không chính xác
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
8
Phần 2 . Cơ chế ngắt , lời gọi hệ thống
1. Khảo sát version DOS trên máy đang thực hiện
- Chạy lệnh VER tại dấu nhắc dòng lệnh
- Kết quả : Microsoft Windows 6.1.7601
2. Viết thủ tục thực hiện hiển thị lên màn hình N vector ngắt của hệ thống
(0<N<255), ví dụ với N=50h. Phân tích các vector ngắt của máy đang sử dụng.
( file 2s.2.Ngat.asm , 2s.2.Ngat.exe )
- Sử dụng hàm 35h của ngắt 21
+ Vào : AL chứa số thứ tự ngắt
+ Ra : ES : BX chứa địa chỉ của chương trình con phục vụ ngắt
In nội dung ES : BX ra màn hình , trong đó sử dụng thủ tục INRA để in 1 số hexa .
( chia liên tiếp số cần in cho 16 , in lần lượt các số dư ra màn hình )
- Lặp N lần quá trình trên để in đủ N vector ngắt .
- Khai báo & sử dụng MACRO Thongbao để in 1 chuỗi kí tự ra màn hình , MACRO
Xuongdong để chuyển con trỏ xuống 1 dòng mới
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
9
- Chạy chương trình :
- Nhận xét :
+ Bảng vector ngắt đầy đủ gồm 256 phần tử , mỗi phần tử gồm 4 byte ứng với
256 ngắt từ 0 đến 0FFh . Mỗi phần tử chứa 2 địa chỉ : địa chỉ thanh ghi đoạn ES đưa
vào CS , địa chỉ offset BX của chương trình con phục vụ ngắt đưa vào IP
+ Chia 2 loại : Ngắt của BIOS : từ 0h đến 1Fh
Ngắt của DOS : từ 20h đến 0FFh
+ Có 1 số vector ngắt chưa được sử dụng , mang địa chỉ 0000:0000 .
Số thứ tự ngắt Địa chỉ ( ES:BX )
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
10
3. Khảo sát ngắt 21h và hãy cho biết chức năng các hàm của DOS
* Ngắt 21h : các chức năng của DOS . 1 số hàm thông dụng của ngắt 21h :
-Hàm 01h : Đợi đọc 1 ký tự từ bàn phím (có hiện trên màn hình)
Vào Không
Ra AL : Mã ASCII của phím nhận được
Đợi đọc một ký tự từ bàn phím (phím nhận được sẽ hiển thị trên màn hình). Khi một phím được ấn thì ký tự tương ứng với phím đó được lưu trong thanh ghi AL. Nếu
phím được ấn là một phím đặt biệt thì AL=0. Tổ hợp phím Ctrl-Break kết thúc công việc của hàm này.
-Hàm 02h : Hiển thị 1 kí tự tại vị trí con trỏ trên màn hình
Vào DL <- Mã ASCII của kí tự cần hiển thị
Ra
Không
- Hàm 03h : Đọc dữ liệu vào từ cổng nối tiếp chuẩn (COM1) Vào
Không Ra
AL : byte dữ liệu đọc được
-Hàm 04h : Xuất ký tự ra cổng nối tiếp chuẩn (COM1) Vào
DL ← ký tự cần xuất Ra
Không
-Hàm 05h : Xuất byte dữ liệu ra cổng máy in chuẩn (LPT1) Vào
DL : Byte dữ liệu cần xuất Ra
Không
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
11
-Hàm 06h : Nhập / Xuất từ thiết bị chuẩn (không đợi) Vào
DL ← Mã ASCII ký tự cần xuất lên màn hình Nếu DL ← 0FFh : Thực hiện chức năng nhập ký tự
Ra Nếu ZF = 0 thì ALchứa mã ASCII ký tự nhận được
Nếu ZF = 1 thì không nhận được ký tự
-Hàm 07h : Giống hàm 01h , nhưng không hiện ký tự ra màn hình Vào
Không Ra
AL : Mã ASCII ký tự nhận được -Hàm 08h : Giống hàm 01h , nhưng không hiện ký tự ra màn hình
Vào Không Ra AL : Mã ASCII ký tự nhận được
Lưu ý: Ctrl-Break không ảnh hưởng đến hoạt động của hàm 07h và 08h
-Hàm 09h : Xuất 1 chuỗi ký tự lên màn hình
Vào DS:DX ← địa chỉ logic của chuỗi ký tự cần xuất
Ra Không
Lưu ý: DS ← địa chỉ segment của chuỗi trong bộ nhớ DX ← địa chỉ offset của chuỗi trong bộ nhớ Chuỗi ký tự phải chấm dứt bằng ký tự ‘$’
-Hàm 0Ah : Đợi đọc 1 chuỗi ký tự từ bàn phím, kết thúc bằng Enter
Vào DS:DX ← địa chỉ của vùng đệm bàn phím trong bộ nhớ
Ra LEN: Tổng số ký tự nhận được
BUFF: Mã ASCII của các ký tự nhận được
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
12
-Hàm 0Bh : Cho trạng thái bàn phím Vào
DS:DX ← địa chỉ logic của vùng đệm bàn phím trong bộ nhớ Ra
LEN: Tổng số ký tự nhận được BUFF: Mã ASCII của các ký tự nhận được
-Hàm 25h : thiết lập vector ngắt
Vào DS:DX : giá trị mới của địa chỉ vector ngắt
AL : số thứ tự ngắt Ra Không
-Hàm 30h : lấy giá trị phiên bản DOS Vào Ra
AL : phần chính của phiên bản AH :phần phụ của phiên bản
-Hàm 35h :
Vào AL : Số thứ tự ngắt Ra ES:BX : Địa chỉ chương trình phục vụ ngắt
-Hàm 3Ch : Tạo tập tin mới
Vào DS:DX ← Địa chỉ chuỗi tên của tập tin mới.
CX ← thuộc tính của tập tin (0: bình thường, 1: chỉ đọc, 2: ẩn,4: tập tin hệ thống) Ra
AX : Thẻ tập tin
-Hàm 3Dh : Mở tập tin trên đĩa Vào
DS:DX ← Địa chỉ chuỗi tên của tập tin mới. AL ← kiểu truy xuất tập tin (0: chỉ đọc, 1: chỉ ghi, 2: đọc/ghi)
Ra AX : Thẻ tập tin
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
13
-Hàm 3Eh : Đóng tập tin đang mở. Vào
BX ← Thẻ tập tin Ra
AX : Mã lỗi (nếu có) Sau khi xử lý xong tập tin và trước khi thoát khỏi chương trình, tập tin phải được
đóng lại để cập nhật thông tin hoặc nội dung mới của tập tin.
-Hàm 3Fh : Đọc nội dung tập tin vào bộ nhớ Vào
DS:DX ← Địa chỉ vùng nhớ chứa dữ liệu đọc được BX ← Thẻ tập tin cần đọc
CX ← số byte cần đọc Ra
AX : Số byte đọc được
-Hàm 40h : Ghi dữ liệu trong bộ nhớ vào tập tin
Vào DS:DX ← Địa chỉ vùng nhớ chứa dữ liệu cần ghi
BX ← Thẻ tập tin cần đọc CX ← số byte cần ghi
Ra AX : Số byte ghi được
Các hàm 3Fh và 40h cũng có thể được sử dụng đọc hoặc ghi dữ liệu cho ngoại vi, vì DOS quản lý việc truy xuất ngoại vi bằng thẻ
-Hàm 41h : Xóa tập tin trên đĩa Vào
DS:DX ← Địa chỉ chuỗi tên tập tin Ra
AX : Mã lỗi (nếu có) -Hàm 42h : Dời con trỏ tập tin hiện hành
Vào AL ← Hướng dời
CX:DX ← Cự ly dời = (CX*65536) + DX BX ← Thẻ tập tin
Ra DX:AX : Vị trí con trỏ mới = (DX*65536)+AX
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
14
-Hàm 43h : Đọc hoặc thay đổi thuộc tính tập tin trên đĩa Vào
DS:DX ← Địa chỉ chuỗi tên tập tin Nếu Đọc thuộc tính: AL ← 0
Nếu Thay đổi thuộc tính: AL ←1vàCX ←thuộc tính mới Ra
Nếu Đọc thuộc tính: CX : chứa thuộc tính tập tin
-Hàm 4Ch : Kết thúc chương trình và trở về DOS Vào Không
Ra Không
-Hàm 56h : Đổi tên tập tin Vào
DS:DX ← Địa chỉ chuỗi tên tập tin cũ
ES:DI ← Địa chỉ chuỗi tên tập tin mới Ra
Không
4.Khảo sát thực hiện các lời gọi hệ thống của DOS, giải thích cơ chế thực hiện một
lời gọi hệ thống trên máy thực tế (tùy chọn một lời gọi)
* Lời gọi hệ thống :
=> Cung cấp giao diện giữa một quá trình và hệ điều hành. Các lời gọi này thường
dùng các lệnh hợp ngữ . Lời gọi hệ thống được thực hiện nhờ các ngắt .
Cơ chế thực hiện 1 lời gọi hệ thống , lấy ví dụ với 1 lời gọi hệ thống trên máy
thực tế : dùng ngắt 21h , hàm 09h để in 1 chuỗi kí tự ra màn hình .
- Khi gặp 1 lời gọi hệ thống ( ngắt ) , trạng thái của chương trình chính ( nội dung các
thanh ghi , cờ , quan trọng nhất là nội dung của con trỏ CS:IP ) được sao lưu .
- CPU tìm địa chỉ bắt đầu của chương trình con phục vụ ngắt trong bảng vector ngắt
theo số thứ tự ngắt .
- Chuyển tới chương trình con phục vụ ngắt bằng cách gán địa chỉ của nó vào CS:IP -
> nội dung 2 thanh ghi bị thay đổi .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
15
- Thực hiện chương trình con ( lời gọi hệ thống )
- Sau khi thực hiện xong , khôi phục trạng thái của các thanh ghi , trở về chương trình
chính để thực hiện các lệnh tiếp theo .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
16
Bài 3 . Phân tích khảo sát cơ chế quản lý bộ nhớ
1. Khảo sát cấu hình của máy và hệ thống bộ nhớ của máy đang sử dụng (Bộ nhớ
trong: ROM, RAM, Cache (System,…), Bộ nhớ ngoài: ổ đĩa cứng, CD, Thiết bị vào
ra,…)
- CPU : Core 2 Duo E6550 2.33GHz bus 1333 MHz
- Bộ nhớ trong :
+ ROM - BIOS : AMI v.1201
+ RAM : 4GB DDR2 bus 800MHz
+ Cache CPU : L1 = 2x32k , L2 = 4MB
- Bộ nhớ ngoài :
+ HDD : 160GB , cache = 8MB
+ DVDROM
- Thiết bị vào ra : bàn phím , chuột , màn hình , loa
2.Phân tích cơ chế quản lý bộ nhớ được hệ điều hành thực hiện như thế nào đối với
một chương trình ứng dụng, ví dụ xét cụ thể đối với chương trình của bài tập 1.
Áp dụng đối với chƣơng trình 1s.Chuoi con.exe :
a. Bộ nhớ được quản lý theo cơ chế phân đoạn (segmentation)
Cơ chế này coi không gian địa chỉ là một tập các phân đoạn (segment) . Mỗi
chương trình có thể có nhiều phân đoạn . Khi 1 đoạn cần được đưa vào vùng nhớ
chính, hệ điều hành sẽ tìm kiếm vùng nhớ trống đủ lớn để lưu thông tin phân đoạn đó.
Mỗi phân đoạn có địa chỉ cơ sở, được tạo trong bộ nhớ và giới hạn kích cỡ.
Mỗi địa chỉ được xác định bởi 2 giá trị < s , d >
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
17
Số hiệu phân đoạn s : được sử dụng như chỉ mục đến bảng phân đoạn
Địa chỉ tương đối d : có giá trị trong khoảng từ 0 đến giới hạn chiều dài của phân đoạn. Nếu địa chỉ tương đối hợp lệ, nó sẽ được
cộng với giá trị chứa trong thanh ghi nền để phát sinh địa chỉ vật lý tương ứng.
b. Đối với chương trình 1s.Chuoi con.exe
đang xét :
* Chương trình khi chưa thực hiện được lưu trong bộ nhớ ngoài (VD :ổ cứng)
* Chương trình khi thực hiện được nạp vào bộ nhớ trong . Hệ điều hành cấp phát
không gian địa chỉ cho các phân đoạn của chương trình ( SS , DS , CS , ES )
- .MODEL SMALL => Mã lệnh và dữ liệu của chương trình nằm ở 2 đoạn khác nhau
(đoạn mã trỏ bởi CS ,đoạn dữ liệu trỏ bởi DS) , mỗi đoạn có kích thước tối đa là 64
KB .
- .STACK 100h => Kích thước đoạn SS dành cho ngăn xếp là 256 bytes
- .DATA => Đánh dấu vùng nhớ dành cho dữ liệu . Trong chương trình ES , DS trỏ
tới vùng nhớ này để sử dụng các dữ liệu đã khai báo .
Mỗi biến , mỗi lệnh , mỗi chương trình con có 1 địa chỉ xác định , các thanh ghi có
liên quan được khởi tạo .
* Nội dung của các thanh ghi & ngăn xếp có thể thay đổi liên tục trong quá trình thực
hiện chương trình .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
18
3.Dùng công cụ Debug khảo sát nội dung các thanh ghi IP, DS, ES, SS, CS, BP, SP
- Xét VD cụ thể là chương trình ở Bài 1 :
Sau khi dịch , ta thu được file đuôi .exe
- Chạy debug từ dấu nhắc dòng lệnh theo cú pháp :
debug <đường dẫn tới file .exe>
- Để hiển thị nội dung hiện tại của các thanh ghi , dùng lệnh –r
- Để hiển thị nội dung các thanh ghi sau n bước thực hiện chương trình , dùng lệnh
–t n ( trong hình minh họa , n = 5 )
- Để chạy chương trình , dùng lệnh –g
- Để thoát khỏi debug , dùng lệnh –q
=> Thực hiện debug với file 1s.exe sử dụng các lệnh trên ( xem hình )
*Nhận xét nội dung các thanh ghi DS , ES , SS , CS , BP , SP , IP :
- Ban đầu : DS = ES = 13CE
+ Sau lệnh thứ 2 , 3 , các thanh ghi DS , ES thay đổi giá trị và sau đó giữ không
đổi cho tới khi kết thúc chương trình
DS = ES = 13EE
- Nội dung các thanh ghi SS , BP không đổi trong suốt quá trình chạy chương trình
SS = 13DE , BP = 0000
- Nội dung thanh ghi CS , SP thay đổi khi gặp ngắt , ở đây là ngắt 21h .
- Nội dung thanh ghi IP liên tục thay đổi
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
19
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
20
4. Giải thích nội dung các thanh ghi, trên cơ sở đó giải thích cơ chế quản lý bộ nhớ
của hệ thống trong trường hợp cụ thể này
- Khi chương trình bắt đầu chạy , hệ điều hành tự động khởi tạo các thanh ghi , vùng
nhớ và cấp phát không gian địa chỉ cho chương trình .
- Tương ứng với các câu lệnh trong mã nguồn , nội dung các thanh ghi có thể thay đổi
hoặc không .
+ IP là thanh ghi con trỏ lệnh . Khi 1 lệnh được nạp vào , IP sẽ tăng để trỏ tới
lệnh tiếp theo . Giá trị tăng thêm tùy thuộc độ dài lệnh trước đó . Khi nhảy tới nhãn /
chương trình con ... , con trỏ lệnh trỏ tới địa chỉ nhãn , chương trình con tương ứng .
Đối với lệnh nhảy có điều kiện , nếu điều kiện không thỏa mãn , giá trị IP không đổi .
+ DS , ES trỏ tới vùng dữ liệu (Ở chương trình đang xét , @DATA = 13EE =
không đổi ) . Sau đó không có lệnh nào làm thay đổi nội dung 2 thanh ghi này .
+ SS , BP giữ nguyên giá trị khởi tạo do trong chương trình không có lệnh nào
làm thay đổi nội dung 2 thanh ghi này .
+ SP trỏ vào phần tử ở đỉnh ngăn xếp . Do chương trình khai báo kích thước
ngăn xếp là 100h (256 bytes) nên ban đầu SP = 100h . Khi gặp các các ngắt hay
chương trình con có sử dụng ngăn xếp ( thao tác pop , push ) , nội dung của thanh ghi
SP thay đổi .
+ Khi ngắt , trạng thái của chương trình chính được cất giữ , chương trình con
phục vụ ngắt được gọi . Địa chỉ của nó được xác định bởi CS:IP nên cùng với IP , nội
dung của CS cũng bị thay đổi .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
21
C. KẾT LUẬN
Sau khi hoàn thành các bài tập trên , sinh viên có thể : * Làm quen với hợp ngữ :
- Nắm được cấu trúc của 1 chương trình hợp ngữ . - Hiều & biết cách sử dụng các thanh ghi và ngăn xếp .
- Hiểu & biết cách sử dụng các cấu trúc lặp , rẽ nhanh , các hàm của ngắt ( chủ yếu là ngắt 21h ) , biết cách tổ chức chương trình con ( thủ tục ) , macro và sử dụng chúng
trong chương trình chính .
* Nắm được các lệnh thường dùng trong tập lệnh của vi xử lý 8x86 .
* Có kiến thức cơ bản về cơ chế quản lý bộ nhớ của hệ điều hành đối với 1 chương trình ứng dụng . Sử dụng công cụ debug sẵn có của hệ điều hành để khảo sát các
thanh ghi và ngăn xếp trong quá trình chạy 1 chương trình . Từ trên , có thể thấy rằng đây là các bài tập cần thiết bởi nó liên quan đến
những nội dung quan trọng trong chương trình học .
Bài tập lớn giúp sinh viên nắm vững & hệ thống lại các kiến thức đã học trên lớp , đồng thời phát hiện & kịp thời khắc phục những thiếu sót trong quá trình học
trước đó , cải thiện hiệu quả trong môn học Kiến trúc các hệ thống thông tin .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
22
D . PHỤ LỤC .
CÁC CHƢƠNG TRÌNH ASSEMBLY
;BAI 1 + Nhap 2 xau X Y
; + Kiem tra Y chua trong X , neu co thi o vi tri nao , may lan ? ;--------------------------------------------------------------------------------------
.MODEL SMALL
.STACK 100h
.DATA
X DB 255 DUP(0) Y DB 255 DUP(0)
N1 DW ? N2 DW ?
START DW ? STOP DW ?
DEM DW 0 MSG1 DB 'Nhap vao xau X : $'
MSG2 DB 'Nhap vao xau Y : $' MSG3 DB 'Xau Y chua trong xau X.$'
MSG4 DB 'Xau Y khong chua trong xau X.$' MSG6 DB 'Vi tri thu : $'
MSG7 DB 'So lan xuat hien : $' KT DB 13,10,'$'
Thongbao macro msg lea dx,msg
mov ah,9 int 21h
endm
.CODE MAIN PROC
MOV AX,@DATA MOV DS,AX
MOV ES,AX Thongbao MSG1
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
23
LEA DI,X ;DI tro toi X CALL INPUTSTR;nhap X
MOV N1,BX ;N1 chua chieu dai X
Thongbao KT Thongbao MSG2
LEA DI,Y CALL INPUTSTR;nhap Y
MOV N2,BX ;N2 chua chieu dai Y
Thongbao KT
PUSH AX ;backup thanh ghi PUSH CX PUSH DX
PUSH DI PUSH SI
MOV CX,N1
CMP CX,0 JE NO ;neu N1=0 -> ko la xau con
MOV CX,N2 ;CX=N2 CMP CX,0 ;CX=0 ?
JE NO ;neu N2=0 -> ko la xau con MOV BX,N1 ;BX=N1
CMP CX,BX ;so sanh N1 voi N2 JA NO ;neu N2>N1 -> ko la xau con ;N2!=0 & N2<=N1
LEA SI,Y
LEA DI,X CALL CHECK ;ktra Y co chua trong X ko
MOV AX,DEM
CMP AX,0 JE NO ;neu ko tim thay
YES: ;neu tim thay
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
24
Thongbao MSG3
Thongbao MSG7 MOV AX,DEM
CALL PRTNUM ;in ra so lan xuat hien JMP EXIT
NO: Thongbao MSG4
EXIT: MOV AH,1
INT 21H
MOV AH,4Ch INT 21h MAIN ENDP
;------------------------------------------------------------------------------- ;Thu tuc doc 1 xau
;input : DI=offset ca xau ;output: DI=offset cua xau
; BX=so ky tu cua xau INPUTSTR PROC
PUSH AX ;backup cac thanh ghi PUSH CX
PUSH DX PUSH DI
CLD ;DF=0 : xu ly tu trai sang phai XOR BX,BX ;khoi tao bien dem BX
MOV AH,1 INT 21h ;doc ky tu
LAP1: CMP AL,0Dh ;AL="enter" ?
JE EXIT1 ;thoat CMP AL,8h ;AL="backspace" ?
JE BACK ;dung STOSB ;cat AL vao ES:DI,tang DI
INC BX JMP READ
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
25
BACK: CMP BX,0
JE NOBACK ;ko the xoa 1 ky tu truoc no (do BX=0) DEC BX
DEC DI ;doi DI ve truoc 1 ky tu CALL BACKSPACE ;xoa 1 ky tu tren man hinh
JMP READ NOBACK:
CALL BACKERROR READ:
INT 21h JMP LAP1
EXIT1: POP DI ;restore thanh ghi,qay lai ct chinh POP DX
POP CX POP AX
RET INPUTSTR ENDP
;------------------------------------------------------------------------------- CHECK PROC
;ktra xau con ;input: SI=offset cua Y
; DI=offset cua X ;output:BX=0 neu khong tim thay
; BX=vi tri cua Y trong X PUSH AX ;backup thanh ghi
PUSH CX PUSH DX
PUSH DI PUSH SI
PUSH DI
MOV START,DI POP DI
PUSH DI
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
26
ADD DI,N1 SUB DI,N2
MOV STOP,DI ;vi tri dung STOP=offset(X)+N1-N2 POP DI
XOR BX,BX
REPEAT: INC BX
MOV CX,N2 ;CX=do dai Y PUSH SI
REPE CMPSB ;so sanh 2 xau POP SI ;lay lai SI
JNZ NFND ;neu chua tim thay (ZF=0) INC DEM ;tang bien dem xau
Thongbao MSG6
MOV AX,BX CALL PRTNUM ;xuat vi tri
NFND: INC START ;neu ko,tang START
MOV DI,START MOV AX,STOP
CMP DI,AX JA RETURN ;START>STOP -> dung
JMP REPEAT RETURN: POP SI ;restore thanh ghi,qay lai ct chinh
POP DI POP DX
POP CX POP AX
RET CHECK ENDP
;------------------------------------------------------------------------------- BACKSPACE PROC
;khi an phim Backspace PUSH AX ;backup thanh ghi
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
27
PUSH BX PUSH DX
MOV AH,2
MOV DL,32 INT 21h ;xuat 1 khoang trang
;dua con tro ve truoc 1 vi tri MOV AH,3
XOR BX,BX INT 10h
DEC DL MOV AH,2
INT 10h POP DX ;restore thanh ghi,qay lai ct chinh
POP BX POP AX
RET BACKSPACE ENDP
;------------------------------------------------------------------------------- BACKERROR PROC
;loi xoa khi chua nhap xau PUSH AX
PUSH BX PUSH DX
MOV AH,3 XOR BX,BX
INT 10h ;lay vi tri hien tai cua con tro INC DL ;dich con tro sang phai 1 vi tri
MOV AH,2 INT 10h ;cap nhat vi tri moi
POP DX
POP BX POP AX
RET BACKERROR ENDP
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
28
;------------------------------------------------------------------------------- PRTNUM PROC
;in so ra man hinh ;input: AX
PUSH AX ;backup thanh ghi PUSH BX
PUSH CX PUSH DX
XOR CX,CX ;khoi tao bien dem
MOV BX,10 CMP AX,0
_LOOP1: XOR DX,DX DIV BX ;AX=(DX:AX)/10
PUSH DX ;dua DX=(DX:AX)%10 vao stack INC CX ;tang bien dem
CMP AX,0 JNE _LOOP1
_LOOP2: ;in ket qua MOV AH,2
POP DX OR DL,30h ;doi so ra ky tu
INT 21h LOOP _LOOP2
Thongbao KT
POP DX ;restore thanh ghi,qay lai ct chinh POP CX
POP BX POP AX
RET PRTNUM ENDP
END MAIN
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
29
;BAI 2.1 . Tim so lon nhat trong 1 day N so 16bit ;----------------------------------------------
.model small
.stack
.data i dw ?
N dw ? A dw 100h dup(?)
msg1 db 'Nhap so phan tu : $' msg2 db 'Nhap cac phan tu : $'
msg3 db 'A[$' msg4 db ']= $'
msg5 db 'So lon nhat : $' Thongbao macro msg
lea dx,msg mov ah,9
int 21h endm
Xuongdong macro
mov ah,2 mov dl,0ah
int 21h mov dl,0dh
int 21h endm
.code mov ax,@data
mov ds,ax
Thongbao msg1
call Nhap mov N,ax ;N:so phan tu cua day so
mov cx,ax ;cx dem nguoc khi nhap cac phan tu lea bx,A ;khoi tao mang cac so
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
30
mov i,0
Xuongdong Thongbao msg2
lap1: ;vong lap nhap cac phan tu Xuongdong
Thongbao msg3 mov ax,i
call SAP
Thongbao msg4
call Nhap mov [bx],ax inc i
add bx,2 loop lap1
Xuongdong
Thongbao msg5
mov cx,N lea bx,A ;bx tro toi A
mov ax,[bx] ;ax chua A[0] dec cx
lap3: add bx,2 cmp ax,[bx] ;so sanh 2 phan tu lien tiep
jg lap4 mov ax,[bx] ;neu < thi ax chua phan tu moi
lap4: loop lap3 ;neu > thi tiep tuc lap3
call SAP ;het vong lap lap3 , ax chua phan tu lon nhat
mov ah,1 int 21h
mov ah,4ch int 21h
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
31
;nhap so co dau Nhap proc
push bx push cx
push dx push si
mov bx,10 xor cx,cx
mov si,cx Nhap1:
mov ah,1 int 21h
cmp al,0dh ;neu an Enter je Nhap3 cmp al,'-'
jne Nhap2 ;neu la so duong inc si ;neu la so am,si <> 0
jmp Nhap1 Nhap2:
xor ah,ah sub al,30h ;ki tu -> so
xchg ax,cx ;ax<->cx mul bx ;ax=ax*10+cx
add cx,ax ;cx<-ax+cx jmp Nhap1
Nhap3: and si,si jz Nhap4 ;neu la so duong
neg cx ;neu la so am thi dao gtri cx Nhap4:
mov ax,cx ;ax luu gtri so da chuyen doi cua phan tu pop si
pop dx pop cx
pop bx ret
Nhap endp ;thu tuc sap chuyen doi so 16bit thanh thap phan , in ra man hinh .
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
32
SAP proc push ax
push bx push cx
push dx mov bx,10
xor cx,cx and ax,ax
jns SAP1 ;toi SAP1 neu la so duong push ax
mov dl,'-' ;neu la so am , in dau mov ah,2
int 21h pop ax neg ax ;doi dau
SAP1: xor dx,dx
div bx ;/10,so du luu vao dx add dx,30h ;so -> ki tu
push dx inc cx ;dem so chu so cx phuc vu lap SAP2
and ax,ax jnz SAP1 ;neu ax <> 0 thi tiep tuc /10
SAP2: pop ax
mov dl,al ;in tung chu so mov ah,2 int 21h
loop SAP2 pop dx
pop cx pop bx
pop ax ret
SAP endp
End
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
33
;BAI 2.2. In ra N vecto ngat , voi N nhap tu ban phim . ;-----------------------------------------------
.MODEL SMALL
.STACK
.DATA MSG DB 'Nhap so ngat muon in : $'
MUITEN DB ' --> $' HAICHAM DB ' : $'
N DW ? I DB 0
XUONGDONG MACRO
MOV AH,2 MOV DL,0AH INT 21H
MOV DL,0DH INT 21H
ENDM
THONGBAO MACRO MSG MOV AH,9
LEA DX,MSG INT 21H
ENDM
.CODE MOV AX,@DATA MOV DS,AX
MOV ES,AX
THONGBAO MSG
CALL NHAP MOV N,AX ;N CHUA SO NGAT MUON IN
MOV CX,AX ;KHOI TAO BIEN DEM CX = N PHUC VU VONG LAP
;VONG LAP LAY CAC NGAT NGAT:
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
34
XUONGDONG
INC I MOV AL,I
MOV AH,0 CALL INRA
THONGBAO MUITEN
MOV AL,I
MOV AH,35H ;LAY NGAT = HAM 35 CUA NGAT 21H INT 21H
;IN VECTO NGAT RA MAN HINH MOV AX,ES
CALL INRA
THONGBAO HAICHAM
MOV AX,BX CALL INRA
LOOP NGAT ;LAP DEN KHI CX=0 -> IN RA DU N NGAT
THOAT: MOV AH,1
INT 21H MOV AH,4CH
INT 21H
INRA PROC ;THU TUC IN SO RA MAN HINH ;VAO : AX CHUA SO CAN IN
PUSH AX PUSH BX
PUSH CX PUSH DX
MOV BX,16
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
35
XOR CX,CX
Chia16: XOR DX,DX
DIV BX ;/16
PUSH DX ;DUA SO DU VAO STACK INC CX
CMP CX,3 ;CX = 4 -> IN DU 4 KI TU JBE Chia16
;LAY SO DU KHOI STACK , IN RA MOV AH,2
Inkq: POP DX CMP DL,9
JBE So ADD DL,7
So: ADD DL,30h
INT 21h ;In ra LOOP Inkq
POP DX
POP CX POP BX
POP AX RET INRA ENDP
NHAP PROC ;THU TUC NHAP 1 SO DUONG
PUSH BX PUSH CX
PUSH DX PUSH SI
MOV BX,10
XOR CX,CX MOV SI,CX
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
36
NHAP1: MOV AH,1
INT 21H CMP AL,0DH ;NEU AN ENTER
JE NHAP2 ;NEU KO->CHUYEN DOI GTRI
XOR AH,AH SUB AL,30H ;KI TU -> SO
XCHG AX,CX ;AX<->CX MUL BX ;AX=AX*10+CX
ADD CX,AX ;CX<-AX+CX JMP NHAP1
NHAP2: MOV AX,CX ;AX LUU GTRI SO DA CHUYEN DOI CUA PHAN TU
POP SI POP DX
POP CX POP BX
RET NHAP ENDP
END
Mục lục
Nguyễn Ngọc Linh HTTT – KSCLC K52
--------------------------------------------------------------------------------------------------------
37
E . TÀI LIỆU THAM KHẢO
1. Slide bài giảng môn học Kiến trúc các hệ thống thông tin
2. Kĩ thuật Vi xử lý & Lập trình Assembly cho hệ vi xử lý - PGS.TS Đỗ Xuân Tiến – NXB KHKT
3. Các bài tập lập trình ngôn ngữ assembler
- PGS.TS Đặng Thành Phu – NXB KHKT
4. Tài liệu từ mạng Internet
Mục lục
top related