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