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

Bài giảng Kỹ thuật vi xử lý: Chương 3 - Nguyễn Văn Thọ

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 (432.21 KB, 25 trang )

DuyTan University

Kỹ thuật Vi xử lý

ĐẠI HỌC DUY TÂN
KHOA CÔNG NGHỆ THÔNG TIN

CHƯƠNG 3
VI XỬ LÝ INTEL
8086/8088

Nguyễn Văn Thọ
Kha Điện tử viễn thông
Đại học Duy Tân – 2010

Nguyen Van Tho – Duy Tan University.

INTEL 8086

2-2

1


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

CÁC CHÂN TÍN HIỆU 8086


M/IO (S2)
AD0-AD15

DT/R(S1)
Tín hiệu điều
khiển hệ thống

RD
WR (LOCK)
DEN (S0)
SS0
READY
BHE/S7

Tín hiệu điều
khiển CPU

đồng hồ
và nguồn

NMI
INTR
RESET
MN/MX
TEST
CLK
Vcc
GND
GND


16 đường
địa chỉ thấp/dữ liệu

A16/S3
A17/S4
A18/S5
A19/S6

4 đường
bus C/ địa chỉ cao

8086
HOLD(RQ/GT0)
HLDA(RQ/GT1)
INTA(QS1)

Tín hiệu điều
khiển bus

ALE(QS0)

2-3

Nguyen Van Tho – Duy Tan University.

Phân kênh và đệm cho các bus
Vì sao phải phân kênh và khuyếch đại đệm:
• Các bus địa chỉ và dữ liệu dùng chung chân
• Nâng cao khả năng tải của bus


Các vi mạch phân kênh và đệm:
• 74LS373: phân kênh
• 74LS245: đệm dữ liệu 2 chiều
• 74LS244: đệm 3 trạng thái theo 1 chiều

2-4

2


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

Phân kênh và đệm cho các bus
M/IO
RD
WR
BHE/S7
A19/S6

M/IO
RD
WR
BHE
A19

‘244

74LS373

A16
A15

G

A16/S3

A8
A7

8086

A0
G

ALE

G

74LS373

74LS373
D15

AD15

‘245
G DIR


AD8
AD7

D8
D7

‘245
G DIR

AD0

DEN
DT/R

D0
2-5

Nguyen Van Tho – Duy Tan University.

SƠ ĐỒ KHỐI
Các thanh
ghi đa năng
Các thanh ghi
con trỏ
và chỉ số

AX
BX
CX

DX
SP
BP
SI
DI

EU

bus địa chỉ
20 bit

Các thanh ghi
đoạn và con trỏ
lệnh


CS
DS
SS
ES
IP

Bus dữ liệu
ALU 16 bit

Bus trong của CPU
16 bit dữ liệu
20 bit địa chỉ

Logic

điều khiển
bus

Các thanh ghi tạm thời

ALU

BIU

Bus ngoài

Khối điều
khiển
của EU
Hàng đợi lệnh

Thanh ghi cờ

2-6

3


DuyTan University

Kỹ thuật Vi xử lý

CÁC THANH GHI
8 bit cao


Nguyen Van Tho – Duy Tan University.

8 bit thấp

AX

AH

AL

BX

BH

BL

CX

CH

CL

DX

DH

DL

ƒ Thanh ghi chứa AX (accumulator): chứa kết quả của các
phép tính. Kết quả 8 bit được chứa trong AL

ƒThanh ghi cơ sở BX (base): chứa địa chỉ cơ sở
ƒThanh ghi đếm CX (count): dùng để chứa số lần lặp trong các
lệnh lặp (Loop). CL được dùng để chứa số lần dịch hoặc quay
trong các lệnh dịch và quay thanh ghi
ƒThanh ghi dữ liệu DX (data): cùng AX chứa dữ liệu trong các
phép tính nhân chia số 16 bit. DX cịn được dùng để chứa địa
2-7
chỉ cổng trong các lệnh vào ra dữ liệu trực tiếp (IN/OUT)

CÁC THANH GHI

Nguyen Van Tho – Duy Tan University.

•8088/8086 đến 80286 : 16 bits
•80386 trở lên: 32 bits EAX, EBX, ECX, EDX
16 bit cao

16 bit thấp

EAX

AH

AL

EBX

BH

BL


ECX

CH

CL

EDX

DH

DL

ƒ Đảm bảo tính tương thích ngược : các chương trình viết cho
8088/8086 vẫn chạy được trên các bộ xử lý 80386 hoặc cao
hơn
ƒ Các chương trình viết cho 80386 có thể khơng chạy được trên
máy tính có bộ xử lý thấp hơn.
2-8

4


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

CÁC THANH GHI ĐOẠN

Tổ chức của bộ nhớ 1 Mbytes
ã on b nh (segment)
FFFFFH
ắ 216 bytes =64 KB
ắ on 1: địa chỉ đầu 00000 H
¾ Đoạn 2: địa chỉ u 00010 H
ắ on cui cựng: FFFF0 H
ã ễ nh trong đoạn:
¾ địa chỉ lệch: offset
¾ Ơ 1: offset: 0000
¾ ễ cui cựng: offset: FFFF 1FFFFH
ã a ch vt lý:
ắ Segment : offset

Offset=F000
1000

10000H

Thanh ghi đoạn

00000H

2-9

Nguyen Van Tho – Duy Tan University.

CÁC THANH GHI ĐOẠN
Các thanh ghi đoạn: chứa địa chỉ đoạn
FFFFF

58FFF
49000
43FFF
34000
30000
2FFFF
20000
1FFFF
10000
00000

.............
Đoạn dữ liệu phụ
extra segment
Đoạn ngăn xếp
Stack segment

4900

3400

ES

SS

Đoạn mã
Code segment
Đoạn dữ liệu
Data segment


2000

CS

1000

DS

2-10

5


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

CÁC THANH GHI ĐOẠN
Các đoạn có thể chồng lên nhau
FFFFF

s
t
a
c
k

d

a
t
a

c
o
d
e

0A480
0A47F
0A280
0A27F
0A0F0
0A0EF

Stack
0A28

SS

Data
0A0F

DS

090F

CS


Code

090F0
00000

2-11

Nguyen Van Tho – Duy Tan University.

THANH GHI CON TRỎ & CHỈ SỐ
Chứa địa chỉ lệch (offset)
• Con trỏ lệnh IP (instruction pointer): chứa địa chỉ lệnh tiếp theo trong on
mó lnh CS.
ắ CS:IP

ã Con tr c s BP (Base Pointer): chứa địa chỉ của dữ liệu trong đoạn ngăn
xếp SS hoc cỏc on khỏc
ắ SS:BP

ã

Con tr ngn xp SP (Stack Pointer): chứa địa chỉ hiện thời của đỉnh ngăn
xếp
¾ SS:SP

• Chỉ số nguồn SI (Source Index): chứa địa chỉ dữ liệu nguồn trong đoạn dữ
liệu DS trong các lệnh chui
ắ DS:SI

ã Ch s ớch (Destination Index): cha a ch dữ liệu đích trong đoạn dữ liệu

DS trong các lệnh chui
ắ DS:DI

ã SI v DI cú th c s dng như thanh ghi đa năng
• 80386 trở lên 32 bit: EIP, EBP, ESP, EDI, ESI

2-12

6


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

THANH GHI CỜ
15 14

2
O

D I

T

S

Z


A

1

P

0
C

9 bit được sử dụng, 6 cờ trạng thái:
• C hoăc CF (carry flag)): CF=1 khi có nhớ hoặc mượn từ MSB
• P hoặc PF (parity flag): PF=1 (0) khi tổng số bít 1 trong kết quả là chẵn
(lẻ)
• A hoặc AF (auxilary carry flag): cờ nhớ phụ, AF=1 khi có nhớ hoặc
mượn từ một số BCD thấp sang BCD cao
• Z hoặc ZF (zero flag): ZF=1 khi kết quả bằng 0
• S hoặc SF (Sign flag): SF=1 khi kết quả âm
• O hoặc OF (Overflow flag): cờ tràn OF=1 khi kết quả là một số vượt ra
ngồi giới hạn biểu diễn của nó trong khi thực hiện phép tốn cộng trừ
số có dấu

2-13

Nguyen Van Tho – Duy Tan University.

THANH GHI CỜ
15 14

2

O

D I

T

S

Z

A

P

1

0
C

3 cờ điều khiển
• T hoăc TF (trap flag)): cờ bẫy, TF=1 khi CPU làm việc ở chế độ
chạy từng lệnh
• I hoặc IF (Interrupt enable flag): cờ cho phép ngắt, IF=1 thì CPU
sẽ cho phép các yêu cầu ngắt (ngắt che được) được tác động
(Các lệnh: STI, CLI)
• D hoặc DF (direction flag): cờ hướng, DF=1 khi CPU làm việc với
chuỗi ký tự theo thứ tự từ phải sang trái (lệnh STD, CLD)

2-14


7


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

BẢN ĐỒ BỘ NHỚ CỦA MÁY TÍNH PC-IBM

Vùng nhớ mở rộng

FFFFF

Vùng nhớ hệ thống
384 Kbytes

A0000
9FFFF
00000

Vùng nhớ chương trình
640 Kbytes

1 Mbytes
bộ nhớ thực

2-15


Nguyen Van Tho – Duy Tan University.

BẢN ĐỒ BỘ NHỚ CỦA MÁY TÍNH PC-IBM
9FFFF
9FFF0

Vùng nhớ chương trình
MSDOS
Vùng dành cho các
chương trình ứng dụng

Vùng nhớ hệ thống
FFFFF
F0000
E0000

ROM BIOS
ROM BASIC

Vùng để dành
08E30
08490
02530
01160
00700
00500
00400
00000

COMMAND.COM

Device drivers
MSDOS
IO.SYS
Vùng DOS
Vùng BIOS
Các vector ngắt

C8000
C0000
B0000
A0000

Video BIOS ROM
Video RAM (text)
Video RAM (đồ hoạ)

2-16

8


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

CÁC CỔNG XUẤT NHẬP
Địa chỉ: 0000H –FFFFH, M/IO = 0
FFFF

Vùng mở rộng
03F8

COM1

03F0

Điều khiển đĩa mềm

03D0

CGA adapter

0378
0320

LPT1

02F8

COM2

0060

8255

0040

Định thời (8253)


Điều khiển ổ cứng

0020

Điều khiển ngắt

0000

Điều khiển DMA

2-17

Nguyen Van Tho – Duy Tan University.

TẬP LỆNH CỦA 8086
¾ Nhóm lệnh di chuyển dữ liệu
MOV, XCHG, POP, PUSH, POPF, PUSHF, IN, OUT
¾Các lệnh số học :
ADD, ADC, SUB, MUL, IMUL, DIV, IDIV, INC, DEC
¾Các lệnh logic :
AND, OR, NOT, NEG, XOR
¾ Lệnh quay và dịch:
RCL, RCR, ROL, ROR, SAL, SAR, SHL, SHR
¾ Các lệnh thao tác chuỗi
MOVS, MOVSB, MOVSW, CMPS
¾ Các lệnh điều khiển chương trình :
JMP, JE, JZ, JNE or JNZ, JG, JGE, JL, JLE, JA, JB, JAE, JBE, JC,
JNC, CALL, INT, IRET

2-18


9


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH DI CHUYỂN DỮ LIỆU
MOV
• Dùng để chuyển giữa các thanh ghi, giữa 1 thanh ghi và 1 ô nhớ
hoặc chuyển 1 số vào thanh ghi hoặc ô nhớ
• Cú pháp: MOV Đích, nguồn
• Lệnh này khơng tác ng n c
ã Vớ d:
ắMOV AX, BX
ắMOV AH, A
ắMOV AL, [1234H]

2-19

Nguyen Van Tho – Duy Tan University.

NHÓM LỆNH DI CHUYỂN DỮ LIỆU
Lệnh XCHG
• Dùng để hốn chuyển nội dung giữa hai thanh ghi, giữa 1 thanh
ghi và 1 ơ nhớ
• Cú pháp: XCHG Đích, nguồn

• Giới hạn: tốn hạng khơng được là thanh ghi đoạn
• Lệnh này khơng tác động n c
ã Vớ d:
ắXCHG AX, BX
ắXCHG AX, [BX]

2-20

10


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH DI CHUYỂN DỮ LIỆU
Lệnh PUSH







Dùng để cất 1 từ từ thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp
Cú pháp: PUSH Nguồn
Mô tả: SP=SP-2, Nguồn => {SP}
Giới hạn: thanh ghi 16 bit hoặc là 1 từ nhớ

Lệnh ny khụng tỏc ng n c
Vớ d:
ắPUSH BX
ắPUSH PTR[BX]

Lnh PUSHF
ã Cất nội dung của thanh ghi cờ vào ngăn xếp

2-21

Nguyen Van Tho – Duy Tan University.

NHÓM LỆNH THAO TÁC CHUỖI
Lệnh CMPS
• Dùng để so sánh từng phần tử của 2 chuỗi có các phần tử cùng
loại
• Cú pháp: CMPS chuỗi ớch, chui ngun
CMPSB
CMPSW
ã Thc hin:
ắDS:SI l a ch ca phn tử trong chuỗi nguồn
¾ES:DI là địa chỉ của phần tử trong chuỗi đích
¾Sau mỗi lần so sánh SI=SI +/- 1, DI=DI +/- 1 hoặc SI=SI +/- 2,
DI=DI +/- 2 tuỳ thuộc vào cờ hướng DF là 0/1
• Cập nhật cờ AF, CF, OF, PF, SF, ZF

2-22

11



DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH SỐ HỌC
Lệnh ADD







Lệnh cộng hai tốn hạng
Cú pháp: ADD Đích, nguồn
Thực hiện: Đích=Đích + nguồn
Giới hạn: tốn hạng không được là 2 ô nhớ và thanh ghi đoạn
Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF
Vớ d:

ắADD AX, BX
ắADD AX, 40H

Lnh SUB
ã
ã
ã

ã
ã

Lnh tr
Cỳ phỏp: SUB Đích, nguồn
Thực hiện: Đích=Đích - nguồn
Giới hạn: tốn hạng khơng được là 2 ô nhớ và thanh ghi đoạn
Lệnh này thay đổi cờ: AF, CF, OF, PF, SF, ZF

• Ví dụ: SUB AL, 30H

2-23

Nguyen Van Tho – Duy Tan University.

NHÓM LỆNH SỐ HỌC
Lệnh INC






Lệnh cộng 1 vào tốn hạng là thanh ghi hoặc ơ nhớ
Cú pháp: INC Đích
Thực hiện: Đích=Đích + 1
Lệnh này thay đổi cờ: AF, OF, PF, SF, ZF
Vớ d:

ắINC AX


Lnh DEC
ã
ã
ã
ã
ã

Lnh tr 1 t ni dung mt thanh ghi hoặc ơ nhớ
Cú pháp: DEC Đích
Thực hiện: Đích=Đích - 1
Lệnh này thay đổi cờ: AF, OF, PF, SF, ZF
Ví dụ:

¾DEC [BX]
2-24

12


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH SỐ HỌC
Lệnh MUL
• Lệnh nhân số khơng du
ã Cỳ phỏp: MUL ngun

ã Thc hin:
ắ AX=AL* ngun8bit
ắDXAX=AX*ngun16bit
ã Lnh ny thay i c: CF, OF
ã Vớ d:
ắMUL BL

Lnh IMUL
ã nhân số có dấu

2-25

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH SỐ HỌC
Lệnh DIV
• Lệnh chia 2 số khơng dấu
• Cỳ phỏp: DIV ngun
ã Thc hin:
ắAL = thng (AX / nguồn8bit) ; AH=dư (AX / nguồn8bit)
¾AX = thương (DXAX / nguồn16bit) ; DX=dư (DXAX /
nguồn16bit)
• Lệnh này khơng thay đổi c
ã Vớ d:
ắDIV BL

Lnh IDIV
ã chia 2 s cú du

2-26


13


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH SỐ HỌC
Lệnh CMP
• Lệnh so sánh 2 byte hoặc 2 từ
• Cú pháp: CMP Đích, nguồn
• Thực hiện:
¾Đích = nguồn : CF=0 ZF=1
¾Đích> nguồn : CF=0 ZF=0
¾Đích < nguồn : CF=1 ZF=0
• Giới hạn: tốn hạng phải cùng độ dài và khơng được là 2 ơ nhớ
• Chú ý : Lệnh CMP thường đứng trước các lệnh nhảy có điều
kiện.

2-27

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH LOGIC, DỊCH & QUAY
Lệnh AND








Lệnh AND logic 2 tốn hạng
Cú pháp: AND Đích, nguồn
Thực hiện: Đích=Đích And nguồn
Giới hạn: tốn hạng không được là 2 ô nhớ hoặc thanh ghi đoạn
Lệnh này thay đổi cờ: PF, SF, ZF và xoá cờ CF, OF
Ví dụ:
¾AND BL, 0FH

Lệnh XOR, OR: tương tự như lệnh AND
Lệnh NOT: đảo từng bit của toán hạng
Lệnh NEG: xác định số bù 2 của toán hạng

2-28

14


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH LOGIC, DỊCH & QUAY
Lệnh RCL

• Lệnh quay trái thơng qua cờ nhớ
• Cú pháp: RCL Đích, CL (với số lần quay lớn hơn 1)

RCLĐích, 1
RCL Đích, Số lần quay (80286 trở lên)
• Thực hiện: quay trái đích CL lần
• Đích là thanh ghi (trừ thanh ghi đoạn) hoặc ơ nhớ
• Lệnh này thay đổi cờ: CF, OF
CF

MSB

LSB

2-29

Nguyen Van Tho – Duy Tan University.

NHÓM LỆNH LOGIC, DỊCH & QUAY
Lệnh ROL
• Lệnh quay trái
• Cú pháp: ROL Đích, CL (với số lần quay lớn hơn 1)

ROL Đích, 1
ROL Đích, Số lần quay (80286 trở lên)
• Thực hiện: quay trái đích CL lần
• Đích là thanh ghi (trừ thanh ghi đoạn) hoặc ơ nhớ
• Lệnh này thay đổi cờ: CF, OF
CF


MSB

LSB

2-30

15


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH LOGIC, DỊCH & QUAY
Lệnh SHL
• Lệnh dịch trái số học
• Cú pháp: SHL Đích, CL (với số lần dịch lớn hơn 1)
SHL Đích, 1
SHL Đích, số lần dịch (80286 trở lên)
• Thực hiện: dịch trái đích CL bit tương đương với Đích=Đích*2CL
• Lệnh này thay đổi cờ SF, ZF, PF

CF

LSB

MSB


0

2-31

Nguyen Van Tho – Duy Tan University.

NHÓM LỆNH LOGIC, DỊCH & QUAY
Lệnh SHR
• Lệnh dịch phải logic
• Cú pháp: SHR Đích, CL (với số lần dịch lớn hơn 1)

SHR Đích, 1
hoặc SHR Đích, số lần dịch (80286 trở lên)
• Thực hiện: dịch phải đích CL bit
• Lệnh này thay đổi cờ SF, ZF, PF, CF mang giá trị của LSB

MSB

LSB

CF

0
Chú ý:
Trong các lệnh dịch và quay, toán hạng không được là thanh ghi đoạn

2-32

16



DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

NHĨM LỆNH XUẤT/ NHẬP CỔNG
Lệnh IN
• Dùng để đọc 1 byte hoặc 2 byte dữ liệu từ cổng vào thanh ghi AL hoặc
AX
• Cú pháp: IN Acc, Port
• Lệnh ny khụng tỏc ng n c
ã Vớ d:
ắ IN AX, 00H
ắ IN AL, 0F0H
ắ IN AX, DX

Lnh OUT
ã
ã
ã
ã

Dựng a 1 byte hoặc 2 byte dữ liệu từ thanh ghi AL hoặc AX ra cổng
Cú pháp: OUT Port, Acc
Lệnh này khơng tác động đến cờ
Ví dụ:
¾ OUT 00H, AX
¾ OUT F0H, AL

2-33
¾ OUT DX, AX

Nguyen Van Tho – Duy Tan University.

NHÓM LỆNH THAO TÁC CHUỖI
Các lệnh di chuyển chuỗi MOVS, MOVSB, MOVSW
• Dùng để chuyển một phần tử của chuỗi này sang một chuỗi khác
• Cú pháp: MOVS chuỗi đích, chui ngun
MOVSB
MOVSW
ã Thc hin:
ắ DS:SI l a ch ca phn tử trong chuỗi nguồn
¾ ES:DI là địa chỉ của phần tử trong chuỗi đích
¾ Sau mỗi lần chuyển SI=SI +/- 1, DI=DI +/- 1 hoặc SI=SI +/- 2, DI=DI +/2 tuỳ thuộc vào cờ hướng DF là 0/1

• Lệnh này khơng tác động đến cờ
• Ví dụ: MOVS byte1, byte2

2-34

17


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.


NHĨM LỆNH ĐIỀU KHIỂN
¾ Lệnh nhảy khơng điều kiện : JMP
¾ Lệnh nhảy có điều kiện :
¾Lệnh vịng lặp : LOOP
¾Lệnh gọi chương trình con : CALL
¾Lệnh xử lý ngắt : INT, IRET

2-35

Nguyen Van Tho – Duy Tan University.

LỆNH NHẢY KHÔNG ĐIỀU KIỆN JMP
Dùng để nhảy tới một địa chỉ trong bộ nhớ
3 loại: nhảy ngắn, gần và xa
• Lệnh nhảy ngắn (short jump)
¾Phạm vi nhảy: -128 đến 127 bytes so với lệnh tiếp theo lệnh
JMP
¾Thực hiện: IP=IP + độ lệch
¾Ví dụ:
XOR BX, BX
Nhan: MOV AX, 1
ADD AX, BX
JMP SHORT Nhan

2-36

18


DuyTan University


Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

LỆNH NHẢY KHƠNG ĐIỀU KIỆN JMP
• Lệnh nhảy gần (near jump)
¾Phạm vi nhảy: ± 32 Kbytes so với lệnh tiếp theo lệnh JMP
¾Ví dụ:

XOR BX, BX

XOR CX, CX

XOR CX, CX

MOV AX, 1

MOV AX, 1

ADD AX, BX

ADD AX, BX

ADD AX, BX

JMP NEAR Nhan

JMP NEAR PTR BX


JMP WORD PTR [BX]

Nhan: MOV AX, 1

Thực hiện: IP=IP+ độ lệch
E 9

IP=BX

Độ lệchLo Độ lệchHi

IP=[BX+1] [BX]
Nhảy gián tiếp

2-37

Nguyen Van Tho – Duy Tan University.

LỆNH NHẢY KHễNG IU KIN JMP
ã Lnh nhy xa (far jump)
ắ di lệnh 5 bytes đối với nhảy tới nhãn:
¾Phạm vi nhảy: nhảy trong 1 đoạn mã hoặc nhảy sang đoạn
mã khác
¾Ví dụ:
EXTRN Nhan: FAR
Next: MOV AX, 1
ADD AX, BX
JMP FAR PTR Next
........
JMP FAR Nhan

Thực hiện: IP=IP của nhãn
CS=CS của nhãn

XOR CX, CX
MOV AX, 1
ADD AX, BX
JMP DWORD PTR [BX]
IP = [BX+1][BX]
CS= [BX+3][BX+2]

2-38

19


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

LỆNH NHẢY KHƠNG ĐIỀU KIỆN JMP
Tóm tắt :
FFFFFH

Đoạn mã 2
Nhảy xa
+127

Đoạn mã 1


Nhảy ngắn

JMP

Nhảy gần

-128

00000H

2-39

Nguyen Van Tho – Duy Tan University.

LỆNH NHẢY CĨ ĐIỀU KIỆN
Đối với số có dấu :
JE or JZ, JNE or JNZ, JG, JGE, JL, JLE , JC, JNC ...
Đối với số không dấu :
JA, JB, JAE, JBE , JC, JNC ...
Nhảy được thực hiện phụ thuộc vào các cờ
Là các lệnh nhảy ngắn
Ví dụ:
Nhan1: XOR BX, BX
Nhan2: MOV AX, 1
CMP AL, 10H
JNE Nhan1
JE Nhan2

2-40


20


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

LỆNH VÒNG LẶP
LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ
Là lệnh phối hợp giữa DEC CX và JNZ
XOR AL, AL

XOR AL, AL

XOR AL, AL

MOV CX, 16

MOV CX, 16

MOV CX, 16

Lap: INC AL
LOOP Lap

Lặp đến khí CX=0


Lap: INC AL

Lap: INC AL

CMP AL, 10

CMP AL, 10

LOOPE Lap

LOOPNE Lap

Lặp đến khí CX=0
hoặc AL<>10

Lặp đến khí CX=0
hoặc AL=10

2-41

Nguyen Van Tho – Duy Tan University.

LỆNH GỌI CHƯƠNG TRÌNH CON CALL
Dùng để gọi chương trình con
Có 2 loại: CALL gần và CALL xa
• CALL gần (near call): tương tự như nhảy gần

¾Gọi chương trình con ở trong cùng một đoạn mã
Tong PROC NEAR
ADD AX, BX

ADD AX, CX
RET
Tong ENDP
...
CALL Tong
Cất IP vào ngăn xếp
IP=IP + dịch chuyển
RET: lấy IP từ ngăn xếp

Tong PROC NEAR
ADD AX, BX
ADD AX, CX
RET
Tong ENDP
...
MOV BX, OFFSET Tong
CALL BX

CALL WORD PTR [BX]

Cất IP vào ngăn xếp
IP= BX
RET: lấy IP từ ngăn xếp

Cất IP vào ngăn xếp
IP= [BX+1] [BX]
RET: lấy IP từ ngăn 2-42
xếp

21



DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

LỆNH GỌI CHƯƠNG TRÌNH CON CALL
• CALL xa (far call): tương tự như nhảy xa

¾Gọi chương trình con ở ngoài đoạn mã
Tong PROC FAR

CALL DWORD PTR [BX]

ADD AX, BX
ADD AX, CX
RET
Tong ENDP
...
CALL Tong
Cất CS vào ngăn xếp
Cất IP vào ngăn xếp
IP = [BX+1][BX]
CS= [BX+3][BX+2]
RET: lấy IP từ ngăn xếp
lấy CS từ ngăn xếp

Cất CS vào ngăn xếp

Cất IP vào ngăn xếp
IP=IP của Tong
CS =CS của Tong
RET: lấy IP từ ngăn xếp
lấy CS từ ngăn xếp

2-43

Nguyen Van Tho – Duy Tan University.

LỆNH NGẮT INT & IRET
INT gọi chương trình con phục vụ ngắt (CTCPVN)
Bảng vector ngắt: 1 Kbytes 00000H đến 003FF H





256 vector ngắt
1 vector 4 bytes, chứa IP và CS của CTCPVN
32 vector đầu dành riêng cho Intel
224 vector sau dành cho người dùng

Cú pháp: INT Number
Ví dụ: INT 21H gọi CTCPVN của DOS

2-44

22



DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

LỆNH NGẮT INT & IRET
Thực hiện INT:






Cất thanh ghi cờ vào ngăn xếp
IF=0 (cấm các ngắt khác tác động), TF=0 (chạy suốt)
Cất CS vào ngăn xếp
Cất IP vào ngăn xếp
IP=[N*4], CS=[N*4+2]

Gặp IRET:
• Lấy IP từ ngăn xếp
• Lấy CS từ ngăn xếp
• Lấy thanh ghi cờ từ ngăn xếp

2-45

Nguyen Van Tho – Duy Tan University.


DỊCH CHƯƠNG TRÌNH

2-46

23


DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

KHUNG CHƯƠNG TRÌNH
CODE segment para public ‘code’
assume cs:code,ds:data,ss:stack
<Các chương trình con>
Main PROC
<Thân chương trình chính>
<Kết thúc, trở về DOS>
Main ENDP
CODE ENDS
DATA segment para public 'data‘
<Các khai báo biến và hằng>
DATA ENDS
STACK segment stack 'stack‘
<Khai báo vùng đệm>
STACK ENDS
END Main
2-47


.MODEL SMALL
.STACK <số byte>
.DATA
< Các khai báo biến >
.CODE
Main PROC
< Thân chương trình chính>
<Kết thúc, trở về DOS>
Main ENDP
< Khai báo chương trình con>
END

Nguyen Van Tho – Duy Tan University.

LẬP TRÌNH CHO 8086
Ví dụ 1 : Hiện chữ
“Hello” ra màn hình

.Model
.Stack
.Data

Small
100
MSG

.Code
MAIN


MAIN

DB

‘Hello! $’

Proc
;khới đầu cho DS
MOV
AX, @data
MOV
DS, AX
;Hiển thị lời chào dùng hàm 9 ngắt 21h
MOV
AH,9
LEA
DX, MSG
INT
21H
;trở về DOS dùng hàm 4Ch,ngắt 21h
MOV
AH, 4CH
INT
21H
Endp
END MAIN
2-48

24



DuyTan University

Kỹ thuật Vi xử lý

Nguyen Van Tho – Duy Tan University.

LẬP TRÌNH CHO 8086
Ví dụ 2 : Hiển thị 50 kí tự ‘$’ trên màn hình

khởi tạo bộ đếm

cơng việc

giảm bộ đếm đi 1

bộ đếm=0?

Đ

S

.Model Small
.Stack 100
.Data
MSG DB
‘Hello! $’
.Code
MAIN Proc
MOV CX, 50

;số lần lặp
MOV AH,2
;hàm hiển thị
MOV DL,’$’ ;DL chứa ký tự cần hiển thị
HIEN: INT 21H
; Hiển thị
LOOP HIEN
;trở về DOS dùng hàm 4Ch,ngắt 21h
MOV AH, 4CH
INT
21H
MAIN Endp
END MAIN
2-49

Nguyen Van Tho – Duy Tan University.

LẬP TRÌNH CHO 8086
Ví dụ 3 : Nhập chuỗi ký tự từ bàn phím cho đến khi người dùng ấn
phím Enter. Đếm và hiển thị số ký tự đã nhập ( < 10 ký tự).
S
Điều kiện

Đ
công việc

XOR CX, CX
MOV AH,1
TIEP: INT 21H
CMP AL, 13

JE End_while
INC CX
JMP TIEP
End_while:
MOV AH,2
MOV DX,CX
ADD DL,30H
INT 21H

;CX=0
;hàm đọc ký tự từ bàn phím
; đọc một ký tự vào AL
; đọc CR?
; đúng, thoát
; sai, thêm 1 ký tự vào tổng
; đọc tiếp
; hàm hiển thị 1 ký tự
; đổi sang mã ASCII
; hiển thị

¾ Cải tiến chương trình để hiển thị số ký tự >10 ký tự

2-50

25


×