Download Assembly Language Programming and more Lecture notes Assembly Language Programming in PDF only on Docsity!
LẬP TRÌNH HỢP NGỮ
Intel 8086
Khái niệm
Ngôn ngữ máy (ML - Machine Language)
- (^) CPU trực tiếp “hiểu” và thực thi được
- (^) Dạng nhị phân
- (^) Độ dài lệnh do CPU qui định
Hợp ngữ (Assembly Language)
- (^) Giúp lập trình viên dễ viết hơn ngôn ngữ máy
- (^) Thay thế lệnh dạng nhị phân bằng ký hiệu tượng trưng
Tương đương logic giữa các ngôn ngữ
HLL^ HLL^ ASMASM ASM^ ASM ASM^ ASM ML^ ML ML^ ML ML^ ML
Tại sao phải lập trình hợp ngữ?
Chương trình nhanh, nhỏ gọn
Khai thác trực tiếp thiết bị
Làm việc ở cấp độ thấp
- (^) Thiết kế máy tính
- (^) Viết trình dịch (compiler), trình điều khiển thiết bị (driver)
- (^) Reverse Engineering
Lập trình hệ thống nhúng (embedded system)
- (^) Tài nguyên hạn chế
- (^) Tối ưu phần mềm
Biểu diễn dữ liệu trong bộ nhớ
Byte (8 bit)
- (^) Giá trị: 0..255 hoặc -128..
Word (16 bit)
- (^) Giá trị: 0..65535 hoặc -32768..
- (^) Lưu trữ trong bộ nhớ: byte cao lưu địa chỉ cao, byte thấp lưu địa chỉ thấp
- Ví dụ: (20400) 10
= (4FB0)
16 Địa chỉ Giá trị ô nhớ i B i + 1 4F
Biểu diễn dữ liệu trong bộ nhớ (2)
Ký tự
- (^) Cách viết: ‘a’, “a”
- (^) Lưu trong bộ nhớ dạng mã ASCII 8 bit
- (^) Ví dụ: ‘a’
Chuỗi
- (^) Cách viết: ‘abc’, “abc”
- (^) Lưu trong bộ nhớ dạng dãy ký tự
- (^) Ví dụ: “abc” (^) 97 98 99 97
Giới thiệu CPU Intel 8086/
Được Intel sản xuất năm 1978
Sử dụng trong máy IBM-PC năm 1981
Phổ biến, phát triển thành họ kiến trúc x
CPU 8086 16 bit CPU 8086 16 bit Bộ nhớ Bộ nhớ Bus địa chỉ 20 bit Bus dữ liệu 16 bit
Tổ chức bộ nhớ
Địa chỉ 20 bit Bộ nhớ tối đa 1MB
Tổ chức bộ nhớ thành từng đoạn (segment),
mỗi đoạn 64KB (
16
Lập trình truy xuất ô nhớ theo địa chỉ logic
- (^) Dạng: segment:offset
- (^) Segment, offset có kích thước 16 bit, viết dạng hex
Chuyển từ địa chỉ logic địa chỉ vật lý (20bit)
- (^) Segment * 16 + offset
Tổ chức thanh ghi
Có 14 thanh ghi 16 bit
Nhóm thanh ghi đoạn: CS, DS, SS, ES
- (^) CS (Code Segment): chứa địa chỉ segment của đoạn mã chương trình đang thực hiện
- (^) DS (Data Segment): chứa địa chỉ segment đoạn dữ liệu chính của chương trình
- (^) SS (Stack Segment): chứa địa chỉ segment đoạn stack của chương trình đang thực hiện
- (^) ES (Extra Segment): đoạn dữ liệu bổ sung
Tổ chức thanh ghi (2)
Nhóm thanh ghi đa dụng: AX, BX, CX, DX
- (^) AX (Accumulator) - Thanh ghi tích lũy: thường lưu kết quả của các lệnh tính toán
- (^) BX (Base) – Thanh ghi cơ sở: thường đùng định vị địa chỉ offset khi truy xuất bộ nhớ
- (^) CX (Count) – Thanh ghi đếm: thường dùng xác định số lần lặp trong các lệnh lặp
- (^) DX (Data) – Thanh ghi dữ liệu: thường dùng lưu dữ liệu trong các lệnh tính toán
Tổ chức thanh ghi (4)
Nhóm thanh ghi con trỏ và chỉ mục: SP, BP, SI, DI
- (^) SP (Stack Pointer): địa chỉ offset của phần tử trên đỉnh stack
- (^) BP (Base Pointer): dùng định vị offset khi truy xuất stack
- (^) SI (Source Index): dùng định vị offset chuỗi nguồn trong các lệnh về chuỗi
- (^) DI (Destination Index): dùng định vị offset chuỗi đích trong các lệnh về chuỗi
Tổ chức thanh ghi (5)
Thanh ghi con trỏ lệnh: IP (Instruction Pointer)
- (^) Chứa địa chỉ offset của lệnh sẽ được CPU thực hiện
- (^) Được tự động thay đổi để trỏ đến lệnh kế tiếp
- (^) CS:IP segment:offset của lệnh kế tiếp được CPU thực hiện
Thanh ghi cờ hiệu (Flag Register)
- (^) Phản ánh trạng thái thực hiện lệnh của CPU
- (^) Có 9 cờ (9 bit)
Tổ chức thanh ghi (7)
AH AL AX Nhóm thanh ghi đa dụng BH BL BX CH CL CX DH DL DX CS Nhóm thanh ghi đoạn DS SS ES SP Nhóm thanh ghi con trỏ BP SI Nhóm thanh ghi chỉ mục DI IP Thanh ghi con trỏ lệnh Flag Thanh ghi cờ hiệu
Các kiểu định vị
Định vị
- (^) Cách thức CPU xác định vị trí lưu trữ giá trị của toán hạng trong câu lệnh
Các kiểu toán hạng
- (^) Toán hạng hằng/tức thì
- (^) Toán hạng thanh ghi
- (^) Toán hạng bộ nhớ