nguyen ngoc linh - bao cao bt assembly

37
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 TP LN Kiến trúc các h th ng thông tin Gi ảng viên hướng dn : PGS.TS Nguy n Th Hoàng Lan Sinh viên th c hi n : Nguy n Ng c Linh Lp : Hth ng thông tin và truy n thông KSCLC - K52 Hà Nội 4 - 2011

Upload: little-homer

Post on 03-Jan-2016

230 views

Category:

Documents


5 download

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