1. Trang chủ
  2. » Công Nghệ Thông Tin

Tổng quan về Hợp ngữ

63 390 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tổng quan về Hợp ngữ
Trường học https://www.university.edu.vn/
Chuyên ngành Khoa học Máy Tính
Thể loại Báo cáo
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 63
Dung lượng 780,71 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tổng quan về Hợp ngữ

Trang 1

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)

- 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)

Trang 2

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)

Segment Stack Segment dữ liệu Segment mã

Các thanh ghi

045F[0]H

(045FH)

Chương 1: TỔNG QUAN

Trang 3

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

Trang 4

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

Trang 5

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

Trang 6

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

Trang 7

Ngăn xếp (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

Trang 8

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

Trang 9

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

Trang 10

Chương 1: TỔNG QUAN

Tập lệnh của DEBUG :

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

Trang 11

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ớ

Địa chỉ số hex

dạng segment:offset

của byte

Trang 12

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

Trang 13

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

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 Có ổ đĩa mềm (1=Có, 0=Không)

Trang 14

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>

Trang 15

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>

Trang 16

Chương 1: TỔNG QUAN

Sử dụng DEBUG – Đưa vào một chương trình hợp ngữ

Trang 17

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>

Trang 18

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

- 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

Trang 19

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)

Trang 20

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:

+ 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ự

Trang 21

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Ví dụ 1: Một lệnh:

 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

Trang 22

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Trường tên:

Trường tên được sử dụng làm nhãn lệnh, các tên thủ tục và tên các biến Chương trình biên dịch sẽ chuyển các tên thành các địa chỉ bộ nhớ

Quy tắc:

+ Trường tên cĩ chiều dài từ 1 đến 31 ký tự

+ Cĩ thể chứa các chữ cái, chữ số và các ký tự đặc biệt (? @ _ $ %)

+ Trường tên khơng chứa dấu trống ở giữa

+ Nếu sử dụng dấu chấm thì dấu chấm chỉ được đặt ở vị trí đầu tiên

+ Khơng được bắt đầu bằng một chữ số

+ Khơng phân biệt chữ hoa và chữ thường

Ví dụ các tên hợp lệ:

COUNTER1

@character SUM_OF_DIGIT

$1000 DONE?

.TEST

Ví dụ các tên khơng hợp lệ:

TWO WORD 2abc

AB45.67 YOU&ME

Trang 23

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

Trang 24

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

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

Trang 25

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Trường lời giải thích:

Chú thích của một dịng lệnh để người lập trình biết dịng lệnh đĩ để làm

Ví dụ 1: Khơng nên viết những điều đã quá rõ ràng

Quy tắc:

+ Mở đầu giải thích là dấu (;)  Trình biên dịch bỏ qua mọi cái phía sau dấu chấm phẩy này

+ Nên cĩ lời giải thích ích cho hầu hết các dịng lệnh

+ Khơng nên viết chú thích cho những lệnh quá rõ ràng

+ Nên đặt các chú giải giải thích ngữ cảnh của chương trình

Ví dụ 2: Giải thích ngữ cảnh của chương trình

Ví dụ 3: Tạo ra các dịng trống trên chương trình

;

;khởi tạo các thanh ghi

;

MOV AX,0

Trang 26

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Trang 27

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Dữ liệu dưới dạng ký tự:

+ Các ký tự và chuỗi ký tự được bao trong dấu nháy đơn hoặc nháy kép (Ví dụ: „hello‟)  Trình biên dịch dịch ra mã ASCII của chúng  Khơng phân biệt giữa „A‟ hay 41h

+ Sử dụng các tốn tử giả để định nghĩa số liệu:

Tốn tử giả Biểu diễn

DB Byte

DD Từ kép

DQ Định nghĩa 4 Word ( 4 từ liên tiếp)

DT Định nghĩa 10 byte (10 byte liên tiếp)

Trang 28

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Các biến kiểu Byte

+ Định nghĩa một biến kiểu Byte của trình biên dịch cĩ dạng:

TÊN DB giá trị khởi tạo

Ví dụ: ALPHA DB 4

 Gán tên ALPHA cho một byte nhớ và khởi tạo giá trị của nĩ là 4

+ Nếu đặt một dấu chấm hỏi (?) ở vị trí giá trị khởi tạo sẽ tạo nên một byte khơng được khởi tạo:

Ví dụ: BYTE DB ?

+ Giới hạn thập phân của các giá trị khởi tạo nằm trong khoảng -128 đến

127 với kiểu cĩ dấu và từ 0 đến 255 với kiểu khơng dấu

Trang 29

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Các biến kiểu Word

+ Định nghĩa một biến kiểu Word của trình biên dịch cĩ dạng:

TÊN DW giá trị khởi tạo

Ví dụ: WLD DW -2

 Gán tên ALPHA cho một byte nhớ và khởi tạo giá trị của nĩ là 4

+ Nếu đặt một dấu chấm hỏi (?) ở vị trí giá trị khởi tạo sẽ tạo nên một Word khơng được khởi tạo:

Ví dụ: WLD DW ?

+ Giới hạn thập phân của các giá trị khởi tạo nằm trong khoảng -32768 đến 32767 với kiểu cĩ dấu và từ 0 đến 65535 với kiểu khơng dấu

Trang 30

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Các mảng

+ Mảng là một chuỗi các Byte nhớ hay từ nhớ:

TÊN DB giá trị 1, giá trị 2, …

Trang 31

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Các mảng

+ Mảng là một chuỗi các Word nhớ hay từ nhớ:

TÊN DW giá trị 1, giá trị 2, …

Ví dụ: W_ARRAY DW 1000,356,248

 Định nghĩa mảng 3 phần tử cĩ tên W_ARRAY với các giá trị khởi tạo 1000,356,248

Tên W_ARRAY gán cho word đầu tiên, W_ARRAY+1 cho word thứ hai

và W_ARRAY+2 cho word thứ ba Giả sử trình biên dịch gán địa chỉ Offset 0300h cho mảng W_ARRAY thì bộ nhớ sẽ như sau:

Trang 32

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Chuỗi ký tự

+ Một chuỗi ký tự cĩ thể được khởi tạo bằng mảng các mã ASCII

 Tương đương: LETTER DB 41h,42h,43h

+ Trình biên dịch phân biệt một chuỗi ký tự chữ hoa và chữ thường.

Trang 33

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Khai báo trong C Khai báo trong hợp ngữ

Trang 34

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

+ Để tạo ra các mã lệnh dễ hiểu, hợp ngữ sử dụng các tên tượng trưng để biểu diễn hằng số: EQU (coi như, coi bằng như, )

Để gán tên cho hằng, sử dụng tốn tử EQU như sau:

Trang 35

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Tạo lập & chạy một chương trình hợp ngữ

Cĩ 4 bước cụ thể để tạo lập và chạy

tạo ra File đối tượng ngơn ngữ máy

3 Dùng chương trình Link liên kết

các File đối tượng tạo ra File

chương trình

4 Chạy File chương trình

Trang 36

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Tạo lập & chạy một chương trình hợp ngữ

Cĩ 4 bước cụ thể để tạo lập và chạy

tạo ra File đối tượng ngơn ngữ máy

3 Dùng chương trình Link liên kết

các File đối tượng tạo ra File

chương trình

4 Chạy File chương trình

Trang 37

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

+ Hệ lệnh 8086/8088 cĩ hơn 100 lệnh, trong đĩ cĩ các lệnh thiết kế dành riêng cho các bộ xử lý cao cấp

+ Xem xét 6 lệnh tiện dụng nhất cho việc chuyển dữ liệu và thực hiện các phép tính số học, dùng cho cả tồn hạng Byte và Word:

1 MOV và XCHG

2 ADD, SUB, INC và DEC

+ Một số quy ước:

• WORD1 và WORD2 là các biến kiểu word

• BYTE1 và BYTE2 là các biến kiểu byte

• AH là byte cao của thanh ghi AX, BL là byte thấp của BX

Trang 38

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

WORD1 vào AX” Nội dung của

thanh ghi AX được thay bằng nội

dung ơ nhớ WORD1, nội dung

WORD1 khơng thay đổi

Trước lệnh MOV

0006 AX

0008 WORD1

Sau lệnh MOV

0008 AX 0008 WORD1

Trang 39

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

MOV

Các khả năng kết hợp cho phép của các tốn hạng trong lệnh MOV

Thanh ghi cơng dụng chung

Thanh ghi đoạn

Tốn

hạng

nguồn

Trang 40

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Lệnh này đọc là “hốn chuyển nội

dung WORD1 vào AX và ngược lại”

Nội dung của thanh ghi AX được thay

bằng nội dung ơ nhớ WORD1, nội

dung WORD1 thay đổi bằng nội dung

thanh ghi AX

Trước lệnh XCHG

0006 AX

0008 WORD1

Sau lệnh XCHG

0008 AX 0006 WORD1

Trang 41

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

XCHG

Các khả năng kết hợp cho phép của các tốn hạng trong lệnh XCHG

Thanh ghi cơng dụng chung

Tốn hạng nguồn

Trang 42

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Lệnh này đọc là “cộng nội dung

thanh ghi AX với nội dung ơ nhớ

WORD1 và chứa kết quả trong

WORD1”

 Nội dung của thanh ghi AX khơng

thay đổi, nội dung WORD1 thay đổi

bằng nội dung WORD1 cộng nội dung

thanh ghi AX

Trước lệnh ADD

0006 AX

0008 WORD1

Sau lệnh ADD

0006 AX 0014 WORD1

Trang 43

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

Lệnh này đọc là “trừ nội dung ơ nhớ

WORD1 cho giá trị thanh ghi AX và

chứa kết quả trong WORD1”

 Nội dung của thanh ghi AX khơng

thay đổi, nội dung WORD1 thay đổi

bằng nội dung WORD1 trừ nội dung

thanh ghi AX

Trước lệnh SUB

0006 AX

0008 WORD1

Sau lệnh SUB

0006 AX 0002 WORD1

Trang 44

Chương 1: TỔNG QUAN

Tiếp cận cơ bản về Assembly

ADD và SUB

Các khả năng kết hợp cho phép của các tốn hạng trong lệnh ADD và SUB

Thanh ghi cơng dụng chung

Tốn hạng nguồn

Ngày đăng: 02/05/2014, 21:24

TỪ KHÓA LIÊN QUAN

w