Chương 5 : Nhập môn Assembly Hiểu ngôn ngữ máy và ngôn ngữ Assembly.. Một MT hay một họ MT sử dụng 1 tập lệnh mã máy riêng cũng như 1 ngôn ngữ Assembly riêng... Một chương trình vi
Trang 1Chương 5
Nhập môn Assembly
Trang 2Chương 5 : Nhập môn Assembly
Hiểu ngôn ngữ máy và ngôn
ngữ Assembly.
Trình hợp dịch Assembler.
Lý do nghiên cứu Assembly.
Hiểu các thành phần cơ bản của Assembly
Nắm được cấu trúc của 1 CT
Assembly
Biết viết 1 chương trình Assembly.
Biết cách dịch, liên kết và thực
Mục tiêu
Trang 3Giới thiệu ngôn ngữ Assembly
Giúp khám phá bí mật phần
cứng cũng như phần mềm máy tính.
Nắm được cách phần cứng MT
làm việc với hệ điều hành và hiểu được bằng cách nào 1 trình ứng dụng giao tiếp với hệ điều hành.
Một MT hay một họ MT sử dụng 1 tập lệnh mã máy riêng cũng
như 1 ngôn ngữ Assembly riêng.
Trang 4 Một chương trình viết bằng ngôn ngữ Assembly muốn MT thực hiện được ta
phải chuyển thành ngôn ngữ máy
Chương trình dùng để dịch 1 file viết
bằng Assembly ngôn ngữ máy , gọi là Assembler.
Có 2 chương trình dịch:
MASM và TASM
Trang 5Lý do nghiên cứu Assembly
Đó là cách tốt nhất để học
phần cứng MT và hệ điều hành.
Vì các tiện ích của nó
Có thể nhúng các chương
trình con viết bằng ASM vào
trong cácchương trình viết
Trang 6Lệnh máy
Là 1 chuổi nhị phân có ý nghĩa đặc biệt – nó ra lệnh cho CPU thực hiện tác vụ.
Tác vụ đó có thể là :
di chuyển 1 số từ vị trí nhớ này
sang vị trí nhớ khác.
Cộng 2 số hay so sánh 2 số.
0 0 0 0 0 1 0 0 Add a number to the AL register
1 0 0 0 0 1 0 1 Add a number to a variable
1 0 1 0 0 0 1 1 Move the AX reg to another reg
Trang 7Lệnh máy (cont)
Tập lệnh máy được định nghĩa trước, khi CPU
được sản xuất và nó đặc trưng cho kiểu CPU
Ex : B5 05 là 1 lệnh máy viết dạng số hex, dài 2 byte.
Byte đầu B5 gọi là Opcode
Byte sau 05 gọi là toán hạng Operand
Ýù nghĩa của lệnh B5 05 : chép giá trị 5 vào reg AL
Trang 8Cách viết 1 chương trình
Dùng 1 phần mềm soạn thảo
VB bất kỳ để soan CT Assembly như : NotePad, NC, màn hình C, Pascal CT có phần mở rộng là ASM dùng MASM để dịch chương trình nguồn ASM File Object.
dùng LINK để liên kết Object tạo tập tin thực hiện EXE
Gỏ tên tập tin thực hiện EXE từ dấu nhắc DOS để chạy
Trang 9Dịch và nối kết chương trình
MASM.EXE
TenCT EXE
TenCT MAP TenCT LIST TenCT CRF
LINK.EXE LINK.EXE
Trang 10Một chương trình minh hoạ
MAIN ENDP END MAIN
Trang 11Các file được tạo
Sau khi dịch thành công file nguồn.ASM,
ta có các file :
File listing : file VB , các dòng có đánh
Trang 14Giải thích
model small : dùng kiểu cấu trúc <=
64 K bộ nhớ cho mã , 64K cho dữ liệu.
Stack 100h : dành 256 bytes cho stack
của chương trình
Data : đánh dấu phân đoạn dữ liệu
ở đó các biến được lưu trữ.
Code : đánh dấu phân đoạn mã
chứa các lệnh phải thi hành
Proc : khai báo đầu 1 thủ tục, trong Ex này ta chỉ có 1 thủ tục Main.
Trang 15Giải thích (cont)
Chép địa chỉ đoạn dữ liệu vào
thanh ghi AX.
Sau đó chép vào thanh ghi DS
Gọi hàm số 9 của Int 21h của Dos để xuất chuổi ký tự ra màn hình.
Trang 16Cấu trúc của 1 CT ASM
các lệnh của chương trình chính
MOV AH,4CH ; Thoát khỏi chương trình
INT 21H
MAIN ENDP
các chương trình con khác nếu có
END MAIN
Trang 17Các chế độ bộ nhớ
SMALL Mã lệnh trong 1 đoạn.Dữ liệu
trong 1 đoạn MEDIUM Mã lệnh nhiều hơn 1 đoạn.Dữ
liệu trong 1 đoạn COMPAC
T Mã lệnh trong 1 đoạn Dữ liệu nhiều hơn 1 đoạn
LARGE Mã lệnh nhiều hơn 1 đoạn
Dữ liệu nhiều hơn 1 đoạn,không có mảng nào > 64K
HUGE Mã lệnh nhiều hơn 1 đoạn
Dữ liệu nhiều hơn 1 đoạn, mảng
Trang 18Dạng lệnh
Nhãn, tên biến
Tên thủ tục
Nhãn, tên biến
Tên thủ tục
Mã lệnh dạng
gợi nhớ
Mã lệnh dạng
gợi nhớ Register, ô nhớ Register, ô nhớ Trị, hằng Trị, hằng
Trang 19INT 21H
gọi chương trình ngắt của DOS và BIOS.
Ngắt 21h
Muốn sử dụng hàm nào của INT 21h ta đặt
function_number vào thanh ghi AH, sau đó gọi INT 21h
Trang 20INT 21h (cont)
Hàm 1 : Nhập 1 ký tự
Input : AH =1 Output : AL = mã ASCCI của phím ấn
= 0 nếu 1 phím điều khiểân được ấn
Hàm 2 : Hiển thị 1 ký tự ra màn hình
Input : AH =2
DL = Mã ASCII của ký tự hiển thị hay ký tự điều khiển
Trang 21Thí dụ minh họa
MOV DL , 0AH INT 21H
MOV DL , BL INT 21H
MOV AX , 4C00H INT 21H
MAIN ENDP END MAIN
Trang 22Thí dụ minh họa các hàm
Trang 23 Cú pháp : [tên biến] DB | DW | [trị khởi tạo]
Là một tên ký hiệu dành riêng cho 1
vị trí trong bộ nhớ nơi lưu trữ dữ liệu.
Offset của biến là khoảng cách từ
đầu phân đoạn đến biến đó.
Ex : khai báo 1 danh sách aList ở địa
chỉ 100 với nội dung sau :
data
aList db “ABCD”
Trang 25Khai báo biến
Trang 26Minh họa khai báo biến
Trang 27Minh họa khai báo biến
DẠNG LƯU TRỮ DỮ LIỆU KIỂU WORD :
Trình hợp dịch đảo ngược các byte trong 1
giá trị kiểu WORD khi lưu trữ trong bộ nhớ :
Trang 28Minh họa khai báo biến
Trang 30Khởi tạo biến
Khi khởi tạo trị là 1 số hex thì giá trị
số luôn luôn bắt đầu bằng 1 ký số từ 0 đến 9 Nếu ký số bắt đầu là A F thì phải thêm số 0 ở đầu.
Db A6H ; sai
Db 0A6h ; đúng
Trang 31Toán tử DUP (cont)
Amtrix dw 3 dup (4 dup (0) )
Tạo 1 ma trận 3x4
Atable db 4 dup (3 dup (0), 2 dup
(‘X’))
X 000XX
Trang 32Toán tử DUP
Chỉ xuất hiện sau 1 chỉ thị
DB hay DW
Với DUP ta có thể lặp lại 1
hay nhiều trị cho vùng nhớ.
Rất có ích khi làm việc với
mảng hay chuổi
Trang 33Toán tử ?
không cần khởi tạo trị ta dùng toán tử ?
Ex : MEM8 DB ? ; khai báo 1 byte trống trong bộ nhớ
MEM16 DW ? ; khai báo 2 byte
trống trong bộ nhớ
BMEM DB 50 DUP(?)
; khai báo 50 byte trống trong bộ
nhớ
Trang 34Chương trình dạng COM
CODE SEGMENT
ASSUME CS:CODE , DS:CODE, SS:CODE
; toàn bộ chương trình chỉ nằm trong 1 segment Org 100h ;; chỉ thị nạp thanh ghi lệnh IP=100h khi
Trang 35 chương trình Assembly gồm nhiều dòng lệnh.
Mỗi lệnh phải viết trên 1 dòng
Lệnh có thể gồm [tên] [toán tử] [toán hạng]
Các ký tự phải đặt trong dấu ‘ ‘ hay “ “
DB dùng để định nghĩa biến kiểu BYTE
DW dùng để định nghĩa biến kiểu WORD.
Có 2 cách xuất nhập dữ liệu : liên lạc
trực tiếp qua cổng hay dùng các phục vụ
Trang 36Câu hỏi ôn tập
tập tin liệt kê, hãy nêu ý nghĩa của R 5B 0021 R ADD BX, VAL1
chỉ của biến dưới đây trong 1
tập tin liệt kê.
5B 0021 R ADD BX, VAL1
Trang 37Câu hỏi ôn tập
Chương trình sau có lỗi Hãy tìm câu lệnh
nào gây ra lỗi, giải thích và sửa lại cho
Trang 38Câu hỏi ôn tập
Chương trình sau có lỗi Hãy tìm câu lệnh
nào gây ra lỗi, giải thích và sửa lại cho
MOV AX, VALUE1
MOV AX, VALUE2
MOV AX, 4C00H
VALUE1 DB 0AH
VALUE2 DB 1000H
Trang 39Bài tập lập trình
Bài 1 : Viết chương trình nhập 1 ký tự thường , in ra ký tự hoa tương ứng.
Bài 2 : Viết chương trình hoán vị 2 biến kiểu byte được gán sẵn trị.
Bài 3 : Viết chương trình tạo 1 array có các phần tử 31h,32h,33h,34h.
Nạp từng phần tử vào thanh ghi DL
và xuất nó ra màn hình Giải thích
tại sao kết xuất trên màn hình là