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... Cú pháp lệnh hợp ngữ12 Name: Operation Operands ;Comment [ Nhãn] Tên g
Trang 1Advanced Topics in Software Engineering
Trang 5Tổng quan
5
• Các phát biểu lệnh hợp ngữ (assembly statement)
– Assembly Language Instruction
Trang 6• Kí tự xuống dòng: kết thúc một lệnh
• Không phân biệt hoa thường
Trang 7 Từ vựng:
– Tên: A-Z a-z 0-9 ? @ _ $
• Duy nhất Qui tắc đặt tên??
Trang 8 Biến byte, biến từ: chỉ dẫn của asm định
nghĩa biến byte có dạng sau:
Trang 9 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
Trang 10 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)
Trang 11 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
Trang 12Cú 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ự.
Trang 13Cú 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)
Trang 14Cú 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
Trang 15Các lệnh cơ bản
15
Trang 16Các lệnh cơ bản (2)
Trang 17Các lệnh cơ bản (3)
Trang 18 Lệnh NEG: lấy bù 2 của một của một thanh ghi hoặc vị trí nhớ
Trang 19Cấ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
Trang 20Cấu trúc của một chương trình hợp ngữ (2)
Trang 21Cấu trúc của một chương trình hợp ngữ (3)
giữ cho stack
Trang 22Cấu trúc của một chương trình hợp ngữ (4)
Trang 23Cấu trúc của một chương trình hợp ngữ (5)
Trang 25Cá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
Trang 26Các lệnh vào ra (3)
26
Trang 27Chương trình đầu tiên
Trang 29Trạng thái của vi xử lý và các thanh ghi cờ
Các thanh ghi cờ(flags register)
Tràn (overflow)
Sự ảnh hưởng của các lệnh đến cờ
29
Trang 30Auxiliary Flag Carry Flag Overflow Flag Sign Flag Parity Flag Zero Flag
Cờ phụ - Chỉ thị nếu số nhớ vượt 4 LSB
Cờ nhớ - Chỉ thị nếu số nhớ vượt 4 MSB
Cờ tràn - Chỉ thị nếu kết quả vượt thang
Cờ dấu - Chỉ thị nếu kết quả âm
Direction Flag Interrupt-Enable Flag Trap Flag
Cờ hướng - nếu DF=1 thực hiện theo chiều giảm
Cờ ngắt - báo MP biết yêu cầu ngắt
Cờ bẫy - đặt MP vào chế độ chạy từng lệnh.
Thanh ghi cờ
Trang 31VD: xác định giá trị các cờ
1 0 1 1 0 1 0 1+ 1 0 0 1 0 1 1 0
1 0 1 0 0 1 0 1 1
• OF=1 There was an overflow, i.e., adding two negative numbers resulted in a positive number
• SF=0 The result is positive.
• ZF=0 The result does not equal zero.
• AF=0 For now we won't worry about the auxiliary flag.
• PF=0 For now we won't worry about the parity flag.
• CF=1 There was a carry.
Trang 32Ví dụ: add al,bl trong đó al=bl=80h
32
80h 80h 100h Kết quả AL=00h SF=0, vì MSB=0
Trang 35Ví dụ về lệnh nhảy
Trang 36Nhảy có dấu
36
JG/JNLE đích ;nhảy nếu lớn hơn (ZF=0 and
SF=OF)/nhảy nếu ko nhỏ hơn hay bằng
JGE/JNL đích ;nhảy nếu lớn hơn hay bằng
(SF=OF)/nhảy nếu không nhỏ hơn hoặc bằng
JL/JNGE đích ; nhảy nếu nhỏ hơn/nhảy nếu ko
lơn hơn hay bằng (SF#OF)
JLE/JNG đích ; nhảy nếu nhỏ hơn hay bằng
(ZF=1 or SF#OF) /nhảy nếu không lớn hơn
Trang 37Nhảy có điều kiện không dấu
37
JA/JNBE đích ;nhảy nếu lớn hơn (CF=0,
SF=0) /nếu không nhỏ hơn hoặc bằng
JAE/JNB đích ;nhảy nếu lớn hơn hay bằng
(CF=0) /nhảy nếu ko nhỏ hơn
JB/JNA đích ;nhảy nếu nhỏ hơn(CF=1) / nhảy
nếu không lớn hơn hoặc bằng
JBE/JNA đích ;nhảy nếu nhỏ hơn hoặc
bằng(CF=1 or ZF=1)
Trang 38Nhảy một cờ
38
Trang 39Lệnh CMP
39
Cú pháp: CMP đích,nguồn
Lệnh này so sánh toán hạng đích với toán hạng
nguồn bằng cách tính đích – nguồn, kết quả ko
được cất giữ
Ví dụ:
Trang 42Lệnh AND, OR, XOR
42
Lệnh NOT
Trang 43Lệnh dịch trái
43
Trang 44Lệnh dịch phải
44
Trang 45Lệnh quay
45
Trang 47Ngăn xếp và thủ tục
47
Trang 48Ngăn xếp
Là cấu trúc dữ liệu một chiều
Số liệu được đưa vào và lấy ra theo nguyên tắc LIFO
stack 100h
SP chứa địa chỉ đỉnh ngăn xếp
48
Trang 49Ngăn xếp (2)
Trang 5050
Trang 53Các lệnh nhân và chia
53
Trang 57Mảng và các chế độ định địa chỉ
57
Trang 59Mảng một chiều (2)
mảng có cùng giá trị ban đầu
59
Trang 60Các chế độ địa chỉ
gọi là chế độ địa chỉ
60
Trang 61Advanced Topics in Software Engineering
Spring 2006
Thanks For Listening
Questions?
61