Mục tiêu

(cid:122) Tìm hiểu cấu trúc tổng quát của PC

Bài 1 Đại cương về Hợp ngữ

(cid:122) Tổ chức bộ nhớ (cid:122) Tổ chức các thanh ghi

(cid:122) Tìm hiểu khái quát về Hợp ngữ

(cid:122) Cấu trúc lệnh (cid:122) Cấu trúc chương trình hợp ngữ (cid:122) Một số lệnh cơ bản

1.1 Tổ chức PC

1.2 CPU

1.3 Tổ chức bộ nhớ (cid:122) Địa chỉ tuyệt đối:

Offset

(cid:122) Xác định vị trí của từng byte trong bộ nhớ (cid:122) (8086) dài 20 bit, bộ nhớ 1MB

Segment 1134h

1023h

(cid:122) Địa chỉ tương đối:

11340h

(cid:122) Chế độ thực, truy cập bộ nhớ theo dạng

Segment:Offset

( Đoạn : Ô )

(cid:122) Segment, Offset: địa chỉ 16 bit (lưu trong thanh ghi) (cid:122) Segment: địa chỉ tuyệt đối bắt đầu đoạn (chia cho 16)

Ví dụ: 11340h (cid:198) 1134h

12363h

(cid:122) Offset: vị trí của byte trong đoạn

(cid:122) Các đoạn có thể chồng lên, nối tiếp, cách xa nhau (cid:122) Chỉ đề cập đến chế độ thực và bộ lệnh 8086

1

(cid:122) Nhóm thanh ghi đa dụng:

1.4 Tổ chức thanh ghi

(cid:122) AX, BX, CX, DX (cid:122) Xem như 1 thanh ghi 16 bit (ví dụ: AX)

hoặc 2 thanh ghi 8 bit (ví dụ: AH (high), AL (low))

(cid:122) Chứa dữ liệu, nhưng trong mỗi lệnh sẽ có ý nghĩa riêng (cid:122) Nhóm thanh ghi con trỏ và chỉ số (Pointer, Index Reg)

(cid:122) Thanh ghi là nơi lưu trữ dữ liệu trong CPU (cid:122) Gồm 16 thanh ghi, mỗi thanh dài 16 (hoặc 32 bit) (cid:122) Người dùng chỉ dùng địa chỉ tương đối (cid:122) CPU sẽ chuyển thành đ/chỉ tuyệt đối và truy xuất bộ nhớ

(chứa địa chỉ offset các vùng dữ liệu) (cid:122) SI (Source Index) và

DI (Destination Index) ứng với địa chỉ seg. trong DS, ES

(cid:122) SP (Stack Pointer) và

BP (Base Point.) ứng với địa chỉ segment trong SS

(cid:122) Nhóm thanh ghi cờ và con trỏ lệnh

(cid:122) FLAGS: ghi nhận thông tin điều khiển và trạng thái CPU

(sẽ nói kỹ ở bài sau)

(cid:122) Nhóm thanh ghi đoạn (Segment Register) (chứa địa chỉ đoạn các ô nhớ cần truy xuất) (cid:122) CS (Code Seg.) chứa địa chỉ đoạn vùng mã lệnh dữ liệu (cid:122) DS (Data Seg.) (cid:122) SS (Stack Seg.) ngăn xếp (cid:122) ES (Extra Seg.) kèm thêm với DS

(cid:122) IP (Instruction Pointer) địa chỉ offset của lệnh tiếp,

ứng với địa chỉ segment trong CS

1.5 Ngôn ngữ máy – Hợp ngữ

(cid:122) (Các thanh ghi sắp xếp theo chức năng)

(cid:122) Ngôn ngữ máy: (cid:122) Dạng nhị phân (cid:122) Thực hiện nhanh, chiếm ít chỗ trong bộ nhớ (cid:122) Khó viết, khó nhớ

(cid:122) Hợp ngữ:

(cid:122) Dùng một số ký hiệu dễ nhớ (cid:122) Cần có ch/trình chuyển hợp ngữ sang ng/ngữ máy

1.6 Cách viết lệnh hợp ngữ

1011b

‘A’ “ABC”

Nếu có nhiều tác tố, cách nhau dấu phẩy, Nếu có 2 tác tố, có thứ tự: tác tố đích, tác tố nguồn

(cid:122) Cách viết số: (cid:122) Chương trình hợp ngữ gồm nhiều lệnh, mỗi lệnh viết trên 1 dòng (cid:122) Gồm 2 loại: chỉ thị (lệnh) và chĩ dẫn (hướng dẫn hợp dịch) (cid:122) mặc định thập phân (D/d), hexa (H/h), binary (B/b) 10h (cid:122) Cú pháp: <;GhiChú> (cid:122) Cách viết chuỗi: (cid:122) : Là chuỗi gồm các ký tự, ký số, ? , . , @ , _ , $, % (cid:131) Nhãn: vị trí trong chương trình (theo sau :), tên thủ tục, tên biến (cid:131) Ký hiệu: đại diện cho hằng số hoặc chuỗi ký tự (cid:122) giữa 2 dấu nháy đơn hoặc nháy kép (cid:122) (các ký tự sẽ được chuyển thành mã ASCII tương ứng) (cid:122) : Tên gợi nhớ của lệnh (cid:122) : Xác định dữ liệu sẽ được xử lý bởi lệnh

(cid:122) <;GhiChú>: Sau dấu ; để giải thích ý nghĩa lệnh

2

(cid:122) Định nghĩa vùng nhớ dữ liệu (biến):

; thường dùng SMALL ...

(cid:122) Nhãn DB Trị1, Trị2, ... (cid:122) Nhãn DW Trị1, Trị2, ... Nhãn là tên vùng nhớ (biến), được định nghĩa với kích thước

B DB ?

là byte (DB) hoặc word (DW), được gán Trị... (cid:131) Không gán trị: ? (cid:131) Gán nhiều trị giống nhau: toán tử DUP SCO DB 6 DUP (0)

; (ascii code) Carriage Return, về đầu dòng ; Line Feed, sang dòng mới

(cid:122) Cấu trúc chương trình hợp ngữ:

(cid:122) Định nghĩa hằng: (cid:122) Tên EQU Hằng (cid:131) CR EQU 0Dh LF EQU 0Ah STR EQU ‘Du lieu nhap sai!!’

(cid:122) Khai báo kích thước chương trình .MODEL Kiểu (cid:122) Khai báo kích thước vùng ngăn xếp .STACK KíchThước ; thường 100h, mặc định 1024 (cid:122) Khai báo dữ liệu bắt đầu bằng chỉ dẫn .DATA ... (cid:122) Khai báo mã lệnh bắt đầu bằng chỉ dẫn .CODE ... (cid:122) Kết thúc chương trình bằng chỉ dẫn END (cid:131) MESS DB STR,CR,LF,’$’

(cid:122) INT 21h

1.7 Một số lệnh đơn giản (cid:122) MOV Đích, Nguồn

Gọi trình con của hệ điều hành, chức năng tùy theo trị th/ghi AH (cid:122) AH = 1

(cid:131) Nhận 1 ký tự từ bàn phím, mã ASCII chứa trong AL

(cid:131) Xuất 1 ký tự ra màn hình, ký tự chứa trong DL

(cid:131) Xuất chuỗi ký tự có địa chỉ offset trong DX (seg. trong DS) (cid:131) Chuỗi ký tự phải kết thúc bằng ‘$’

.DATA

MSG DB “Chuoi can hien thi$”

; lấy địa chỉ seg dữ liệu (MOV AX, SEG DATA) ; đưa vào DS

(cid:122) AH = 2 (cid:122) Sao chép dữ liệu (Nguồn) vào thanh ghi / vùng nhớ (Đích) (cid:122) Hai tác tố không đồng thời là vùng nhớ hoặc th/ghi đoạn (cid:122) XCHG Đích, Nguồn (cid:122) AH = 9 (cid:122) Hoán chuyển dữ liệu (không đồng thời là vùng nhớ) (cid:122) ADD Đích, Nguồn (cid:122) Cộng dồn Nguồn vào Đích. Hai tác tố khg đồng thời là vùng nhớ (cid:122) SUB

Đích, Nguồn (cid:122) Trừ Đích cho Nguồn Đích

; đưa off MSG vào DX (MOV DX, OFFSET MSG)

(cid:122) INC (cid:122) Tăng Đích lên 1 (cid:122) DEC

Đích

.CODE MOV AX, @DATA MOV DS, AX MOV AH, 9 LEA DX, MSG INT 21h (cid:122) AH = 4Ch

(cid:131) Kết thúc chương trình và trả điều khiển về cho hệ điều hành

(cid:122) Giảm Đích đi 1 (cid:122) NEG

Đích (cid:122) Đổi dấu Đích

3