Tải bản đầy đủ (.doc) (25 trang)

ôn tập Vi xử lý ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (287.06 KB, 25 trang )

Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
Ôn tập Vi Xử Lý
Phần 1 – Lý thuyết
Khi học về lập trình hợp ngữ thì chủ yếu thao tác trên các thanh ghi và bộ nhớ stack, nên các
anh chị phải nắm rõ chức năng của từng thanh ghi để có thể hiểu mà sử dụng các lệnh
1. Tập thanh ghi:
4 thanh ghi đoạn:
• CS (Code Segment): thanh ghi đoạn lệnh
• DS (Data Segment): thanh ghi đoạn dữ liệu
• SS (Stack Segment): thanh ghi đoạn ngăn xếp
• ES (Extra Segment): thanh ghi đoạn dữ liệu phụ
3 thanh ghi con trỏ:
• IP (Instruction Pointer): thanh ghi con trỏ lệnh
• SP (Stack Pointer): con trỏ ngăn xếp
• BP (Base Pointer): thanh ghi con trỏ cơ sở
4 thanh ghi dữ liệu:
• AX (Accumulator): thanh chứa - thanh ghi tích lũy
• BX (Base): thanh ghi cơ sở
• CX (Count): thanh ghi đếm
• DX (Data): thanh ghi dữ liệu
Mỗi thanh ghi này đều có thể được chia ra thành 2 nửa có khả năng sử dụng độc lập.
Thanh ghi cờ
2. Các bước lập trình
Các bước lập trình hợp ngữ cũng giống như các bước lập trình trong ngôn ngữ bậc cao, cũng
gồm những bước như sau:
• Bước 1: Phát biểu bài toán
• Bước 2: Xây dựng thuật giải
1
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
• Bước 3: Viết mã chương trình
• Bước 4: Dịch và sửa lỗi cú pháp


• Bước 5: Chạy thử và hiệu chỉnh chương trình
3. Cấu trúc chung của lập trình hợp ngữ
.MODEL small
.STACK 100h
.DATA
; Khai báo các biến ở đây
.CODE
; Các lệnh chương trình ghi ở đây
END
4. Các lệnh cơ bản trong lập trình hợp ngữ
4.1. Lệnh MOV
- Cú pháp: MOV <đích>,<nguồn>
- Ý nghĩa: lệnh này dùng để sao chép dữ liệu từ toán hạng nguồn vào toán hạng đích
- Lưu ý:
• toán hạng đích phải đủ để nhận dữ liệu
• không được sao chép hằng vào thanh ghi đoạn
• 2 toán hạng không đồng thời là vùng nhớ hoặc thanh ghi đoạn
- Ví dụ:
MOV AX,vungnho ; AX <- vungnho
MOV AX,BX ; AX <- BX
MOV AH,'A' ; AX <- 41h
MOV AX,'A' ; AX <- 0041h
MOV DX, OFFSET MSG ; DX <- địa chỉ ô (MSG)
MOV DX,SEG MSG ; DX <- địa chỉ đoạn (MSG)
4.2. Lệnh XCHG
- Cú pháp: XCHG <đích>,<nguồn>
- Ý nghĩa: lệnh này dùng để hoán chuyển dữ liệu của 2 toán hạng đích và nguồn.
- Lưu ý:
• hai toán hạng có thể là thanh ghi hay vùng nhớ cùng kích thước
• không được sao chép hằng vào thanh ghi đoạn

• 2 toán hạng không đồng thời là vùng nhớ
2
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
- Ví dụ:
XCHG AX,vungnho ; AX <-> vungnho
XCHG AL,BH ; AL <-> BH
4.3. Lệnh ADD và SUB
- Cú pháp:
ADD <đích>,<nguồn>
SUB <đích>,<nguồn>
- Ý nghĩa: 2 lệnh này dùng để thêm/bớt nội dung trong toán hạng đích với toán hạng nguồn
- Lưu ý:
• kết quả chứa trong toán hạng đích
• toán hạng nguồn có thể là hằng, thanh ghi hoặc vùng nhớ
• toán hạng đích có thể là thanh ghi hoặc vùng nhớ
• 2 toán hạng không đồng thời là vùng nhớ
• 2 toán hạng có thể có dấu (bù 2) hoặc không dấu
- Ví dụ:
ADD AX,BX ; AX <- AX+BX
ADD AX,vungnho ; AX <- vungnho
ADD AX,2 ; AX <- AX+2
SUB AX,BX ; AX <- AX-BX
SUB AX,vungnho ; AX <- AX-BX
SUB AX,2 ; AX <- AX-2
4.4. Lệnh INC và DEC
- Cú pháp:
INC <đích>
DEC <đích>
- Ý nghĩa: 2 lệnh này dùng để tăng/giảm nội dung trong toán hạng đích
- Lưu ý: toán hạng đích có thể là thanh ghi hoặc vùng nhớ

- Ví dụ:
INC AX ; AX <- AX+1
INC vungnho ; vungnho <- vungnho+1
DEC AX ; AX <- AX+1
DEC vungnho ; vungnho <- vungnho-1
4.5. Lệnh NEG
- Cú pháp: NEG <đích>
3
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
- Ý nghĩa: lệnh này dùng để đổi dấu (dương thành âm, âm thành dương) của toán hạng đích
- Lưu ý:
• toán hạng đích có thể là thanh ghi hoặc vùng nhớ
• nếu toán hạn đích là giá trị âm nhỏ nhất (-128 hay -32768) thì sau lệnh này sẽ không
thay đổi giá trị
- Ví dụ:
NEG AX ; AX <- (-AX)
NEG vungnho ; vungnho <- (-vungnho)
MOV AX,-32768 ; AX <- (-32768)
NEG AX ; AX <- (-32768)
MOV DL,-128 ; DL <- (-128)
NEG DL ; DL <- (-128)
4.6. Lệnh INT 21h
- Lệnh này là một trình con của hệ điều hành. Trình con này có nhiều chức năng khác nhau
tuỳ theo trị của thanh ghi AH. Sau đây là một số chức năng (hàm) thông dụng.
• AH = 1 : ngắt 21h thực hiện nhập một ký tự từ bàn phím, mã ASCII ký tự nhận được
(hoặc 0 nếu là phím điều khiển) chứa trong AL. Nếu ký tự thông thường được gõ vào
thì sẽ hiển thị trên màn hình. Lệnh viết như sau:
MOV AH,1 ; chọn chức năng 1
INT 21h ; chờ người sử dụng nhập vào 1 ký tự và lưu vào
AL

• AH = 2 : ngắt 21h thực hiện xuất ký tự chứa trong thanh ghi DL ra màn hình
MOV AH,2 ; chọn chức năng 2
MOV DL,'A' ; chọn ký tự hiển thị là A
INT 21h ; hiển thị ký tự
• AH = 9 : ngắt 21h thực hiện xuất chuỗi ký tự có địa chỉ ô chứa trong thanh ghi DX
(và địa chỉ đoạn chứa trong DS) ra màn hình. Chú ý chuỗi ký tự phải kết thúc bằng ký
tự $
.Data
MSG DB "Chuoi can hien thi$"
.Code
; Dua dia chi doan du lieu vao DS
MOV AX,@Data
MOV DS,AX
; Hien thi cau chao
MOV AH,9
LEA DX,AX
INT 21h
4
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
• AH = 4Ch : ngắt 21h thực hiện việc kết thúc chương trình và trả điều khiển về cho hệ
điều hành. Lệnh viết như sau:
MOV AH,4Ch ; chon chuc nang 4Ch
INT 21h ; ket thuc chuong trinh
4.6. Lệnh INT 10h
Lệnh này dùng để xoá màn hình
MOV AX,3
INT 10h
Bài tập Phần 1
- Bài tập của phần này gồm có 2 phần:
• Lý thuyết

• Bài tập
I. Lý thuyết
1. Tính địa chỉ tuyệt đối tương ứng với địa chỉ tương đối A51h:CD90h
Gỉai:
- Địa chỉ tương đối có dạng: <địa chỉ đoạn>:<địa chỉ ô>
- Muốn đổi từ địa chỉ tương đối sang địa chỉ tuyệt đối thì ta áp dụng công thức:
Địa chỉ tuyệt đối = địa chỉ đoạn * F + địa chỉ ô
Vậy địa chỉ tuyệt đối = A51h * 16 + CD90h = A510h + CD90h = 172A0h
2. Tính địa chỉ tương đối tương ứng với địa chỉ tương đối A25h:CD09h
Gỉai: tương tự cách tính trên.
3. Với địa chỉ tuyệt đối 4A37Bh, hãy tính:
a. Địa chỉ ô tương ứng với đoạn 40FFh
b. Địa chỉ đoạn tương ứng với ô 123Bh
Gỉai:
Cũng áp dụng công thức trên
a. địa chỉ ô = địa chỉ tuyệt đối - địa chỉ đoạn * 16 = 4A37Bh -
40FFh * 16 = 938Bh
b. địa chỉ đoạn = (địa chỉ tuyệt đối - địa chỉ ô) / 16 =
(4A37Bh - 123Bh) / 16 = 4914h
4. Gỉa sử các byte ở địa chỉ từ 0 đến 4 có trị (thập lục) là AB, CD, EF, 01, 23. Hãy cho biết trị
của từ ở địa chỉ 2
Gỉai: Ta có hình ảnh sau:
5
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
Như vậy ta kết luận ở địa chỉ 2 ta có nội dung là EF
5. Gỉa sử chuỗi "12A45" được lưu trữ trong bộ nhớ từ địa chỉ 0 đến 4. Hãy cho biết nội dung
của vùng nhớ (dạng thập lục) từ địa chỉ 0 đến 4
Gỉai: tương tự như câu 4: 05h, 04h, 0Ah, 02h, 01h
6. Viết lệnh định nghĩa từ WORDV có trị -1
Gỉai:

WORDV DB FFd
7. Viết lệnh định nghĩa hằng MSG có trị là 'DAY LÀ THONG BAO'
Gỉai:
MSG EQU 'DAY LA THONG BAO'
8. Viết nhóm lệnh tương đương với các lệnh gán như sau:
a. B = B - A - 1
b. A = B
c. A = 10 - A
d. A = B - A * 2
e. C = 2 * B - 3 * A
Gỉai:
a. B = B - A - 1
MOV AX,A ; AX <- A
DEC AX ; AX <- A - 1
SUB B,AX ; B <- B - A
- 1
b. A = B
MOV AX,B ; AX <- B
MOV A,AX ; A <- B
c. A = 10 - A
NEG A ; A <- (-A)
ADD A,10 ; A <- (-A)
+ 10
d. A = B - A * 2
MOV AX,A ; AX <- A
e. C = 2 * B - 3 * A
MOV AX,B ; AX <- B
6
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
NEG AX ; AX <- (-A)

SUB AX,AX ; AX <- (-
A) - A
ADD AX,B ; AX <- (-
2A) + B
MOV A,AX ; A <- (-2A)
+ B
ADD AX,AX ; AX <- B +
B
MOV C,AX ; C <- 2B
MOV AX,A ; AX <- A
ADD AX,AX ; AX <- A +
A
ADD AX,AX ; AX <- 2A
+ A
NEG AX ; AX <- (-3A)
ADD C,AX ; C <- 2B +
(-3A)
II. Thực hành
1. Viết chương trình hiển thị câu chào sau trên màn hình: Cha`o ba.n!
Gỉai:
Code:
;====================================================================
=============
; Noi dung: Viet chuong trinh hien thi cau chao sau len man hinh:
Cha`o ba.n!
; Ten file: bt01.asm
; Ngay tao: 17/03/2009 - 00:15
;====================================================================
=============
.model small

.stack 100h
.data
; Khai bao cac bien tai day
CR EQU 13
LF EQU 10
Mess db 'Cha`o ba.n!',CR,LF,'$'
.code
main proc
; Dua du lieu vao thanh ghi DS
mov ax,@data
mov ds,ax
; Hien thi Mess
mov ah,9
lea dx,Mess
int 21h
; Exit to DOS
mov ah,4ch
int 21h
main endp
end main
2. Viết chương trình hiển thị 3 câu chào sau trên màn hình:
Hello, world!
Hello, solar system!
Hello, universe!
7
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
Gỉai:
Code:
;====================================================================
=============

; Noi dung: Viết chương trình hiển thị 3 câu chào sau trên màn hình:
; Hello, world!
; Hello, solar system!
; Hello, universe!
; Ten file: bt02.asm
; Ngay tao: 17/03/2009 - 00:25
;====================================================================
=============
.model small
.stack 100h
.data
; Khai bao cac bien tai day
CR EQU 13
LF EQU 10
Mess db CR,LF,'Hello, world!'
db CR,LF,'Hello, solar system!'
db CR,LF,'Hello, universe!$'
.code
main proc
; Dua du lieu vao thanh ghi DS
mov ax,@data
mov ds,ax
; Hien thi Mess
mov ah,9
lea dx,Mess
int 21h
; Exit to DOS
mov ah,4ch
int 21h
main endp

end main
3. Viết chương trình nhập một ký tự và hiển thị ở dòng kế tiếp. Kết quả có dạng:
Hay nhap mot ky tu: A
Ky tu da nhap : A
Code:
;====================================================================
===============
; Noi dung: Viet chuong trinh nhap vao mot ky tu va hien thi lai o
dong tiep theo. Ket qua co dang:
; Hay nhap mot ky tu: A
; Ky tu da nhap : A
; Ten file: bt03.asm
; Ngay tao: 17/03/2009 - 00:31
; Huong dan:
; 1. Khai bao du lieu:
; TBao1 db 13,10,'Hay nhap mot ky tu: $'
; Tbao2 db 13,10,'Ky tu da nhap : $'
; 2. Thuat giai:
; - Hien thi TBao1
8
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
; - Nhap mot ky tu
; - Dua gia tri vao thanh ghi bl
; - Hien thi TBao2
; - Hien thi KyTu
;====================================================================
===============
.model small
.stack 100h
.data

; Khai bao cac bien tai day
CR EQU 13
LF EQU 10
TBao1 db CR,LF,'Hay nhap mot ky tu: $'
TBao2 db CR,LF,'Ky tu da nhap : $'
.code
main proc
; Dua du lieu vao thanh ghi DS
mov ax,@data
mov ds,ax
; Hien thi TBao1
mov ah,9
lea dx,TBao1
int 21h
; Nhap vao mot ky tu
mov ah,1
int 21h
; Dua ky tu vao thanh ghi bl
mov bl,al
; Hien thi TBao2
mov ah,9
lea dx,TBao2
int 21h
; Hien thi KyTu
mov ah,2
mov dl,bl
int 21h
; Exit to DOS
mov ah,4ch
int 21h

main endp
end main
4. Viết chương trình nhập một ký tự và hiển thị ký tự đứng trước, đứng sau theo thứ tự mã
ASCII. Kết quả có dạng:
Hay nhap mot ky tu: B
Ky tu dung truoc : A
Ky tu dung sau : C
Gỉai
Code:
;====================================================================
===============
; Noi dung: Viet chuong trinh nhap vao mot ky tu va hien thi ky tu
dung truoc,
; dung sau theo thu tu ma ASCII. Ket qua co dang:
; Hay nhap mot ky tu: B
; Ky tu dung truoc : A
9
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
; Ky tu dung sau : C
; Ten file: bt04.asm
; Ngay tao: 17/03/2009 - 08:37
; Huong dan:
; 1. Khai bao du lieu:
; TBao1 db 13,10,'Hay nhap mot ky tu: $'
; Tbao2 db 13,10,'Ky tu dung truoc : $'
; TBao3 db 13,10,'Ky tu dung sau : $'
; 2. Thuat giai:
; - Hien thi TBao1
; - Nhap mot ky tu
; - Dua gia tri vao thanh ghi bl

; - Hien thi TBao2
; - Giam 1 gia tri
; - Hien thi TBao3
; - Tang 2 gia tri
;====================================================================
===============
.model small
.stack 100h
.data
; Khai bao cac bien tai day
CR EQU 13
LF EQU 10
TBao1 db CR,LF,'Hay nhap mot ky tu: $'
TBao2 db CR,LF,'Ky tu dung truoc : $'
TBao3 db CR,LF,'Ky tu dung sau : $'
.code
main proc
; Dua du lieu vao thanh ghi DS
mov ax,@data
mov ds,ax
; Hien thi TBao1
mov ah,9
lea dx,TBao1
int 21h
; Nhap vao mot ky tu
mov ah,1
int 21h
; Dua ky tu vao thanh ghi bl
mov bl,al
; Hien thi TBao2

mov ah,9
lea dx,TBao2
int 21h
; Hien ky tu va giam 1 gia tri
mov ah,2
mov dl,bl
dec dl
int 21h
; Hien thi TBao3
mov ah,9
lea dx,TBao3
int 21h
; Hien ky tu va tang 1 gia tri
mov ah,2
mov dl,bl
inc dl
int 21h
; Exit to DOS
mov ah,4ch
10
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
int 21h
main endp
end main
5. Viết chương trình nhập hai ký tự và hiển thị ký tự thứ ba có mã ASCII là tổng của mã hai
ký tự đã nhập. Kết quả có dạng:
Nhap ky tu thu nhat: 2
Nhap ky tu thu hai : 3
Ky tu tong : e
Phần 2 – Lý Thuyết

Trong phần này các anh chị sẽ nhận biết kiểu định vị của địa chỉ và giới thiệu các thanh ghi
cờ
Kiểu định vị hoặc chế độ định vị (addressing mode) là cách thức xác định dữ liệu trong lệnh.
Có tất cả 7 chế độ định vị chuẩn, đó là
• Thanh ghi (register)
• Lấy ngay (immediate)
• Trực tiếp (direct)
• Gían tiếp thanh ghi (register indirect)
• Chỉ số (indexed)
• Cơ sở (based)
• Chỉ số cơ sở (based indexed)
1. Định vị thanh ghi
- Trong chế độ định vị thanh ghi, các tác tố là thanh ghi, tức dữ liệu chứa trong thanh ghi. Khi
tác tố là thanh ghi thì lệnh sẽ được thực hiện nhanh hơn vì không mất thời gian truy cập vào
bộ nhớ.
- Ví dụ:
MOV AL,BL ; AL <- BL
INC BX ; BX <- BX + 1
DEC AL ; AL <- AL - 1
SUB DX,CX ; DX <- DX - CX
2. Định vị lấy ngay
- Trong chế độ này, dữ liệu xử lý được lưu ngay trong lệnh, lệnh được thực hiện theo chế độ
này cũng thực hiệnh nhanh vì dữ liệu được lấy cùng lúc với lệnh.
- Ví dụ:
MOV CL,61h ; CL <- 61h
MOV CX,5 ; CX <- 5
11
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
3. Định vị trực tiếp
- Định vị trực tiếp tương tự như định vị lấy ngay, chỉ khác ở chỗ là địa chỉ của tác tố được ghi

trong lệnh thay vì là dữ liệu. Nói cách khác, địa chỉ (trong bộ nhớ) của dữ liệu chứa trong
lệnh
- Ví dụ:
MOV [7000h],AX ; chuyển giá trị trong thanh ghi AX vào trong
bộ nhớ ở địa chỉ ô là 7000h
- Ngoài ra lệnh trên còn có thể hiểu như sau:
MOV DS:[7000h],AX ; chuyển giá trị trong thanh ghi AX vào
trong bộ nhớ ở địa chỉ ô là 7000h
- Theo cách ghi thứ hai thì ta thấy cách ghi giống như cách thể hiện 1 địa chỉ tương đối
<địa chỉ đoạn>:<địa chỉ ô nhớ> <-> DS:[7000h]
- Cả hai cách ghi đều như nhau, cách thứ nhất nếu không ghi địa chỉ đoạn nào thì ngầm hiểu
là lấy đoạn DS làm chuẩn
4. Định vị gián tiếp thanh ghi
- Trong chế độ định vị này, địa chỉ ô của các tác tố chứa trong các thanh ghi BX, BP, SI hoặc
DI (địa chỉ đoạn chứa trong DS tương ứng với BX, SI, DI và SS tương ứng với BP). Nói cách
khác địa chỉ tác tố không chứa trực tiếp trong lệnh mà gián tiếp thông qua một thanh ghi.
- Ví dụ lệnh sau trừ nội dung DX với vùng nhớ có địa chỉ chứa trong DS:BX
SUB DX,[BX]
SUB DX,BX ; lưu ý này trên sẽ khác với lệnh trên
- Vì lệnh đầu tiên lấy dữ liệu từ vùng nhớ (định vị gián tiếp thanh ghi), lệnh thứ hai lấy dữ
liệu từ thanh ghi (định vị thanh ghi).
- Gỉa sử ta có nội dung các thanh ghi và vùng nhớ như sau:
Thanh ghi Nội dung thanh ghi Nội dung vùng nhớ Địa chỉ vùng nhớ
BX 1000 1BAC DS:1000
SI 2000 20FE DS:2000
DI 3000 031D DS:3000
Với các lệnh sau, ta được kết quả sau:
MOV BX,[BX] ; BX <- 1BAC
MOV CX,[SI] ; CX <- 20FE
MOV BX,[AX] ; tác tố nguồn không hợp lệ

ADD [SI],[DI] ; lệnh này không hợp lệ
MOV DL,[DI] ; DL <- 1D
5. Định vị chỉ số
- Trong chế độ này, dữ liệu chứa trong bộ nhớ, và địa chỉ tác tố là tổng của nội dung thanh
ghi chỉ số SI và DI (là một địa chỉ) với một số bù 2 có dấu 8 hoặc 16 bit gọi là độ dời (offset)
- Ví dụ:
12
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
MOV AX,[SI+4]
MOV AX,[4+SI]
MOV 4[SI],AX
MOV [SI]4,AX
ADD [DI-6],CX
ADD [-6+DI],CX
ADD -6[DI],CX
ADD [DI]-6,CX
MOV [SI+ACCOUNT],AX
MOV [ACCOUNT+SI],AX
MOV ACCOUNT[SI],AX
MOV [SI]ACCOUNT,AX
MOV ACCOUNT+SI,AX
6. Định vị cơ sở
Cách định vị này tương tự như cách định vị chỉ số, nhưng dùng thanh ghi cơ sở BX hoặc BP
thay vì DI hoặc SI. Gỉa sử ta có nội dung các thanh ghi và vùng nhớ như sau:
Thanh ghi Nội dung thanh ghi Nội dung vùng nhớ Địa chỉ vùng nhớ
BX 2 1084 DS:0002
SI 4 2BAC DS:0004
DI 1
- Với khai báo:
ALPHA DW 0123h,0456h,0789h,0ABCh

và với các lệnh sau, ta có kết quả:
MOV AX,[ALPHA+BX] ; AX <- 0456h
MOV BX,[BX+2] ; BX <- 2BACh
MOV CX,ALPHA[SI] ; CX <- 0789h
MOV AX,-2[SI] ; AX <- 1084h
MOV BX,[ALPHA+3+DI] ; BX <- 0789h
ADD BX,[ALPHA+AX] ; thanh ghi nguồn không hợp lệ
7. Định vị chỉ số cơ sở
- Trong cách định vị này, địa chỉ tác tố được xác định bằng cách cộng nội dung thanh ghi cơ
sở với nội dung thanh ghi chỉ số và có thể cộng với một trị có dấu 8 hoặc 16 bit
- Ví dụ:
MOV AX,[BX+DI]
MOV [BX+SI+2],AX
MOV AX,[BX+SI+2]
MOV AX,[SI+BX+2]
MOV AX,[SI][BX+2]
MOV AX,[BX][SI+2]
MOV AX,2[BX][SI]
MOV AX,W[BX][SI]
ADD AL,[BP+DI-50]
MOV ES:[BX+DI+4],AX
13
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
Thanh ghi cờ
- Thanh ghi cờ là một trong các thanh ghi của CPU dài 16 hoặc 32 bit (từ CPU 80386 về sau)
ghi nhận các thông tin điều khiển, trạng thái của CPU và kết quả thực hiện lệnh sau cùng.
- Mỗi bit gọi là một cờ, cờ có thể có trị 1 (gọi là đặt - set) hoặc 0 (gọi là xoá - clear), 16 bit
phần cao dùng cho chế độ bảo vệ, 16 bit phần thấp gồm 2 nhóm: cờ điều khiển và cờ trạng
thái. Có 2 dạng cờ:
• Cờ điều khiển: IF (interrupt enable flag), DF (direction flag) và TF (trap flag)

• Cờ trạng thái: CF (carry flag), PF (parity flag), AF (auxiliary flag), ZF (zero flag), SF
(sign flag), OF (overflow flag), NT (nested flag), IOPL (input/output privilege level)
- Vị trí của các cờ như sau:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NT IOPL OF DF IF TF SF ZF AF PF CF
- Sau đây là phần diễn giải một số cờ thông dụng.
Cờ Đặt Xoá Ý nghĩa
OF OV NV Tràn/Không tràn (Overflow/Not overflow)
DF DN UP Xuống/Lên (Down/Up)
IF EI DI Cho ngắt/Cấm ngắt (Enable/Disable)
SF NG PL Âm/Dương (Negative/Plus)
ZF ZR NZ Không/Khác không (Zero/Not zero)
AF AC NA Gởi phụ/Không gởi phụ (Axiliary Carry/Not Axiliary Carry)
PF PE PO Chẵn/Lẻ (Parity Even/Parity Odd)
CF CY NC Gởi/Không gởi (Carry Yes/Not Carry)
a. Cờ gởi (CF)
- Có trị 1 khi có nhớ hoặc mượn từ bit MSB (bit cao nhất của dãy số nhị phân), tức bit 7 hoặc
15 hặc 31 trong phép tính cộng và trừ (còn gọi là tràn không dấu), ngược lại là 0. Cờ này có
thể thay đổi theo lệnh dịch và quay. Nói cách khác, cờ CF có 2 giá trị:
• CF = 1 , khi thực hiện phép tính cộng hay trừ không dấu mà có tràn
• CF = 0 , ngược lại
- Ngoài ra ta còn có 3 lệnh liên quan đến cờ CF
• Lệnh CLC (Clear Carry flag): xoá 0 CF
• Lệnh STC (Set Carry flag): đặt 1 cho CF
• Lệnh CMC (Complement Carry flag): đảo trị của CF
- Ví dụ:
14
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
CLC
MOV BL,0FEh ; BL <- 0FEh , CF = 0

ADD BL,1 ; BL <- FFh , CF = 0
ADD BL,1 ; BL <- 00h , CF = 0
b. Cờ chẵn lẻ (PF)
- Có trị 1 khi byte thấp của kết quả là chẵn, có trị 0 khi byte thấp là lẻ. Một từ gọi là chẵn lẽ
khi số bit 1 của từ đó là chẵn/lẽ.
- Ví dụ sau khi thực hiện một lệnh cho kết quả chứa trong AL là 11010010b (bốn bit 1) thì PF
= 1
c. Cờ gởi phụ (AF)
- Có trị 1 khi có nhớ hoặc mượn từ bit 3 (tức là nhớ hoặc mượn từ 4 bit thấp), ngược lại là 0.
Cờ này thường dùng trong các lệnh với số BCD
- Ví dụ:
MOV BL,0FEh ; BL <- 0FEh
ADD BL,1 ; BL <- FFh , AF = 0
ADD BL,1 ; BL <- 00h , AF = 1
d. Cờ không (ZF)
- Có trị 1 khi kết quả là 0, trị 0 khi kết quả khác 0
- Ví dụ:
MOV AL,1 ; AL <- 1
SUB AL,1 ; AL <- 0 , ZF = 1
ADD AL,1 ; AL <- 1 , ZF = 0
e. Cờ dấu (SF)
- Có trị 1 khi kết quả là âm, trị 0 khi kết quả là dương (MSB là 0)
- Ví dụ:
MOV AL,0 ; AL = 0
SUB AL,1 ; AL = -1 ; SF = 1
ADD AL,1 ; AL = 0 ; SF = 0
f. Cờ tràn (OF)
- Cờ tràn có trị 1 khi xảy ra trạng thái tràn tức thì (có dấu) của kết quả vượt quá phạm vi giá
trị cho phép. Ví dụ một từ 2 bytes có thể chứa trị từ khoảng từ -32768 đến 32767 (có dấu),
nếu vượt quá phạm vi này sẽ xảy ra tràn, lúc đó cờ OF = 1

- Ví dụ:
MOV AL,1 ; AL <- 1
SUB AL,1 ; AL <- 0 , ZF = 1
ADD AL,1 ; AL <- 1 , ZF = 0
Bài tập Phần 2
15
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
Phần bài tập của chương này thì gồm có 2 phần:
- Phần xác định dạng chế độ định vị của các câu lệnh
- Các bài tập xác định cờ
Phần 1: Xác định các chế độ định vị của các câu lệnh
1. Xác định kiểu định vị nguồn và đích trong các lệnh sau:
a. MOV AX,BX ; b. MOV AH,7 ; c. MOV [DI],AL ; d. MOV AX,[BP] ; e. MOV AL,[SI+6]
Gỉai:
a. MOV AX,BX ; định vị thanh ghi
b. MOV AH,7 ; định vị lấy ngay
c. MOV [DI],AL ; định vị gián tiếp thanh ghi
d. MOV AX,[BP] ; định vị gián tiếp thanh ghi
e. MOV AL,[SI+6] ; định vị chỉ số
2. Gỉa sử AX = 0500h ; BX = 1000h ; SI = 1500h ; DI = 2000h ; [DS] = 0100h ; [DS] =
0150h ; [DS] = 0200h ; [DS] = 0250h ; [DS] = 0300h và BETA là biến từ nằm ở địa chỉ ô
1000h. Trong các lệnh sau đây, nếu hợp lệ (nếu không hợp lệ, giải thích tại sao), hãy cho biết
địa chỉ ô của các tác tố nguồn hoặc thanh ghi và kết quả lưu trong tác tố đích.
a. MOV DL,SI ; b. MOV DI,[DI] ; c. ADD AX,[SI] ; d. SUB BX,[DI] ; e. LEA
BX,BETA[BX] ; f. ADD [SI],[DI] ; g. ADD BH,[BL] ; h. ADD AH,[SI] ; i. MOV AX,
[BX+DI+BETA]
Gỉai:
a. MOV DL,SI ; DL <- 1500h
b. MOV DI,[DI] ; DI <- 0200h
c. ADD AX,[SI] ; AX <- 0650h

d. SUB BX,[DI] ; BX <- 0800h
e. LEA BX,BETA[BX] ; BX <- 0100h
f. ADD [SI],[DI] ; không hợp lệ (vì 2 tác tố đều là vùng nhớ)
g. ADD BH,[BL] ; BH <- 10h
h. ADD AH,[SI] ; AH <- 0155h
i. MOV AX,[BX+DI+BETA] ; AX <- 3100h
3. Xác định chế độ địa chỉ và tính địa chỉ vật lý của các câu lệnh sau:
CS = DCBAh ; SS = EA98h ; BP = SP = 0957h
DS = ES = DDE8h ; BX = 1234h ; SI = DI = 3412h
a. MOV [1234h],AL
b. MOV BL,[BX+DI]
c. MOV [BP+15],BL
d. MOV BH,[DI+10]
e. MOV AL,[BP+DI] + 110b
Giaỉ:
a. MOV [1234h],AL ; định vị trực tiếp
địa chỉ tuyết đối = DS * 16 + 1234h = DF0B4h
b. MOV BL,[BX+DI] ; định vị chỉ số cơ sở
địa chỉ tuyết đối = DS * 16 + BX + DI = E24C6h
c. MOV [BP+15],BL ; định vị cơ sở
địa chỉ tuyết đối = DS * 16 + BP + Fh = DE7F6h
d. MOV BH,[DI+10] ; định vị chỉ số
địa chỉ tuyết đối = DS * 16 + DI + Ah = E129Ch
16
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
e. MOV AL,[BP+DI]+110b ; định vị chỉ số cơ sở
địa chỉ tuyết đối = DS * 16 + BP + DI + 6h = E1BEFh
Phần 2: Xác định cờ
1. Cho biết nội dung của tác tố đích và trị cờ CF, SF, ZF, PF và OF sau khi thực hiện các lệnh
sau:

a. ADD AX,BX ; với AX = 7FFFh và BX = 1
b. SUB AL,BL ; với AL = 1 và BL = FFh
c. DEC AL ; với AL = 0
d. NEG AL ; với AL = 7Fh
e. XCHG AX,BX ; với AX = 1ABCh và BX = 712Ah
f. ADD AL,BL ; với AL = 80h và BL = FFh
g. SUB AX,BX ; với AX = 0 và BX = 8000h
h. NEG AX ; với AX = 1
Gỉai:
a. ADD AX,BX ; với AX = 7FFFh và BX = 1
AX = 0111 1111 1111 1111b
BX = 0000 0000 0000 0001b
- Cờ CF (cờ gởi, = 1 khi có tràn ngược lại = 0 khi không tràn, đối với số nguyên không dấu)
Đối với lệnh ADD AX,BX thì CF = 0 vì không có tràn
- Cờ SF (cờ dấu, = 1 khi kết quả âm (bit MSB là 1) ngược lại = 0 khi kết quả dương (bit MSB
là 0))
Đối với lệnh ADD AX,BX thì SF = 1 vì kết quả là 1000 0000 0000 0000b (bit MSB là 1)
- Cờ ZF (cờ không, = 1 khi kết quả là 0, ngược lại = 0 khi kết quả khác 0)
Đối với lệnh ADD AX,BX thì ZF = 0 vì kết quả là một số khác 0
- Cờ PF (cờ chẵn lẽ, = 1 khi tổng số bit 1 là số chẵn, ngược lại = 0 khi tổng số bit 1 là số lẻ))
Đối với lệnh ADD AX,BX thì PF = 0 vì kết quả 1000 0000 0000 0000b có tổng số bit 1 là 1
(là số lẻ)
- Cờ OF (cờ tràn, = 1 khi cộng/trừ hai số nguyên cùng dấu mà kết quả cho ra số nguyên khác
dấu, ngược lại = 0)
Đối với lệnh ADD AX,BX thì OF = 1 vì kết quả 1000 0000 0000 0000b khác dấu
Các câu khác các anh chị làm tương tự nhưng nhớ là trước khi xác định cờ thì phải đổi ra số
nhị phân sau đó thực hiện phép toán rồi mới xác định cờ.
2. Cho biết kết quả sau khi thực hiện lệnh ADD AX,BX và trạng thái tràn (có dấu hoặc không
dấu) có xảy ra không với:
a. AX = 512h và BX = 4185h

b. AX = FE12h và BX = 1ACBh
c. AX = E1E4h và BX = DAB3h
d. AX = 7132h và BX = 7000h
e. AX = 6389h và BX = 1176h
Gỉai:
a. ADD AX,BX ; AX = 512h và BX = 4185h
Đối với bài này các anh chị làm tương tự như trên nhưng người ta chỉ hỏi 2 cờ CF và OF thôi.
3. Cho biết kết quả sau khi thực hiện lệnh SUB AX,BX và trạng thái tràn (có dấu hoặc không
dấu) có xảy ra không với:
a. AX = 2143h và BX = 1986h
17
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
b. AX = 81FEh và BX = 1986h
c. AX = 19BCh và BX = 81FEh
d. AX = 0002h và BX = FE0Fh
e. AX = 8BCDh và BX = 71ABh
Gỉai:
SUB AX,BX ; AX = 2143h và BX = 1986h
Đối với bài này các anh chị làm tương tự như trên nhưng người ta chỉ hỏi 2 cờ CF và OF thôi.
Phần 3 – Lý Thuyết
Trong phần này xin nói về:
• Các cấu trúc NHẢY và LẶP
• Giới thiệu một số lệnh nâng cao
• Lập trình hợp ngữ
I. Các cấu trúc NHẢY và LẶP
1. Cấu trúc IF <điều kiện> THEN CV1
- Cú pháp:
CMP <tác tố đích>,<tác tố nguồn> ; điều kiện so sánh đúng
J<đkiệnsai> <tên nhãn sai> ; nhảy tới nhãn sai
; thực hiện CV1


<tên nhãn sai>:
; thực hiện công việc sai

Với J<đkiệnsai> ta cần nhớ 1 vài từ ký hiệu như sau:
• J : Jump (nhảy)
• N : Not (không )
• Z : cờ ZF; C : cờ CF; O : cờ OF; S : cờ SF; P : cờ PF
• A : Above (lớn hơn – so sánh số không dấu)
• B : Below (nhỏ hơn – so sánh số không dấu)
• G : Greater (lớn hơn – so sánh số có dấu)
• L : Less (lớn hơn – so sánh số có dấu)
• E : Equal (bằng)
Sau đây là danh sách một số lệnh nhảy được dùng
18
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
Lệnh nhảy theo kết quả không dấu
JB/JNAE Nhảy nếu dưới/không trên hoặc bằng CF = 1
JAE/JNB Nhảy nếu trên hoặc bằng/không dưới CF = 0
JBE/JNA Nhảy nếu dưới hoặc bằng/không trên (CF or ZF) = 1
JA/JNBE Nhảy nếu trên/không dưới hoặc bằng (CF or ZF) = 0
Lệnh nhảy theo kết quả có dấu
JL/JNGE Nhảy nếu nhỏ hơn/không lớn hơn hoặc bằng (SF or OF) = 1
JGE/JNL Nhảy nếu trên lớn hơn hoặc bằng/không nhỏ hơn (SF or OF) = 0
JLE/JNG Nhảy nếu nhỏ hơn hoặc bằng/không nhỏ hơn ((SF xor OF) or ZF) = 1
JG/JNLE Nhảy nếu lớn hơn/không nhỏ hơn hoặc bằng ((SF xor OF) or ZF) = 0
Lệnh nhảy khác
JE/JZ Nhảy nếu bằng/nhảy nếu bằng không ZF = 1
JNE/JNZ Nhảy nếu không bằng/Nhảy nếu khác không ZF = 0
JP/JPE Nhảy nếu có bit kiểm/có bit kiểm chẵn PF = 1

JNP/JPO Nhảy nếu không có bit kiểm/có bit lẻ PF = 0
JS Nhảy nếu có dấu SF = 1
JNS Nhảy nếu không dấu SF = 0
JO Nhảy nếu tràn OF = 1
JNO Nhảy nếu không tràn OF = 0
JC Nhảy nếu có nhớ CF = 1
JNC Nhảy nếu không nhớ CF = 0
- Ví dụ: thanh ghi AL chứa 1 ký tự chữ. Nếu ký tự chữ hoa thì hiển thị
- Thuật toán: Nếu AL chứa các giá trị <= 5Ah (ký tự Z trong ASCII) thì hiển thị ký tự đó
Code:

CMP AL,5Ah ; so sánh ký tự <= 5Ah ?
JA Stop ; nếu ký tự > 5Ah thì nhảy đến Stop
; hiển thị ký tự đó
MOV AH,2
MOV DL,AL
INT 21h
Stop:
2. Cấu trúc IF <điều kiện> THEN CV1 ELSE CV2
- Cú pháp:
CMP <tác tố đích>,<tác tố nguồn> ; điều kiện so sánh đúng
J<đkiệnsai> <tên nhãn CV2> ; nhảy tới nhãn CV2
; thực hiện CV1

JMP <nhãn kết thúc>
<tên nhãn CV2>:
19
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
; thực hiện công việc CV2


<nhãn kết thúc>:

- Ví dụ: một số x Bytes dạng HEX (0 -> 15). Hiển thị giá trị x lên màn hình (Nghĩa trong
dạng HEX sử dụng 0 -> 9 và từ 10 -> 15 thì hiển thị A -> F)
- Thuật toán: Nếu x <= 9 thì x = x + 30h (hiển thị số) ngược lại x = x + 37h (hiển thị ký tự)
Code:
MOV DL,x ; chuyển vào thanh ghi DL
CMP DL,9 ; x <=9 ?
JA ChangeChar
; hiển thị số
ADD DL,30h ; chuyển thành số
JMP Display
ChangeChar:
ADD DL,37h ; đổi ra ký tự
Display:
; hiển thị ký tự đó
MOV AH,2
INT 21h
3. Cấu trúc FOR <biến lặp bao nhiêu lần> TO DO CV
- Cú pháp: Có 2 cách:
a. Cách 1:
MOV <tác tố đích>,<tác tố nguồn> ; tác tố nguồn là số lần lặp
<nhãn For>:
; thực hiện CV lần đầu tiên

DEC <tác tố đích> ; giảm giá trị của tác tố đích 1 đơn vị
JNZ <nhãn For> ; nhảy đến <nhãn For> nếu khác 0
b. Cách 2:
MOV <tác tố đích>,<tác tố nguồn> ; tác tố nguồn là số lần lặp
<nhãn For>:

; thực hiện CV lần đầu tiên

LOOP <tác tố đích>
- Ví dụ: in ra 1 dòng gồm có 26 chữ cái hoa
- Thuật giải:
+ Khởi tạo DL = 'A'
+ Lặp lại 26 lần, hiển thị + tăng giá trị DL lên 1 đơn vị
Code:
MOV DL,'A' ; khởi tạo DL = 'A'
; hiển thị ký tự
MOV AH,2
; chuẩn bị lặp
MOV CX,26 ; lặp 26 lần
Loop26:
INT 21h ; hiển thị ký tự đó
INC DL ; tăng giá trị lên 1 đơn vị để hiển thị ký tự kế tiếp
LOOP Loop26
MOV
20
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
4. Cấu trúc REPEAT
- Cú pháp:
<nhãn Repeat>:
; thực hiện công việc lần đầu tiên

CMP <tác tố đích>,<tác tố nguồn> ; điều kiện đúng
Jđksai <nhãn Repeat>
- Ví dụ:Mảng byte (80 phần tử) vào dữ liệu từ bàn phím, mỗi phần tử = 1 ký tự, kết thúc bằng
bằng Enter
- Thuật toán:

+ Thông báo 'Hay vao 1 ky tu, ket thuc bang Enter, xuống dòng về đầu dòng, pt đầu mảng'
+ Vào 1 ký tự
+ Lặp lại thao tác: cất ký tự vào mảng, tăng chỉ số mảng, vào 1 ký tự. Cho tới khi ký tự =
Enter
- Lưu ý: có 2 cách xác định phần tử đầu tiên của mảng
LEA BX,M1
XOR SI,SI
Code:
.MODEL small
.STACK 100
.DATA
TB db 10,13,'Hay vao 1 ky tu, ket thuc bang Enter: ',10,13,'$'
M1 db 80 DUP(?)
.CODE
; lấy dữ liệu vào thanh ghi DS
MOV AX,$DATA
MOV DS,AX
; Xuất chuỗi ra màn hình
MOV AH,9
LEA DX,TB
INT 21h
XOR SI,SI ; chọn M1[SI] làm phần tử đầu dãy
; nhập ký tự
MOV AH,1
INT 21h
LoopRepeat:
MOV M1[SI],AL ; cất ký tự vào mảng
INC SI ; tăng chỉ số mảng
INT 21h
CMP AL,13

JNE LoopRepeat ; nhảy nếu ký tự không phải là Enter
5. Cấu trúc WHILE DO
<nhãn While>:
CMP <tác tố đích>,<tác tố nguồn> ; điều kiện đúng
Jđksai <nhãn sai> ; điều kiện sai thì dừng
; thực hiện công việc trong vòn lặp

JMP <nhãn While>
<nhãn sai>:
; thực hiện công việc của nhãn sai

21
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
II. Giới thiệu một số lệnh nâng cao
1. Lệnh luận lý
- Các lệnh luận lý AND, OR, XOR, NOT thực hiện các phép tính luận lý trên dữ liệu nhị
phân theo định nghĩa sau:
A B NOT A A AND B A OR B A XOR B
0
0
1
1
0
1
0
1
1
1
0
0

0
0
0
1
0
1
1
1
0
1
1
0
a. Lệnh NOT
- Cú pháp: NOT <đích>
- Ý nghĩa: Lệnh này đổi tác tố đích (thanh ghi/vùng nhớ) thành số bù. Không có cờ nào bị
ảnh hưởng
- Ví dụ:
MOV AL,3Eh ; AL = 00111110b = 3Eh
NOT AL ; AL = 11000001b = C1h
b. Lệnh AND
- Cú pháp: AND <đích>,<nguồn>
- Ý nghĩa: Lệnh này thực hiện phép AND giữa 2 tác tố, kết quả cuối cùng chứa trong tác tố
đích. Các cờ SF, ZF, PF đều bị ảnh hưởng, CF = OF = 0, AF không xác định.
- Ví dụ:
; xoá bit dấu của AL
MOV AL,-5 ; AL = 11111011b
AND AL,01111111b ; AL = 01111011b
; đổi mã ASCII của số thành số tương ứng
MOV AL,'5' ; AL = 35h
AND AL,0Fh ; AL = 05h

; đổi chữ thường thành hoa
MOV DL,'a' ; DL = 'a'
AND DL,0DFh ; DL = 'A'
c. Lệnh OR
- Cú pháp: OR <đích>,<nguồn>
- Ý nghĩa: Lệnh này tương đương như AND nhưng thực hiện phép OR. Lệnh OR dùng để bật
lên 1 một số bit và giữ nguyên các bit khác.
- Ví dụ:
; bật 1 MSB và LSB của AL
MOV AL,2 ; AL = 00000010b
22
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
OR AL,10000001b ; AL = 10000011b
; đổi 0 9 thành ký số '0' '9'
MOV AL,5 ; AL = 05h
OR AL,30h ; AL = 35h
; đổi chữ hoa thành thường
MOV DL,'A' ; DL = 'A'
OR DL,20h ; DL = 'a'
; kiểm tra CX có bằng 0?
OR CX,CX
JZ Is0
Not0: ; CX <> 0

Is0: ; CX = 0
d. Lệnh XOR
- Cú pháp: XOR <đích>,<nguồn>
- Ý nghĩa: Lệnh này tương đương như AND nhưng thực hiện phép XOR. Lệnh XOR dùng để
lật ngược (1 thành 0, 0 thành 1) một số bit và giữ nguyên các bit khác hoặc xoá 0 một thanh
ghi.

- Ví dụ:
; lật ngược 4 bit cao của AL
MOV AL,01010101b ; AL = 01010101b
XOR AL,11110000b ; AL = 10100101b
; xoá CX
XOR CX,CX ; CL = 0
e. Lệnh TEST
- Cú pháp: TEST <đích>,<nguồn>
- Ý nghĩa: TEST có thể dùng để khảo sát trị của từng bit hoặc nhóm bit. Thực sự TEST thao
tác như lệnh AND nhưng không thay đổi tác tố đích. Các cờ được cập nhật tuỳ theo kết quả
của AND. Do đó, để kiểm tra 1 bit nào đó chỉ cần đặt bit 1 vào đúng vị trí của bit cần kiểm
tra trong 1 tác tố và khảo sát ZF sau khi thực hiện TEST. Nếu bit muốn kiểm tra là 1 thì ZF sẽ
xoá, ngược lại bit kiểm tra là 0 thì ZF đặt
- Ví dụ sau kiểm tra bit 13 trong thanh ghi DX là 0 hay 1:
TEST DX,2000h
JZ BitIs0
BitIs1: ; bit 13 là 1

BitIs0: ; bit 13 là 0

- Ví dụ sau kiểm tra AL là chẵn (0,2,4, ) hay lẻ (1,3,5, )
23
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
TEST AL,1
JZ IsEven
IsOdd: ; AL lẻ

IsEven: ; AL chẵn

2. Lệnh dịch và quay

- Nhóm lệnh này dịch chuyển hoặc xoay vòng các bit về trái/phải trong thanh ghi/vùng nhớ.
Các thao tác này thường dùng để chuyển dữ liệu từ dạng này sang dạng khác hoặc thao tác
trên một khuôn mẫu
a. Lệnh SHL/SAL (Shift Logical/Arithmetic Left)
- Cú pháp:
SHL <đích>,<nguồn>
SAL <đích>,<nguồn>
- Ý nghĩa: Lệnh SHL (hoặc SAL) chuyển các bit trong tác tố đích qua trái về hướng cao, các
bit 0 sẽ được điền vào chỗ trống bên phải. Các cờ S,Z,P có trị theo kết quả, AF không xác
định, CF nhận bit MSB của tác tố chuyển qua. SHL thường được dùng để nhân tác tố với luỹ
thừa 2 vì nhanh hơn là dùng lệnh MUL
- Ví dụ:
SHL DX,1 ; DX * 2
SHL DX,1 ; DX * 4
SHL DX,1 ; DX * 8
SHL DX,1 ; DX * 16
hoặc
MOV CL,4
SHL DX,CL
b. Lệnh SHR/SAR (Shift Logical/Arithmetic Right)
- Cú pháp:
SHR <đích>,<nguồn>
SAR <đích>,<nguồn>
- Ý nghĩa: lệnh này giống như lệnh SHL/SAL nhưng nó sẽ chuyển các bit qua phải thay vì
trái và bit 0 được đưa vào MSB, bit LSB đưa vào CF. Lệnh SHR dùng để chia số không dấu
có luỹ thừa 2, còn lệnh SAR dùng để chia số có dấu có luỹ thừa 2
- Ví dụ:
MOV CL,-4
SAR BX,1 ; BX = -2
24

Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên
c. Lệnh ROL/ROR (Rotate Left/Rotate Right)
- Cú pháp:
ROL <đích>,<số đếm>
ROR <đích>,<số đếm>
- Ý nghĩa: Lệnh này tương tự như SHL và SHR nhưng bit MSB của đích ngoài việc đưa vào
CF còn vòng lại và đưa vào LSB. Chỉ có CF và OF bị ảnh hưởng (nhưng bit LSB của đích
ngoài việc đưa vào CF còn vòng lại và đưa vào MSB. Chỉ có CF và OF bị ảnh hưởng)
d. Lệnh RCL/RCR (Rotate Left through Carry/Rotate Right through Carry)
- Cú pháp:
RCL <đích>,<số đếm>
RCR <đích>,<số đếm>
- Ý nghĩa: Lệnh này tương đương ROL và ROR nhưng bit CF sẽ tham gia vào quá trình quay
của các bit, tức CF sẽ đưa vào LSB của đích và MSB đưa vào CF. Chỉ có CF và OF bị ảnh
hưởng (nhưng bit CF sẽ tham gia vào quá trình quay của các bit, tức CF sẽ đưa vào MSB của
đích và LSB đưa vào CF. Chỉ có CF và OF bị ảnh hưởng)
III.Tham Khảo
<~~ Giáo
Trình VXL
<~~ Bài
tập VXL
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×