Advanced Topics in Software Engineering
Spring 2006
0361- Kỹ thuật lập trình nhúng
Lập trình hợp ngữ trên
Vi xử lý 80x86
Phạm Quốc Thịnh
Department of Electronics & Telecommunications
1
Nội dung
Cơ bản về hợp ngữ
Trạng thái của vi xử lý và các thanh ghi cờ
Các lệnh điều khiển(lập và rẽ nhánh)
Các lệnh logic, dịch và quay
Ngăn xếp và thủ tục
Các lệnh nhân và chia
Mảng và các chế độ định địa chỉ
2
Nội dung
Cơ bản về hợp ngữ
Trạng thái của vi xử lý và các thanh ghi cờ
Các lệnh điều khiển(lập và rẽ nhánh)
Các lệnh logic, dịch và quay
Ngăn xếp và thủ tục
Các lệnh nhân và chia
Mảng và các chế độ định địa chỉ
3
Cơ bản về hợp ngữ
Tổng quan
Cú pháp lệnh hợp ngữ
Các lệnh cơ bản
Cấu trúc của một chương trình hợp ngữ
Các lệnh vào ra
Chương trình đầu tiên
4
Tổng quan
5
Ngôn ngữ cấp thấp
Macro Assembler ( MASM) - CPU 8086.
Tập tin hợp ngữ nguồn (.ASM)
•
Các phát biểu lệnh hợp ngữ (assembly statement)
–
Assembly Language Instruction
»
Xác định hành động CPU thực hiện
»
Dịch sang một lệnh mã máy tương ứng
–
Assembler directive
»
Khai báo hướng dẫn biên dịch
Tổng quan (2)
6
Các thành phần
–
Bộ ký tự:
•
26 chữ cái thường và hoa a-z, A-Z
•
10 kí tự số 0-9
•
Các kí tự dấu:
–
? @ _ $ : . [ ] ( ) < > { } + - * / & % ! ‘ ~ “ | \ = # ^ ; ,
•
Kí tự ngăn cách
–
Khoảng trắng
–
Tab
•
Kí tự xuống dòng: kết thúc một lệnh
•
Không phân biệt hoa thường
7
Từ vựng:
–
Tên: A-Z a-z 0-9 . ? @ _ $
•
Duy nhất Qui tắc đặt tên??
–
Từ khóa
•
Bắt buộc
Kiểu số liệu:
–
Số:
•
Thập phân 110d (mặc định)
•
Nhị phân 01111b
•
Hexa 0FF01h
–
Kí tự:
•
Giữa hai dấu ngoặc đơn hoặc kép
•
Mã ASCII ‘A’ == 41h
Tổng quan (3)
Biến byte, biến từ: chỉ dẫn của asm định
nghĩa biến byte có dạng sau:
Name DB initial_value
Name DW initial_value
Ví dụ: ALPHA1 DB 4;
ALPHA2 DW -2;
8
Tổng quan (4)
Các toán hạng giả dùng để định nghĩa các loại số liệu
Mảng (Arrays): trong ASM mảng là một loạt
các byte nhớ hoặc từ nhớ liên tiếp nhau
Ví dụ:
Nếu asm gán địa chỉ offset 0200h cho mảng
B_ARRAY thì nội dung bộ nhớ sẽ như sau
9
Tổng quan (5)
Chuỗi các ký tự (character strings)
Bên trong một chuỗi asm phân biệt chữ hoa
chữ thường
Cũng có thể định nghĩa
10
Tổng quan (6)
Các hằng (constants): trong chương trình các
hằng số được đặt tên nhơ chỉ dẫn EQU
Cú pháp: Tên EQU constants
LF EQU 0AH
MOV DL,0AH
MOV DL,LF
11
Tổng quan (7)
Cú pháp lệnh hợp ngữ
12
Name: Operation Operand(s) ;Comment
[Nhãn] Tên gợi nhớ Toán hạng(s) ; Ghi chú
o
Trường tên(nhãn): dùng cho nhãn lệnh, tên thủ tục và tên biến.
Asm sẽ chuyển tên thành địa chỉ bộ nhớ. Tên có thể dài từ 1-
31 ký tự.
Cú pháp lệnh hợp ngữ (2)
13
Name: Operation Operand(s) ;Comment
[Nhãn] Toán tử Toán hạng(s) ; Ghi chú
o
Trường toán tử: Chứa ký hiệu của mã phép toán. Ví dụ: ADD,
INC, DEC, INT…
o
Trường toán hạng: chỉ ra số liệu tham gia trong lệnh đó
Trong các lệnh 2 toán hạng: toán hạng đầu là toán hạng
đích, toán hạng thứ hai là toán hạng nguồn(không thay đổi khi
thực hiện lệnh)
Cú pháp lệnh hợp ngữ (3)
14
Name: Operation Operand(s) ;Comment
[Nhãn] Toán tử Toán hạng(s) ; Ghi chú
o
Trường chú thích (ghi chú): lập trình viên thường chú thích để
thuyết minh về câu lệnh. Người ta dùng dấu ; để bắt đầu chú
thích
Các lệnh cơ bản
Lệnh MOV
Lệnh XCHG
15
16
Các lệnh cơ bản (2)
17
Các lệnh cơ bản (3)
Lệnh NEG: lấy bù 2 của một của một thanh
ghi hoặc vị trí nhớ
Cú pháp: NEG destination
Ví dụ: NEG AX
Giả sử AX=0002h sau khi thực hiện lệnh
AX=FFFEh
18
Các lệnh cơ bản (4)
Cấu trúc của một chương trình hợp ngữ
Mỗi chương trình ngôn ngữ máy bao gồm mã
(code), số liệu (data) và ngăn xếp (stack). Mỗi
một phần chiếm một đoạn bộ nhớ
Các kiểu bộ nhớ: được quy định bởi chỉ dẫn
với cú pháp:
.MODEL memory_model
19
Cấu trúc của một chương trình hợp ngữ (2)
Đoạn số liệu: chứa các khai báo biến, hằng…
Cú pháp:
.DATA
;Khai báo tên các biến, hằng và mảng
Ví dụ:
20
Cấu trúc của một chương trình hợp ngữ (3)
Đoạn ngăn xếp: Dành một vùng nhớ để lưu
giữ cho stack
Cú pháp:
.STACK size
;Nếu không khai báo size thì 1KB dành cho
stack
Ví dụ:
21
Cấu trúc của một chương trình hợp ngữ (4)
Đoạn mã: Chứa các lệnh của chương trình
Cú pháp:
Bên trong đoạn mã các lệnh được tổ chức
thành các thủ tục
.CODE
22
23
Cấu trúc của một chương trình hợp ngữ (5)
Các lệnh vào ra
Lệnh INT (Interrupt)
Để gọi các chương trình con của BIOS
và DOS ta dùng cú pháp sau:
INT interruppt_number
INT 21h: tùy theo giá trị đặt vào AH
24
Các lệnh vào ra (2) - INT 21h
function number routine
9 String input
–
Input : DX= địa chỉ chuỗi ký tự kết thúc bằng $
–
Output: chuỗi kí tự xuất hiện trên màn hình
function number routine
2 Single character output
–
Input :
•
AH=2
•
DL=ASCII code of the the display character or control
character
–
Output:
•
AL= ASCII code of the the display character or control
character