1.3 Tổ chức bộ nhớ
z Địa chỉ tuyệt đối:
z Xác định vị trí của từng byte trong bộ nhớ
z (8086) dài 20 bit, bộ nhớ 1MB
z Địa chỉ tương đối:
z Chế độ thực, truy cập bộ nhớ theo dạng
Segment:Offset ( Đoạn : Ô )
z Segment, Offset: địa chỉ 16 bit (lưu trong thanh ghi)
z Segment: địa chỉ tuyệt đối bắt đầu đoạn (chia cho 16)
Ví dụ: 11340h Æ 1134h
z Offset: vị trí của byte trong đoạn
z Các đoạn có thể chồng lên, nối tiếp, cách xa nhau
z Chỉ đề cập đến chế độ thực và bộ lệnh 8086
3 trang |
Chia sẻ: thanhle95 | Lượt xem: 498 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Bài giảng Kiến trúc máy tính - Bài 1: Đại cương về Hợp ngữ, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
1Bài 1
Đại cương về Hợp ngữ
Mục tiêu
z Tìm hiểu cấu trúc tổng quát của PC
z Tổ chức bộ nhớ
z Tổ chức các thanh ghi
z Tìm hiểu khái quát về Hợp ngữ
z Cấu trúc lệnh
z Cấu trúc chương trình hợp ngữ
z Một số lệnh cơ bản
1.1 Tổ chức PC 1.2 CPU
1.3 Tổ chức bộ nhớ
z Địa chỉ tuyệt đối:
z Xác định vị trí của từng byte trong bộ nhớ
z (8086) dài 20 bit, bộ nhớ 1MB
z Địa chỉ tương đối:
z Chế độ thực, truy cập bộ nhớ theo dạng
Segment:Offset ( Đoạn : Ô )
z Segment, Offset: địa chỉ 16 bit (lưu trong thanh ghi)
z Segment: địa chỉ tuyệt đối bắt đầu đoạn (chia cho 16)
Ví dụ: 11340h Æ 1134h
z Offset: vị trí của byte trong đoạn
z Các đoạn có thể chồng lên, nối tiếp, cách xa nhau
z Chỉ đề cập đến chế độ thực và bộ lệnh 8086
Segment
1134h
12363h
11340h
Offset
1023h
21.4 Tổ chức thanh ghi
z Thanh ghi là nơi lưu trữ dữ liệu trong CPU
z Gồm 16 thanh ghi, mỗi thanh dài 16 (hoặc 32 bit)
z Người dùng chỉ dùng địa chỉ tương đối
z CPU sẽ chuyển thành đ/chỉ tuyệt đối và truy xuất bộ nhớ
z Nhóm thanh ghi đoạn (Segment Register)
(chứa địa chỉ đoạn các ô nhớ cần truy xuất)
z CS (Code Seg.) chứa địa chỉ đoạn vùng mã lệnh
z DS (Data Seg.) dữ liệu
z SS (Stack Seg.) ngăn xếp
z ES (Extra Seg.) kèm thêm với DS
z Nhóm thanh ghi đa dụng:
z AX, BX, CX, DX
z Xem như 1 thanh ghi 16 bit (ví dụ: AX)
hoặc 2 thanh ghi 8 bit (ví dụ: AH (high), AL (low))
z Chứa dữ liệu, nhưng trong mỗi lệnh sẽ có ý nghĩa riêng
z Nhóm thanh ghi con trỏ và chỉ số (Pointer, Index Reg)
(chứa địa chỉ offset các vùng dữ liệu)
z SI (Source Index) và
DI (Destination Index) ứng với địa chỉ seg. trong DS, ES
z SP (Stack Pointer) và
BP (Base Point.) ứng với địa chỉ segment trong SS
z Nhóm thanh ghi cờ và con trỏ lệnh
z FLAGS: ghi nhận thông tin điều khiển và trạng thái CPU
(sẽ nói kỹ ở bài sau)
z IP (Instruction Pointer) địa chỉ offset của lệnh tiếp,
ứng với địa chỉ segment trong CS
z (Các thanh ghi sắp xếp theo chức năng)
1.5 Ngôn ngữ máy – Hợp ngữ
z Ngôn ngữ máy:
z Dạng nhị phân
z Thực hiện nhanh, chiếm ít chỗ trong bộ nhớ
z Khó viết, khó nhớ
z Hợp ngữ:
z Dùng một số ký hiệu dễ nhớ
z 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ữ
z Chương trình hợp ngữ gồm nhiều lệnh, mỗi lệnh viết trên 1 dòng
z Gồm 2 loại: chỉ thị (lệnh) và chĩ dẫn (hướng dẫn hợp dịch)
z Cú pháp:
z : Là chuỗi gồm các ký tự, ký số, ? , . , @ , _ , $, %
Nhãn: vị trí trong chương trình (theo sau :), tên thủ tục, tên biến
Ký hiệu: đại diện cho hằng số hoặc chuỗi ký tự
z : Tên gợi nhớ của lệnh
z : Xác định dữ liệu sẽ được xử lý bởi lệnh
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
z : Sau dấu ; để giải thích ý nghĩa lệnh
z Cách viết số:
z mặc định thập phân (D/d), hexa (H/h), binary (B/b) 10h
1011b
z Cách viết chuỗi:
z giữa 2 dấu nháy đơn hoặc nháy kép ‘A’ “ABC”
z (các ký tự sẽ được chuyển thành mã ASCII tương ứng)
3z Định nghĩa vùng nhớ dữ liệu (biến):
z Nhãn DB Trị1, Trị2, ...
z 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
là byte (DB) hoặc word (DW), được gán Trị...
Không gán trị: ? B DB ?
Gán nhiều trị giống nhau: toán tử DUP SCO DB 6 DUP (0)
z Định nghĩa hằng:
z Tên EQU Hằng
CR EQU 0Dh ; (ascii code) Carriage Return, về đầu dòng
LF EQU 0Ah ; Line Feed, sang dòng mới
STR EQU ‘Du lieu nhap sai!!’
MESS DB STR,CR,LF,’$’
z Cấu trúc chương trình hợp ngữ:
z Khai báo kích thước chương trình
.MODEL Kiểu ; thường dùng SMALL ...
z Khai báo kích thước vùng ngăn xếp
.STACK KíchThước ; thường 100h, mặc định 1024
z Khai báo dữ liệu bắt đầu bằng chỉ dẫn
.DATA
...
z Khai báo mã lệnh bắt đầu bằng chỉ dẫn
.CODE
...
z Kết thúc chương trình bằng chỉ dẫn
END
1.7 Một số lệnh đơn giản
z MOV Đích, Nguồn
z Sao chép dữ liệu (Nguồn) vào thanh ghi / vùng nhớ (Đích)
z Hai tác tố không đồng thời là vùng nhớ hoặc th/ghi đoạn
z XCHG Đích, Nguồn
z Hoán chuyển dữ liệu (không đồng thời là vùng nhớ)
z ADD Đích, Nguồn
z Cộng dồn Nguồn vào Đích. Hai tác tố khg đồng thời là vùng nhớ
z SUB Đích, Nguồn
z Trừ Đích cho Nguồn
z INC Đích
z Tăng Đích lên 1
z DEC Đích
z Giảm Đích đi 1
z NEG Đích
z Đổi dấu Đích
z INT 21h
Gọi trình con của hệ điều hành, chức năng tùy theo trị th/ghi AH
z AH = 1
Nhận 1 ký tự từ bàn phím, mã ASCII chứa trong AL
z AH = 2
Xuất 1 ký tự ra màn hình, ký tự chứa trong DL
z AH = 9
Xuất chuỗi ký tự có địa chỉ offset trong DX (seg. trong DS)
Chuỗi ký tự phải kết thúc bằng ‘$’
.DATA
MSG DB “Chuoi can hien thi$”
.CODE
MOV AX, @DATA ; lấy địa chỉ seg dữ liệu (MOV AX, SEG DATA)
MOV DS, AX ; đưa vào DS
MOV AH, 9
LEA DX, MSG ; đưa off MSG vào DX (MOV DX, OFFSET MSG)
INT 21h
z AH = 4Ch
Kết thúc chương trình và trả điều khiển về cho hệ điều hành