Tải bản đầy đủ (.pdf) (63 trang)

Tổng quan về Hợp ngữ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (780.71 KB, 63 trang )

Chương 1: TỔNG QUAN
Một chương trình viết bằng hợp ngữ:

+ Bao gồm: Segment (vùng nhớ) / Stack (ngăn xếp)

+ Xử lý một nhóm byte (đơn vò dữ liệu) – gọi là trường, có kích thước:
- Từ (Word): Trường 2 byte (16 bit)
- Từ kép (Double Word): Trường 4 byte (32 bit)
- Bốn từ (QuadWord): Trường 8 byte (64 bit)
- Paragraph: Trường 16 byte
- KiloByte (KB): Trường 2
10
byte (1024 byte)
- MegaByte (MB): Trường 2
20
byte (1024 KB)
- GigaByte (GB): Trường 2
30
byte (1024 MB)
Segment và đònh đòa chỉ
Segment là:
- Vùng nhớ cụ thể trong một chương trình
- Đòa chỉ bắt đầu có giá trò chia hết 16 (10H)
- Có 3 loại chính:
* Segment mã
* Segment dữ liệu
* Segment Stack
- Để đònh đòa chỉ một segment: thay đổi đòa chỉ chứa trong các
thanh ghi segment tương ứng
SS
DS


CS
Đòa chỉ
Đòa chỉ
Đòa chỉ
Segment Stack
Segment dữ liệu
Segment mã
Các thanh ghi
segment
Bộ nhớ
045F[0]H
(045FH)
Chương 1: TỔNG QUAN
Segment và đònh đòa chỉ
Đòa chỉ Offset của segment:
- Khoảng cách tính bằng byte từ đòa chỉ bắt đầu của segment
- Đòa chỉ Offset 2 byte có tầm khoảng cách 0000H  FFFFH (0 
65535)
- Để tham chiếu một đòa chỉ trong một segment: kết hợp đòa chỉ
segment trong thanh ghi segment với đòa chỉ offset

VD: Thanh ghi segment DS chứa đòa chỉ segment dữ liệu: 045F[0]H
Một chỉ thò tham chiếu đến ô nhớ có đòa chỉ offset 0032H trong
segment dữ liệu
 Đòa chỉ được tham chiếu:
045F0H
+0032H

04622H
SS

DS
CS
Đòa chỉ
Đòa chỉ
Đòa chỉ
Segment Stack
Segment dữ liệu
Segment mã
Các thanh ghi
segment
Bộ nhớ
045F[0]H
(045FH)
04622H
Chương 1: TỔNG QUAN
Các thanh ghi
Thanh ghi segment CS:

- Lưu đòa chỉ bắt đầu của segment mã của chương trình
- Tìm – nạp đòa chỉ chỉ thò:
CS (đòa chỉ) + Con trỏ lệnh IP (offset) (CS:IP)

Ví dụ: Thanh ghi segment CS chứa 25A4[0]H
Con trỏ lệnh IP chứa 412H
Đòa chỉ của chỉ thò kế tiếp là: 25A40H
+ 412H

25E52H
Chương 1: TỔNG QUAN
Các thanh ghi

Thanh ghi segment DS:

- Lưu đòa chỉ bắt đầu của segment dữ liệu của chương trình
- Tìm vò trí byte cụ thể của chương trình:
DS (đòa chỉ) + Đòa chỉ offset
Thanh ghi segment SS:

- Lưu đòa chỉ bắt đầu của segment Stack của chương trình
- Chỉ ra từ hiện hành trong stack:
SS (đòa chỉ) + Con trỏ Stack SP (offset) (SS:SP)

Ví dụ: Thanh ghi segment SS chứa 27B4[0]H
Con trỏ stack SP chứa 312H
Từ hiện hành trong stack là: 27B40H
+ 312H

27E42H
Chương 1: TỔNG QUAN
Ngăn xếp (Stack)
Khái niệm:
- Vùng nhớ dự trữ trong chương trình gọi là ngăn xếp
- Mục đích: lưu trữ tạm thời các đòa chỉ và dữ liệu
- Mỗi dữ liệu trong ngăn xếp là một từ (2 byte)
Khởi tạo ngăn xếp:
- Thanh ghi segment stack SS được khởi tạo bởi DOS chứa đòa chỉ
bắt đầu của stack
- Con trỏ stack SP chứa kích thước vùng stack (trỏ tới byte cuối
stack)
Chương 1: TỔNG QUAN
Hoạt động của ngăn xếp:

- Dữ liệu lưu trữ bắt đầu ở đòa chỉ cao nhất
- Lưu theo chiều giảm dần nội dung của con trỏ stack SP

SS
SP
Ngăn xếp (Stack)
PUSH: - Giảm nội dung SP xuống 2  Lưu giá trò ở Stack
Chương 1: TỔNG QUAN
POP: - Trả về giá trò tại Stack  Tăng nội dung SP lên 2
Khi hệ thống nhận dữ liệu ghi vào bộ nhớ sẽ đảo trình tự byte ngược lại:
Byte thấp ở đòa chỉ thấp và Byte cao ở đòa chỉ cao của bộ nhớ:

Ví dụ: Chuyển 0401H từ thanh ghi vào vò trí nhớ 5612 và 5613

Thanh ghi 04 01 (0401)

Bộ nhớ 01 04 (0104)
5612 5613
Byte thấp Byte cao
Ngăn xếp (Stack)
Chương 1: TỔNG QUAN

SS
SP = 28
1. Vùng stack ban đầu:
Ví dụ: Cất nội dung thanh ghi AX và BX lên stack, sau đó khôi phục lại.
Giả sữ AX chứa 015AH và BX chứa 03D2H, con trỏ SP chứa 28H
5A01
SS
SP = 26

2. PUSH AX
D203 5A01
SS
SP = 24
3. PUSH BX
D203 5A01
SS
SP = 26
4. POP BX
D203 5A01
SS
SP = 28
5. POP AX
Chương 1: TỔNG QUAN
Chương trình DEBUG của DOS:

- Dùng để kiểm tra và gỡ rối chương trình
- Đặc trưng:
* Hiển thò mã và dữ liệu chương trình bằng mã hex
* Cho phép thực thi chương trình chế độ từng bước
- Quy luật:
* Không phân biệt chữ HOA và chữ thường
* Xác đònh segment và offset bởi dấu (:) ở dạng số hex
segment:offset

Ví dụ:
Hiển thò một vùng nhớ, bắt đầu từ offset 200H trong
segment dữ liệu DS:

D DS:200

d DS:200
D ds:200
Chương 1: TỔNG QUAN
Tập lệnh của DEBUG :
Lệnh Chức năng
A (Assembler)

Hợp
dòch các chỉ thò hợp ngữ thành mã máy
D (Dump)

Hiển
thò nội dung một vùng nhớ của bộ nhớ
E (Enter)

Đưa
dữ liệu vào bộ nhớ, bắt đầu ở một vò trí cụ thể
G (Go)

Chạy
chương trình thực thi trong bộ nhớ
N (Name)

Đặt
tên cho một chương trình
P (Proceed)

Tiếp
tục hoặc thực thi một tập các chỉ thò có liên quan


Q (Quit)

Thoát
khỏi debug
R (Register)

Hiển
thò nội dung của một hoặc nhiều thanh ghi
T (Trace)

Chỉ
đònh việc thực thi một chỉ thò
U (Unassembler)
Dòch
ngược mã máy thành chỉ thò của hợp ngữ
W (Write)

Ghi
một chương trình lên đóa
Chương 1: TỔNG QUAN
Hiển thò của DEBUG :
- Bao gồm 3 phần
- Mỗi một hàng hiển thò 16 byte của bộ nhớ
xxxx:xxxx xx xx xx xx – xx xx xx xx xx xx
xxxx:xxxx xx xx xx xx – xx xx xx xx xx xx
xxxx:xxxx xx xx xx xx – xx xx xx xx xx xx
Biểu diễn số hex
của vùng hiển thò
Biểu diễn
ASCII của các

byte chức ký tự
hiển thò được
Đòa chỉ số hex
dạng
segment:offset
của byte
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Xem các vò trí nhớ
Kiểm tra thiết bò hệ thống
- Từ trạng thái thiết bò ở các vò trí 410H và 411H
- Đọc ở đòa chỉ 410H  Đọc 40:10  40[0]H+10H
 Xem nội dung của từ qua đòa chỉ 2 thành phần: 40 cho segment và 10
cho offset trong segment

Ví dụ: Lệnh: D 40:10 <Enter>
Kết quả: 0040:0010 63 44

 Hai byte từ trạng thái là 63 và 44  Đảo ngược thành 44 và 63
rồi đổi qua nhò phân:

Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NP 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Xem các vò trí nhớ
Kiểm tra thiết bò hệ thống
Giải thích:
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NP 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1
Bit Thiết bò
15,14


Số
cổng máy in song song được cài đặt = 1 (01)
11,10,9

Số
cổng nối tiếp được cài đặt =2 (010)
7,6

Số
ổ đóa mềm =2 (00=1,01=2,10=3,11=4)
5,4

Chế
độ video ban đầu =10 (01=40x25 màu, 10=80x25
màu và 11=80x25 đơn sắc)

0


ổ đóa mềm (1=Có, 0=Không)
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Xem các vò trí nhớ
Kiểm tra kích thước bộ nhớ
- Từ trạng thái ở các vò trí 413H và 414H
- Đọc ở đòa chỉ 413H  Đọc 40:13  40[0]H+13H
 Xem nội dung của từ qua đòa chỉ 2 thành phần: 40 cho segment và 13
cho offset trong segment

Ví dụ: Lệnh: D 40:13 <Enter>

Kết quả: 0040:0013 80 02

 Hai byte từ trạng thái là xx xx Đảo ngược rồi đổi qua nhò
phân:

Số hex Giá trò (KB)
02 00 512
02 80 640
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Xem các vò trí nhớ
Kiểm tra kích thước bộ nhớ
- Từ trạng thái ở các vò trí 413H và 414H
- Đọc ở đòa chỉ 413H  Đọc 40:13  40[0]H+13H
 Xem nội dung của từ qua đòa chỉ 2 thành phần: 40 cho segment và 13
cho offset trong segment

Ví dụ: Lệnh: D 40:13 <Enter>
Kết quả: 0040:0013 80 02

 Hai byte từ trạng thái là xx xx Đảo ngược rồi đổi qua nhò
phân:

Số hex Giá trò (KB)
02 00 512
02 80 640
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Đưa vào một chương trình hợp ngữ
Lệnh A (Assembler)
- Báo cho debug nhận chỉ thò hợp ngữ


Ví dụ:
- Khởi động đòa chỉ bắt đầu trong segment mã ở offset 100H:
A 100 <Enter>
 Debug hiển thò segment:offset dạng: xxxx:0100

- Gõ vào từng chỉ thò:
MOV AL, 25 <Enter>
MOV BL,32 <Enter>
ADD AL,BL <Enter>
NOP <Enter,Enter>
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Đưa vào một chương trình hợp ngữ
Lệnh U (UnAssembler)
- Hiển thò mã máy của các chỉ thò hợp ngữ

Ví dụ: U 100,106 <Enter>
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Sử dụng chỉ thò ngắt
Lấy ngày hiện hành
- Chức năng 2AH của INT 21H cho biết ngày hiện hành

Ví dụ:
- Khởi động đòa chỉ bắt đầu trong segment mã ở offset 100H:
A 100 <Enter>
- Gõ vào từng chỉ thò:
MOV AH, 2A <Enter>
INT 21H <Enter>
NOP <Enter,Enter>
- Gõ R để xem nội dung các thanh ghi
- Gõ T để thực thi chỉ thò MOV

- Gõ P để thực thi chỉ thò INT
Chương 1: TỔNG QUAN
Sử dụng DEBUG – Sử dụng chỉ thò ngắt
Lấy ngày hiện hành
- Chức năng 2AH của INT 21H cho biết ngày hiện hành
AL: Ngày
của tuần
(0=Sunday)
CX: Năm
07DB=2011
DH: Tháng (Từ 01-12)
DL: Ngày của tháng (Từ 01-31)
Chương 1: TỔNG QUAN
Tiếp cận cơ bản về Assembly
+ Các chương trình bao gồm các dòng lệnh, mỗi dòng lệnh trên một dòng.
+ Một dòng lệnh là một lệnh mà trình biên dịch sẽ dịch ra mã máy hay là
một hướng dẫn biên dịch để chỉ cho trình biên dịch thực hiện một vài
nhiệm vụ
+ Một dòng lệnh thường có 4 phần:

TÊN TỐN TỬ TỐN HẠNG LỜI BÌNH
+ Các trường được phân cách nhau bằng ít nhất 1 ký tự trống hay TAB.
Khơng bắt buộc phải sắp xếp các trường theo cột, nhưng nhất định phải
theo đúng thứ tự
Chương 1: TỔNG QUAN
Tiếp cận cơ bản về Assembly
Ví dụ 1: Một lệnh:
START: MOV CX,5 ;khởi tạo bộ đếm

 Trong ví dụ này, trường tên là nhãn START, tốn tử là MOV, tốn

hạng là CX và 5, lời bình là “khởi tạo bộ đếm”
Ví dụ 2: Một hướng dẫn biên dịch:
MAIN PROC

 Trong ví dụ này, trường tên là MAIN, tốn hạng là PROC. Dẫn hướng
biên dịch này khai báo một chương trình con có tên PROC.
Chửụng 1: TONG QUAN
Tieỏp caọn cụ baỷn ve Assembly
Trng tờn:
Trng tờn c s dng lm nhón lnh, cỏc tờn th tc v tờn cỏc bin.
Chng trỡnh biờn dch s chuyn cỏc tờn thnh cỏc a ch b nh
Quy tc:
+ Trng tờn cú chiu di t 1 n 31 ký t
+ Cú th cha cỏc ch cỏi, ch s v cỏc ký t c bit (? . @ _ $ %)
+ Trng tờn khụng cha du trng gia
+ Nu s dng du chm thỡ du chm ch c t v trớ u tiờn
+ Khụng c bt u bng mt ch s.
+ Khụng phõn bit ch hoa v ch thng
Vớ d cỏc tờn hp l:
COUNTER1
@character
SUM_OF_DIGIT
$1000
DONE?
.TEST
Vớ d cỏc tờn khụng hp l:
TWO WORD
2abc
AB45.67
YOU&ME

Chương 1: TỔNG QUAN
Tiếp cận cơ bản về Assembly
Trường tốn tử:
Trong một lệnh, trường tốn tử chứa mã lệnh ở dạng tượng trưng,
chương trình biên dịch chuyển mã lệnh dạng tượng trưng sang mã lệnh
của ngơn ngữ máy
Quy tắc:
+ Tượng trưng của mã lệnh thường biểu thị chức năng của các thao tác:
MOV, ADD, SUB
+ Trường tốn tử nếu chứa tốn tử giả thì các tốn tử giả khơng được
dịch ra mã máy mà chỉ báo cho trình biên dịch làm một việc gì đó.
Chương 1: TỔNG QUAN
Tiếp cận cơ bản về Assembly
Trường tốn hạng:
Với một chỉ thị, trường tốn hạng xác định dữ liệu sẽ được thao tác tác
động lên. Một chỉ thị có thể khơng có, có 1, hoặc có 2 tốn hạng.
Ví dụ:
INC AX ;một tốn hàng, cộng 1 vào nội dung AX
ADD WORD1,2 ;hai tốn hạng, cộng 2 vào từ nhớ WORD1
Trong một chỉ thị có 2 tốn hạng: tốn hạng đầu gọi là tốn hạng đích. Nó
có thể là một thanh ghi, một ơ nhớ, là nơi chứa kết quả. Tốn hạng thứ
hai là tốn hạng nguồn
Chửụng 1: TONG QUAN
Tieỏp caọn cụ baỷn ve Assembly
Trng li gii thớch:
Chỳ thớch ca mt dũng lnh ngi lp trỡnh bit dũng lnh ú lm
gỡ.
Vớ d 1: Khụng nờn vit nhng iu ó quỏ rừ rng
MOV CX,0 ;chuyn 0 vo CX
Quy tc:

+ M u gii thớch l du (;) Trỡnh biờn dch b qua mi cỏi phớa sau
du chm phy ny.
+ Nờn cú li gii thớch ớch cho hu ht cỏc dũng lnh
+ Khụng nờn vit chỳ thớch cho nhng lnh quỏ rừ rng
+ Nờn t cỏc chỳ gii gii thớch ng cnh ca chng trỡnh
Vớ d 2: Gii thớch ng cnh ca chng trỡnh
MOV CX,0 ;CX m s vũng lp, khi to l 0
Vớ d 3: To ra cỏc dũng trng trờn chng trỡnh
;
;khi to cỏc thanh ghi
;
MOV AX,0

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×