Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 51

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỂN THÔNG

CHƯƠNG 3:

LẬP TRÌNH HỢP NGỮ


8088/86

GIẢNG VIÊN: THS. PHẠM THẾ DUY


ĐIỆN THOẠI/EMAIL: 0903661501 DUYPT@PTITHCM.EDU.VN
BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
HỌC KỲ/NĂM BIÊN SOẠN: 02/2010
Nội dung chương 3

3.1 Giới thiệu khung chương trình hợp ngữ


3.2 Cách tạo và chạy chương trình hợp ngữ
3.3 Các cấu trúc lập trình cơ bản
3.4 Giới thiệu một số chương trình cụ thể

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 2


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
3.1 GIỚI THIỆU KHUNG CHƯƠNG TRÌNH HỢP NGỮ

Dòng lệnh hợp ngữ


Label Operator Operand[s] ;Comment

Label – có thể có hoặc không, là một chuỗi ký tự
Ký tự đầu tiên cần là a-z,A-Z,?,@,_,$, không trùng với
lệnh
gợi nhớ, ký tự cuối cùng phải là “:”
Operator – là lệnh hợp ngữ
mnemonic: là lệnh gợi nhớ tương ứng với một chức năng cơ bàn
Assembler đổi mã mnemonic thành mã máy của OP CODE
ví dụ: mov là f8h
Operand[s] - 0 tới 3 phần chỉ thị dữ liệu yêu cầu trong lệnh
Có thể ở một số dạng khác nhau
Cách nhau bằng dấu phẩy “,”
immediate, register name, memory data, memory address
Comment – là phần giải thích rất hữu dụng trong hợp ngữ

Các thành phần của dòng lệnh cách nhau bằng khoảng trắng (tab, blank, \n, etc.)
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 3
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Ví dụ về dòng lệnh hợp ngữ

Label Operator Operand[s] ;Comment

INIT: mov ax, bx ; chép giá trị bx vào ax

Label - INIT:
Operator - mov
Operands - ax và bx
Comment - là chuỗi ký tự nằm sau dấu ; và \n

• Không giống các lệnh hợp ngữ của các CPU khác, toán hạng
đích đứng trước.
•mov là mã gợi nhớ mnemonic trình hợp dịch sẽ đổi thành một
opcode

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 4


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Khung chương trình nguồn hợp ngữ

• Chương trình hợp ngữ chia thành các đoạn (segments)


• Các đoạn định nghĩa trong 1 hoặc nhiều modules
– Chứa các lệnh, dữ liệu, và các chỉ thị hợp dịch (directives)
• Mỗi module là một file riêng
– Assembler đổi các modules thành object files
• Liên kết (Linker) thực hiện một số việc như:
– Combines multiple object files: kết hợp các file đối tượng
– Resolves relative addresses: Xử lý các địa chỉ tương đối.
– Inserts loader code : Chèn thêm các đoạn mã lệnh
– Creates executable: Tạo ra chương trình thực hiện.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 5


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Các loại đoạn trong một chương trình hợp ngữ
Assembler Language Segment Types
• Stack
– For dynamic data storage – sử dụng cho lưu trữ dữ liệu động
– Source file defines size – định nghĩa kích thước trong file nguồn
– Must have exactly 1 – phải có đúng 01 trong một chương trình
• Data
– For static data Storage – lưu trữ dữ liệu tĩnh
– Source file defines size – định nghĩa kích thước trong file nguồn
– Source file defines content (optional)- khởi động trước giá trị nếu cần
– Can have 0 or more – có thể không có hoặc có nhiều đoạn dữ liệu
trong một chương trình.
• Code
– For machine Instructions – sử dụng chứa các lệnh mã máy của
chương trình
– Must have 1 or more – cần có ít nhất một.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 6


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Sử dụng trình hợp dịch MASM
Using MASM Assembler

• Trợ giúp: C:\> masm /h


• Có thể chạy MASM không có tham số
C:\> masm
Source Filename [.ASM]: hello
Object Filename [HELLO.OBJ]:
Source Listing [NUL.LST]:
Cross Reference [NUL.CRF]:
.ASM – file nguồn hợp ngữ do người lập trình viết
• .OBJ - File đối tượng do trình biên dịch tạo ra
• .LST - Listing file, là file văn bản mô tả quá trình biên dịch như:
– Errors, Addresses, Symbols, etc – các lỗi, các địa chỉ, các nhãn …
• .CRF – Cross reference file – file liên kết chéo

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 7


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Sử dụng chương trình hợp dịch/liên kết
Using MASM Assembler/Linker (Cont.)

• Một cách khác để thực hiện hợp dịch


C:\> masm hello,hello,hello
• Với dòng lệnh này MASM sẽ tạo ra các file
HELLO.OBJ HELLO.LST HELLO.CRF
• Hay:
C:\> masm hello
• Dòng lệnh này chương trình tạo ra file:
HELLO.OBJ
Bước kế tiếp thực hiện liên kết chương trình:
C:\> link hello
• Chương trình link sẽ tạo ra file:
HELLO.EXE
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 8
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Chương trình hợp ngữ
MASM Assembler Language
• Trong mỗi module hợp ngữ có 04 loại khai báo (4
types of statements):
1. Executable instructions – Các lệnh thực hiện
2. MASM assembler directives – các chỉ thị hợp dịch
3. MASM macroinstruction definitions – các định nghĩa
macro
4. MASM macroinstruction calls – các lời gọi macro
Executable Instructions.: là các lệnh mà CPU lấy từ bộ nhớ
váo để thực hiện
MASM Directives: Người lập trình cung cấp các chỉ thị để
hướng dẫn quá trình hợp dịch chương trình
MASM Macro Defs. and Calls: định nghĩa và gọi mọt nhóm
lệnh

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 9


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Ví dụ chương trình hợp ngữ
MASM Program Example
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; đây là chương trình in chuỗi ký tự “Hello World” sử dụng chương ;
; trình phục vụ ngắt của DOS – hàm 09 ngắt 21H ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hellostk SEGMENT BYTE STACK 'STACK' ;Định nghĩa đoạn ngăn xếp
DB 100h DUP(?) ;định nghĩa kích thước ngăn xếp là 256 bytes (100h)
hellostk ENDS

hellodat SEGMENT BYTE 'DATA' ;định nghĩa đoạn dữ liệu


dos_print EQU 9 ;định nghĩa hằng số bằng lệnh EQU
strng DB 'Hello World',13,10,'$' ;định nghĩa chuỗi ký tự
hellodat ENDS

hellocod SEGMENT BYTE 'CODE' ;Định nghĩa đoạn lệnh


START: mov ax, SEG hellodat ;ax <-- địa chỉ bắt đầu của đoạn dữ liệu
mov ds, ax ;ds <-- khởi động thanh ghi đoạn dữ liệu
mov ah, dos_print ;ah <-- hàm 9 ngắt 21h.
mov dx,OFFSET strng ;dx <-- địa chỉ bắt đầu của chuỗi dữ liệu
int 21h ;gọi chương trình ngắt của DOS
mov ax, 4c00h ;ax <-- hàm 4c ngắt 21h để dừng chương trình
int 21h ;DOS service interrupt
hellocod ENDS
END START ;‘END label’ nhãn định nghĩa đầu chương trình

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 10


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Một cách khác để định nghĩa các đoạn
Another Way to define Segments
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Use 'assume' directive to define segment types ;
; Sử dụng chỉ thị assume để định nghĩa các đoạn ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
hellostk SEGMENT ;Define a segment
DB 100h DUP(?)
hellostk ENDS

hellodat SEGMENT ;define a segment


dos_print EQU 9 ;define a constant
strng DB 'Hello World',13,10,'$' ;Define the character string
hellodat ENDS

hellocod SEGMENT ;define a segment


assume cs:hellocod, ds:hellodat, ss: hellostk
START: mov ax, hellodat ;ax <-- data segment start address
mov ds, ax ;ds <-- initialize data segment register
mov ah, dos_print ;ah <-- 9 DOS 21h string function
mov dx,OFFSET strng ;dx <-- beginning of string
int 21h ;DOS service interrupt
mov ax, 4c00h ;ax <-- 4c DOS 21h program halt function
int 21h ;DOS service interrupt
hellocod ENDS
END START

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 11


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Thêm một cách khác để định nghĩa các đoạn
Yet another way to define Segs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Use .stack,.data,.code directives to define segment types ;
; Sử dụng các chỉ thị .stack, .data, .code để định nghĩa các đoạn ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.stack 100h ; reserve 256 bytes of stack space

.data
dos_print EQU 9 ;define a constant
strng DB 'Hello World',13,10,'$' ;Define the character string

.code

START: mov ax, SEG strng ;ax <-- data segment start address
mov ds, ax ;ds <-- initialize data segment register
mov ah, dos_print ;ah <-- 9 DOS 21h string function
lea dx,strng ;dx <-- beginning of string
int 21h ;DOS service interrupt
mov ax, 4c00h ;ax <-- 4c DOS 21h program halt function
int 21h ;DOS service interrupt

END START
Chương trình dịch ra dạng .exe, ngăn xếp, dữ liệu và chương trình có thể khác
đoạn
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 12
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Thêm một cách khác để định nghĩa các đoạn
Yet another way to define Segs

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Use .stack,.data,.code directives to define segment types ;
; Sử dụng các chỉ thị .stack, .data, .code để định nghĩa các đoạn ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.stack 100h ; reserve 256 bytes of stack space

.code

START: jmp begin


dos_print EQU 9 ;define a constant
strng DB 'Hello World',13,10,'$' ;Define the character string

Begin: mov ax, SEG strng ;ax <-- data segment start address
mov ds, ax ;ds <-- initialize data segment register
mov ah, dos_print ;ah <-- 9 DOS 21h string function
mov dx,OFFSET strng ;dx <-- beginning of string
int 21h ;DOS service interrupt
int 20h ;DOS service interrupt

END START
Chương trình dịch ra dạng .exe, ngăn xếp, dữ liệu và chương trình có thể khác đoạn

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 13


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Các chỉ thị hợp dịch
Masm Assembler Directives

end label kết thúc chương trình với label là điểm vào
proc far|near bắt đầu một thủ tục, từ khoá far, near chỉ thị
thủ tục ở khác đoạn với chương trình chính (far),
hoặc ở cùng đoạn với chương trình chính (near)
endp kết thúc thủ tục
page thiết lập một trang trong listing file
title tựa đề của listing file
.code bắt đầu của code segment
.data bắt đầu của data segment
.stack kích thước của stack segment

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 14


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Các chỉ thị khai báo dữ liệu
Data Allocation Directives

db define byte – định nghĩa 1 byte


dw define word (2 bytes) – định nghĩa 1 từ
dd define double word (4 bytes) – định nghĩa 4 byte
dq define quadword (8 bytes) – định nghĩa 8 byte
dt define tenbytes – định nghĩa 10 byte
equ equate, assign numeric expression to a name –
gán tên cho một hằng số

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 15


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Các chỉ thị khai báo dữ liệu
Data Allocation Directives

Ví dụ:
db 100 dup (?) define 100 bytes, with no initial values for bytes
Định nghĩa 100 byte không có giá trị khởi động
db “Hello” define 5 bytes, ASCII equivalent of “Hello”.
Định nghĩa 5 byte có mã ASCII tương ứng là “Hello”
maxint equ 32767
count equ 10 * 20 ; count = 200, calculate a value (200)

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 16


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Home Work
Homework

1) write a program
a. calculate the sum of 4 words (each 16 bit data)
b. data are 1234H, 03FDH, 4FD3H and 11FFH
c. data is located at offset address of 0, 2, 4, 6
d. code starts at address 10H
e. the result should be stored in location 8,9
f. save your program including the data
g. run the program and write the sum.
h. In your email you should attach the file and write the sum value in your email.
i. The name of the file should be your firstname_lastname.com
j. Note that finding how to save the file in debug is your responsibility

2) write an assembly program and the compile it using masm and link
a. move data from location of memory to another.
b. Source data is “Salam your_first_name”
c. Put separate code and data segment for your code
d. Put some spaces in your data segment for destination
e. Use masm and link and include .asm, .lst, .exe files in your email.
f. The name of the file should be hw2

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 17


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Chú ý

• Dòng lệnh hợp ngữ: các thành phần


• Sử dụng chương trình hợp dịch
• Khung chương trình hợp ngữ
• Các chỉ thị trong chương trình hợp ngữ

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 18


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
3.2 CÁCH TẠO VÀ CHẠY MỘT CHƯƠNG TRÌNH HỢP NGỮ

Nhấn vào New


để tạo một file
mới

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 19


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Chọn khung
chương
trình .com

Hoặc khung
chương
trình .exe

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 20


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Khung chương trình .COM

Viết các lệnh của


chương trình tại đây

Khai báo các biến tại


đây

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 21


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Khung chương trình .EXE

Khai báo các biến


của chương trình
tại đây

Viết các lệnh của


chương trình tại
đây

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 22


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CHẠY CHƯƠNG TRÌNH HỢP NGỮ

Nhấn vào emulate để


chạy chương trình

Nhấn vào RUN để


chạy toàn bộ chương
trình

Nhấn vào SINGLE


STEP để chạy từng
lệnh chương trình

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 23


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CHẠY CHƯƠNG TRÌNH HỢP NGỮ

Theo dõi thay đổi của


các thanh ghi sau
các lệnh

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 24


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
KẾT QUẢ CHƯƠNG TRÌNH

Màn hình kết quả

Các cờ trạng thái

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 25


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC HÀM CƠ BẢN CỦA DOS

• Ngắt 20H dành riêng để kết thúc chương


trình loại .COM. Hàm này ra lệnh cho hệ
điều hành kết thúc chương trình đang
chạy và chuyển điều khiển về cho chương
trình gọi.
• Ngắt 21H: bao gồm nhiều hàm điều khiển
các thiết bị trong hệ thống máy tính.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 26


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC HÀM CƠ BẢN CỦA DOS

• Hàm 01H: đọc một ký tự từ bàn phím


– Một ký tự sẽ được đọc vào từ bàn phím và hiện lên màn hình.
Nếu tại thời điểm gọi hàm chưa có ký tự sẵn sàng, thì hàm sẽ
đợi cho tới khi có phím được nhấn.
– Vào: AH = 01
– Ra: AL chứa mã ASCII của phím nhấn
– Khi nhận được các ký tự có mã mở rộng AL = 0. Lúc này có thể
gọi hàm một lần nữa để đọc được mã mở rộng.
– Khi ký tự vào là Ctrl – C (mã ASCII là 3) ngắt 23H sẽ được gọi
trả điều khiển về DOS.
– Ngoài AL, nội dung các thanh ghi khác không bị thay đổi sau khi
gọi hàm.
– Ví dụ khi gọi hàm này có thể viết:
MOV AH,01
INT 21H

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 27


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC HÀM CƠ BẢN CỦA DOS

• Hàm 02H: Hiện một ký tự lên màn hình.


– Hàm này cho phép hiện một ký tự lên màn
hình
– Vào: AH = 02
– DL chứa mã ASCII của ký tự cần hiển thị.
– Ra: không.
– Tất cả các thanh ghi không bị thay đổi sau khi
gọi hàm, các mã đặc biệt như Backspace
(xoá ký tự trước), Carriage Return (về đầu
hàng) và Line Feed (xuống hàng) sẽ được ghi
trên màn hình dưới dạng lệnh.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 28


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC HÀM CƠ BẢN CỦA DOS

• Hàm 09: Hiện chuỗi ký tự lên màn hình.


– Vào: AH = 09
– DX chứa địa chỉ offset của chuỗi cần hiển thị.
– Ra:không
– Chuỗi ký tự cần đặt trong bộ nhớ dưới dạng
một chuỗi các byte ASCII, kết thúc là ký tự ‘$’
(mã ASCII là 36). Các mã đặc biệt như
Backspace (xoá ký tự trước), Carriage Return
(về đầu hàng) và Line Feed (xuống hàng) sẽ
được ghi trên màn hình dưới dạng lệnh. Chỉ
có AL bị thay đổi sau khi gọi hàm.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 29


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC HÀM CƠ BẢN CỦA DOS

• Hàm 4CH:kết thúc chương trình loại .EXE.


– Hàm này kết thúc chương trình và truyền về
một mã lỗi, chương trình gọi có thể nhận
được mã lỗi này bằng cách gọi hàm 4DH, bộ
nhớ RAM cho chương trình chiếm sẽ được
giải phóng.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 30


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
3.3 CÁC CẤU TRÚC LẬP TRÌNH CƠ BẢN

• Cấu trúc tuần tự.


• Cấu trúc điều khiển:
– Cấu trúc lựa chọn
• IF THEN
• IF THEN ELSE
• SWITCH CASE
– Lặp
• WHILE DO
• DO WHILE (REPEAT UNTIL)
• FOR

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 31


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN

• Cấu trúc IF – THEN.


• Ngữ pháp: IF Điều kiện THEN Công
việc.
• Trong cấu trúc này nếu điều kiện thoả
công việc sẽ được thực hiện, nếu không
công việc sẽ bị bỏ qua. Trong hợp ngữ
cấu trúc này có thể thực hiện bằng các
lệnh nhảy có điều kiện. Giải thuật của cấu
trúc biểu diễn trên hình 4.1.
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 32
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN

• Cấu trúc IF – THEN.


Sai Điều kiện

Đúng
Công việc

Hình 4.1. Giải thuật cấu trúc IF – THEN.

• Ví dụ : Viết đoạn chương trình xoá AH về 0 khi giá trị của nó lớn hơn 03
• CMP AH,03
• JNA THOAT
• MOV AH,0
• THOAT:

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 33


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN

• Cấu trúc IF – THEN – ELSE.


• Ngữ pháp: IF Điều kiện THEN Công việc1
ELSE Công việc 2.
• Giải thuật của cấu trúc trình bày trên hình
4.2. trong cấu trúc này nếu thỏa điều kiện
thì công việc 1 được thực hiện, nếu không
thì công việc 2 được thực hiện. Trong hợp
ngữ điều này tương đương với việc sử
dụng các lệnh nhảy có điều kiện và không
điều kiện đến các nhãn khác nhau.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 34


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN

• Cấu trúc IF – THEN – ELSE.


Sai Đúng
Điều kiện

Công việc 1 Công việc 2

Hình 4.2. Giải thuật cấu trúc IF – THEN – ELSE.

• Ví dụ : Tìm số nhỏ hơn trong hai số chứa trong AH và BH gán cho AL.
CMP AH,BH ;AH<BH?
JL GAN ; Nếu đúng gán AH cho AL
MOV AL,BH ; Nếu không lấy số nhỏ hơn trong BH vào AH
JMP RA
GAN:MOV AL,AH ; AL sẽ chứa số nhỏ hơn.
RA:
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 35
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN

• Cấu trúc SWITCH - CASE.


• Ngữ pháp: CASE Biểu thức
Giá trị 1: Công việc 1
Giá trị 2: Công việc 2
……
Giá trị N: Công việc N
END CASE
• Giải thuật của cấu trúc biểu diễn trên hình 4.3. Trong
cấu trúc này nếu biểu thức có giá trị 1 thì công việc 1
được thực hiện, nếu biểu thức có giá trị 2 công việc 2
được thực hiện …. Trong hợp ngữ có thể sử dụng các
lệnh nhảy có điều kiện và không có điều kiện để chuyển
điều khiển của chương trình tới các nhãn khác nhau.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 36


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN
• Cấu trúc SWITCH - CASE:

Biểu thức

……
Công việc 1 Công việc 2 Công việc N

Hình 4.3: Giải thuật cấu trúc CASE.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 37


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN

• Cấu trúc CASE:


• Ví dụ : Xét giá trị của AX để thực hiện các công việc khác nhau:
Nếu AX = 1 thì CX := CX+7
Nếu AX = 2 thì CX:= CX+DX
Nếu AX = 3 thì CX:= CX-9
• Đoạn chương trình được thực hiện như sau:
CMP AX,01
JNE @
ADD CX,07
JMP RA
@: CMP AX,02
JNE @@
ADD CX,DX
JMP RA
@@: CMP AX,03
JNE RA
SUB CX,09

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 38


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LẶP

 Cấu trúc FOR – DO.


– Ngữ pháp: FOR Số lần
lặp DO Công việc.
– Giải thuật của cấu trúc Khởi động bộ đếm
trình bày trên hình 4.4.
Trong cấu trúc này công
việc sẽ được thực hiện Công việc

nhiều lần (bằng số lần lặp


Giảm bộ đếm
được khai báo). Trong
hợp ngữ công việc này
có thể dùng lệnh LOOP, Sai
Bộ đếm =0
?
hoặc cặp lệnh giảm
Đúng
(DEC) và nhảy khi chưa
bằng 0. Hình 4.4. Giải thuật cấu trúc WHILE – DO.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 39


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LẶP

 Cấu trúc FOR – DO.


• Ví dụ : viết chương trình tính tổng các số tự
nhiên từ 1 tới 99.
MOV AX,0 ;Khởi động tổng bằng 0
MOV DX,1 ; Số thứ nhất
MOV CX,99 ; Tất cả bao gồm 99 số
LAP: ADD AX,DX ; Tổng := Tổng + 1
INC DX ; Tăng để có số tiếp theo
LOOP LAP ; Lặp cho tới khi hết 99 số.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 40


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LẶP

• Cấu trúc lặp WHILE – DO.


– Ngữ pháp: WHILE Điều
kiện DO Công việc.
– Giải thuật của cấu trúc trình
bày trên hình 4.5. Trước hết Sai
Điều kiện
điều kiện sẽ được kiểm tra,
công việc sẽ được lặp lại khi
điều kiện còn đúng. Trong hợp Đúng
ngữ cấu trúc này có thể thực
hiện bằng cách sử dụng lệnh
CMP hoặc một lệnh nào đó để Công việc
kiểm tra điều kiện, sau đó
dùng lệnh nhảy có điều kiện
để thoát khỏi vòng lặp.. Hình 4.5. Giải thuật cấu trúc WHILE - DO.

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 41


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LẶP

• Cấu trúc lặp WHILE – DO.


– Ví dụ :Đọc và hiển thị các ký tự nhập từ bàn phím cho đến khi gặp
ESC thì dừng, đếm số ký tự đọc được.
XOR CX,CX ; Xoá số đếm
MOV AH,1 ; Hàm đọc ký tự từ bàn phím của INT 21H
có hiện
TIEP:INT 21H ; gọi ngắt 21H AL chứa mã ký tự
CMP AL,27 ;Kiểm tra ký tự vừa hiện có phải là ESC
không
JE RA
INC CX ; tăng số đếm
JMP TIEP
RA:

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 42


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LẶP

• Cấu trúc lặp DO WHILE


(REPEAT – UNTIL)
– Ngữ pháp: REPEAT công
việc UNTIL điều kiện.
– Giải thuật của cấu trúc trình Công việc
bày trên hình trên hình 4.6.
Trong cấu trúc này công việc
được thực hiện trước ít nhất
một lần, sau đó điều kiện sẽ Đúng
Điều kiện
được kiểm tra. Nếu điều kiện
thoả công việc tiếp tục được
lặp lại. Trong hợp ngữ điều Sai
kiện thường được kiểm tra Hình 4.6. Giải thuật cấu trúc REPEAT – UNTIL.
bằng lệnh CMP, và công việc
sẽ được tiếp tục bằng một lệnh
nhảy có điều kiện.
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 43
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LẶP

• Cấu trúc lặp DO WHILE


• Ví dụ : Xác định xem có bao nhiêu số tự nhiên bắt đầu từ
1 có tổng nhỏ hơn 1000 ?
MOV AX,0 ;khởi động tổng bằng 0
MOV DX,1 ;khởi động số đầu tiên để cộng
TIEP: ADD AX,DX ;cộng để có tổng
INC DX ;tăng để có số tiếp theo và cũng chính là
số đếm
CMP AX,1000 ; tổng còn nhỏ hơn 1000 thì cộng tiếp
JB TIEP
RA:

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 44


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
3.4 GIỚI THIỆU MỘT SỐ CHƯƠNG TRÌNH CỤ THỂ
.stack 100h
.data
x db ‘0’
.code
St:Mov ax,@data
Mov ds,ax
Mov ah,02
Mov dl,x
Int 21h
Mov ah,4ch
Int 21h
End st
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 45
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Ví dụ nhập ký tự từ bàn phím sau đó hiện lên màn hình

.stack 100h
.data
X db ‘0’
.code
St:Mov ax,@data
Mov ds,ax
Mov ah,01
Int 21h
Mov ah,02
Mov dl,al
Int 21h
Mov ah,4ch
Int 21h
End st
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 46
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Ví dụ nhập hai số cộng và hiển thị kết quà

.stack 100h
.data
X db ‘0’
.code
St:Mov ax,@data
Mov ds,ax
Mov ah,01
Int 21h
Mov bl,al
Mov ah,01
Int 21h
Add al,bl
Aaa
Add ax,3030h
Mov ah,02
Mov dl,al
Int 21h
Mov ah,4ch
Int 21h
End st

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 47


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Viết chương trình hiện lên màn hình câu ‘Welcome to
Assembler’.
• Giải :
• Trong ví dụ này để hiện một chuỗi lên màn hình có thể sử dụng hàm 09 ngắt 21H.
• .Model Tiny
• .Code
• Start: Jmp begin
• CRLF db 13,10,’$’
• St DB ‘Welcome to Assembler$’
• Begin:Mov ah,09
• Lea dx,CRLF
• Int 21h ;Về đầu hàng mới
• Mov ah,09
• Lea dx,st
• Int 21h ; hiển thị st
• Mov ah,09
• Lea dx,CRLF
• Int 21h ; xuống dòng về đầu dòng mới
• Int 20h
• End start

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 48


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Một số ví dụ cơ bản

• Ví dụ 2: Viết chương trình nhập vào từ bàn phím một ký tự thường,
thông báo lỗi cho phép nhập lại khi nhập sai, và sau đó hiển thị ký tự hoa
tương ứng với nó trên dòng tiếp theo.
• Giải :
– Để đơn giản có thể chia chương trình thành nhiều chức năng nhỏ như sau:
– Hiển thị thông báo nhập ký tự thường.
– Chờ nhập ký tự và kiểm tra, nếu sai hiển thị thông báo nhập lại.
– Đổi thành ký tự hoa tương ứng, hiển thị thông báo cùng ký tự hoa trên dòng
tiếp theo.
• .Model Small
• .Stack 100h
• .Data
• CR equ 0dh
• LF equ 0ah
• Tb1 db CR, LF, ‘Nhap vao mot ky tu thuong : $’
• Tb2 db CR, LF, ‘Nhap sai – nhap lai: $’
• Tb3 db CR, LF, ‘Ký tự hoa tương ứng với nó là :’
• Char db ?,’$’

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 49


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Một số ví dụ cơ bản

• .Code
• Main proc
• Mov ax,@data ;khởi tạo ds
• Mov ds,ax ;hiện thông báo nhập ký tự
• Mov ah,09
• Lea dx,tb1
• Int 21h
• NHAP:Mov ah,01 ; nhập ký tự từ bàn phím
• Int 21h
• ;kiểm tra có phải là một ký tự thường hay không
• Cmp al,61h
• Jb SAI
• Cmp al,7ah
• Jbe DUNG

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 50


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Một số ví dụ cơ bản

• SAI: Mov ah,09


• Lea dx,tb2
• Int 21h
• Jmp NHAP
• ;Đổi thành ký tự hoa hiển thị lên màn hình
• DUNG: Sub al,20h
• Mov char,al
• Mov ah,09
• Lea dx,tb3
• Int 21h
• ; trở về DOS
• mov ax,4c00h
• int 21h
• Main endp
• End main

www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 51


KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU

You might also like