Microprocessor final ver1_part2

Post on 07-Jul-2015

71 views 0 download

Transcript of Microprocessor final ver1_part2

1/Chapter2© DHBK 2005

N i dung môn h cộ ọN i dung môn h cộ ọ

1. Gi i thi u chung v h vi x lýớ ệ ề ệ ử2. B vi x lý Intel 8088/8086ộ ử3. L p trình h p ng cho 8086ậ ợ ữ4. T ch c vào ra d li uổ ứ ữ ệ5. Ng t và x lý ng tắ ử ắ6. Truy c p b nh tr c ti p DMAậ ộ ớ ự ế7. Các b vi x lý trên th c tộ ử ự ế

2/Chapter2© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

3/Chapter2© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ S đ kh iơ ồ ố Các thanh ghi đa năng Các thanh ghi đo nạ Các thanh ghi con tr và ch sỏ ỉ ố Thanh ghi cờ Hàng đ i l nhợ ệ

• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

4/Chapter2© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ S đ kh iơ ồ ố Các thanh ghi đa năng Các thanh ghi đo nạ Các thanh ghi con tr và ch sỏ ỉ ố Thanh ghi cờ Hàng đ i l nhợ ệ

• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

5/Chapter2© DHBK 2005

S đ kh i 8088/8086ơ ồ ốS đ kh i 8088/8086ơ ồ ố

CSDS

ESIP

BXAX

CXDXSPBP

DISI SS

ALU

Khối điều khiển

của EU

Logic điều khiển

bus

∑Các thanh ghi đa năng

Các thanh ghicon trỏvà chỉ số

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

Các thanh ghi tạm thời

Thanh ghi cờ

Hàng đợi lệnh

Bus ngoài

Bus trong của CPU16 bit dữ liệu20 bit địa chỉ

bus địa chỉ 20 bitEU BIU

Bus dữ liệu ALU 16 bit

6/Chapter2© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ S đ kh iơ ồ ố Các thanh ghi đa năng Các thanh ghi đo nạ Các thanh ghi con tr và ch sỏ ỉ ố Thanh ghi cờ Hàng đ i l nhợ ệ

• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

7/Chapter2© DHBK 2005

Các thanh ghi đa năng c a 8088/8086ủCác thanh ghi đa năng c a 8088/8086ủ

• 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 , ví d c a b ng dùng ơ ở ứ ị ỉ ơ ở ụ ủ ảtrong l nh XLAT (Translate)ệ

• 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 ch c ng trong các ố ượ ể ứ ị ỉ ổl nh vào ra d li u tr c ti p (IN/OUT)ệ ữ ệ ự ế

AX ALAH

BX BLBH

CX CLCH

DX DLDH

8 bit cao 8 bit th pấ

•8088/8086 đ n 80286 : 16 bitsế

•80386 tr lên: 32 bits EAX, EBX, ởECX, EDX

8/Chapter2© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ S đ kh iơ ồ ố Các thanh ghi đa năng Các thanh ghi đo nạ Các thanh ghi con tr và ch sỏ ỉ ố Thanh ghi cờ Hàng đ i l nhợ ệ

• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

9/Chapter2© DHBK 2005

Các thanh ghi đo nạCác thanh ghi đo nạ

• T ch c c a b nh 1 Mbytesổ ứ ủ ộ ớ Đo n b nh (segment)ạ ộ ớ

216 bytes =64 KBĐo n 1: đ a ch đ u 0000ạ ị ỉ ầ 0 HĐo n 2: đ a ch đ u 0001ạ ị ỉ ầ 0 HĐo n cu i cùng: FFFFạ ố 0 H

Ô nh trong đo n:ớ ạđ a ch l ch: offsetị ỉ ệÔ 1: offset: 0000Ô cu i cùng: offset: FFFFố

Đ a ch v t lý:ị ỉ ậSegment : offset

00000H

FFFFFH

1FFFFH

10000H

1F000H

1 0 0 0

Offset=F000

Thanh ghi đo nạĐ a ch v t lý=Segment*16 + offsetị ỉ ậ

Ch đ th c (real mode)ế ộ ự

10/Chapter2

© DHBK 2005

Các thanh ghi đo nạCác thanh ghi đo nạ

• Ví d : Đ a ch v t lý 12345Hụ ị ỉ ậ

• Ví d : Cho đ a ch đ u c a đo n: 49000 H, xác đ nh đ a ch cu iụ ị ỉ ầ ủ ạ ị ị ỉ ố

Đ a ch đo nị ỉ ạ Đi ch l chạ ỉ ệ

1000 H 2345H

1200 H 0345H

1004 H ?

0300 H ?

11/Chapter2

© DHBK 2005

Các thanh ghi đo nạCác thanh ghi đo nạ

• Các thanh ghi đo n: ch a đ a ch đo nạ ứ ị ỉ ạ

00000

FFFFF

Đoạn dữ liệuData segment

Đoạn mãCode segment

Đoạn ngăn xếpStack segment

Đoạn dữ liệu phụextra segment

10000

200001FFFF

300002FFFF

34000

43FFF49000

58FFF

1 0 0 0 DS

2 0 0 0 CS

3 4 0 0 SS

4 9 0 0 ES

.............

12/Chapter2

© DHBK 2005

Các thanh ghi đo nạCác thanh ghi đo nạ

• Các đo n ch ng nhauạ ồ

00000

FFFFF

Data

Code

Stack

090F0

0A0F00A0EF

0A2800A27F

0 9 0 F CS

0 A 0 F DS

0 A 2 8 SS

0A4800A47Fc

ode

data

stack

13/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ S đ kh iơ ồ ố Các thanh ghi đa năng Các thanh ghi đo nạ Các thanh ghi con tr và ch sỏ ỉ ố Thanh ghi cờ Hàng đ i l nhợ ệ

• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

14/Chapter2

© DHBK 2005

Các thanh ghi con tr và ch sỏ ỉ ốCác thanh ghi con tr và 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 đo n mã l nh 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 ho c các đo n khácạ ế ặ ạ

SS:BP Con tr ngăn x p 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 chu iạ ữ ệ ệ ỗ

DS:SI Ch s đích (Destination Index): ch a đ a ch d li u đích ỉ ố ứ ị ỉ ữ ệ

trong đo n d li u DS trong các l nh chu iạ ữ ệ ệ ỗDS:DI

SI và DI có th đ c s d ng nh thanh ghi đa năngể ượ ử ụ ư 80386 tr lên 32 bit: EIP, EBP, ESP, EDI, ESIở

15/Chapter2

© DHBK 2005

Các thanh ghi con tr và ch sỏ ỉ ốCác thanh ghi con tr và ch sỏ ỉ ố

• Thanh ghi đo n và thanh ghi l ch ng m đ nhạ ệ ầ ị

Segment Offset Chú thích

CS IP Đ a ch l nhị ỉ ệ

SS SP ho c BPặ Đ a ch ngăn x pị ỉ ế

DS BX, DI, SI, s 8 bit ốho c s 16 bitặ ố

Đ a ch d li uị ỉ ữ ệ

ES DI Đ a ch chu i ị ỉ ỗđích

16/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ S đ kh iơ ồ ố Các thanh ghi đa năng Các thanh ghi đo nạ Các thanh ghi con tr và ch sỏ ỉ ố Thanh ghi cờ Hàng đ i l nhợ ệ

• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

17/Chapter2

© DHBK 2005

Thanh ghi c (Flag Register)ờThanh ghi c (Flag Register)ờ

• 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 ngoài gi i h n bi u di n c a nó trong khi th c ố ượ ớ ạ ể ễ ủ ựhi n phép toán c ng tr s có d uệ ộ ừ ố ấ

1 0215 14

CPAZSTIDO

18/Chapter2

© DHBK 2005

Thanh ghi c (Flag Register)ờThanh ghi c (Flag Register)ờ

• 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)ớ ỗ ự ứ ự ừ ả ệ

1 0215 14

CPAZSTIDO

19/Chapter2

© DHBK 2005

Thanh ghi c (Flag Register)ờThanh ghi c (Flag Register)ờ

• Ví d : ụ

SF=0 vì msb trong k t qu =0ế ả PF=1 vì có 0 bít c a t ng b ng 1ủ ổ ằ ZF=1 vì k t q a thu đ c là 0ế ủ ượ CF=1 vì có nh t bít msb trong phép c ngớ ừ ộ OF=1 vì có tràn trong phép c ng 2 s âmộ ố

80h +

80h

100h

20/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ S đ kh iơ ồ ố Các thanh ghi đa năng Các thanh ghi đo nạ Các thanh ghi con tr và ch sỏ ỉ ố Thanh ghi cờ Hàng đ i l nhợ ệ

• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

21/Chapter2

© DHBK 2005

Hàng đ i l nhợ ệHàng đ i l nhợ ệ

• 4 bytes đ i v i 8088 và 6 bytes đ i v i 8086ố ớ ố ớ• X lý pipelineử

F1 D1 E1 F2 D2 E2 F3 D3 E3

F1 D1F2

E1D2F3

E2D3 E3

Không có pipelining

Có pipelining

22/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

23/Chapter2

© DHBK 2005

Intel 8088Intel 8088

• 16-bit processor• introduced in 1979• 3 µm, 5 to 8 MHz, 29

KTOR, 0.33 to 0.66 MIPS

24/Chapter2

© DHBK 2005

Intel 8088Intel 8088

•Ch đ Min và ch đ Max:ế ộ ế ộ

MN/MX = 1 ch đ Minế ộ = 0 ch đ Max v i bus ế ộ ớcontroller 8288

25/Chapter2

© DHBK 2005

Intel 8086Intel 8086

26/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

27/Chapter2

© DHBK 2005

B n đ b nh c a máy tính IBM PCả ồ ộ ớ ủB n đ b nh c a máy tính IBM PCả ồ ộ ớ ủ

00000

A00009FFFF

FFFFF

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

Vùng nhớ hệ thống484 Kbytes

Vùng nhớ mở rộng

1 Mbytes b nh th cộ ớ ự

28/Chapter2

© DHBK 2005

B n đ vùng nh ch ng trìnhả ồ ớ ươB n đ vùng nh ch ng trìnhả ồ ớ ươ

00000

02530

Các vector ng tắ00400005000070001160

08490

9FFF09FFFF

Vùng BIOSVùng DOSIO.SYSMSDOS

Device drivers (mouse.sys)COMMAND.COM

MSDOS

08E30

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

29/Chapter2

© DHBK 2005

B n đ vùng nh h th ngả ồ ớ ệ ốB n đ vùng nh h th ngả ồ ớ ệ ố

A0000Video RAM (đ ho )ồ ạ

B0000

F0000FFFFF

Video BIOS ROM

ROM BIOS

Vùng đ dànhể

E0000ROM BASIC

C0000C8000

Video RAM (text)

30/Chapter2

© DHBK 2005

Các c ng vào raổCác c ng vào raổ

• Đ a ch : 0000H –FFFFH, M/IO =0ị ỉ

0000

0320

Đi u khi n DMAề ể00200040006002F8

0378

FFFF

Đi u khi n ng tề ể ắĐ nh th i (8253)ị ờ8255COM2

Đi u khi n c ngề ể ổ ứLPT103D0

Vùng m r ngở ộ

03F003F8

CGA adapterĐi u khi n đĩa m mề ể ề COM1

31/Chapter2

© DHBK 2005

Trình t kh i đ ngự ở ộTrình t kh i đ ngự ở ộ

• Khi b t ngu n ho c nh n Resetậ ồ ặ ấ CS=FFFFh và IP=0000 => đ a ch FFFF0 ch a ch th chuy n ị ỉ ứ ỉ ị ể

đi u khi n đ n đi m kh i đ u c a các ch ng trình BIOSề ể ế ể ớ ầ ủ ươ Các ch ng trình BIOS ki m tra h th ng và b nhươ ể ệ ố ộ ớ Các ch ng trình BIOS kh i t o b ng vector ng t và vùng ươ ở ạ ả ắ

d li u BIOSữ ệ BIOS n p ch ng trình kh i đ ng (boot program) t đĩa vào ạ ươ ở ộ ừ

b nhộ ớ Ch ng trình kh i đ ng n p h đi u hành t đĩa vào b nhươ ở ộ ạ ệ ề ừ ộ ớ H đi u hành n p các ch ng trình ng d ngệ ề ạ ươ ứ ụ

32/Chapter2

© DHBK 2005

Vùng nh dành riêng c a 8088/8086ớ ủVùng nh dành riêng c a 8088/8086ớ ủ

00000Các vector ng tắ

003FF

FFFF0Reset Bootstrapprogram jump

FFFFF

33/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ

Ch đ đ a ch thanh ghiế ộ ị ỉ Ch đ đ a ch t c thìế ộ ị ỉ ứ Ch đ đ a ch tr c ti pế ộ ị ỉ ự ế Ch đ đ a ch gián ti p qua thanh ghiế ộ ị ỉ ế Ch đ đ a ch t ng đ i c sế ộ ị ỉ ươ ố ơ ở Ch đ đ a ch t ng đ i ch sế ộ ị ỉ ươ ố ỉ ố Ch đ đ a ch t ng đ i ch s c sế ộ ị ỉ ươ ố ỉ ố ơ ở

• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

34/Chapter2

© DHBK 2005

Ch đ đ a ch thanh ghiế ộ ị ỉCh đ đ a ch thanh ghiế ộ ị ỉ(Register Addressing Mode)(Register Addressing Mode)

• Dùng các thanh ghi nh là các toán h ngư ạ• T c đ th c hi n l nh caoố ộ ự ệ ệ

• Ví d :ụ MOV BX, DX ; Copy n i dung DX vào BXộ MOV AL, BL ; Copy n i dung BL vào ALộ MOV AL, BX ; không h p l vì các thanh ghi có kích th c ợ ệ ướ

khác nhau MOV ES, DS ; không h p l (segment to segment)ợ ệ MOV CS, AX ; không h p l vì CS không đ c dùng làm ợ ệ ượ

thanh ghi đích

ADD AL, DL ; C ng n i dung AL và DL r i đ a vào ALộ ộ ồ ư

35/Chapter2

© DHBK 2005

Ch đ đ a ch t c thìế ộ ị ỉ ứCh đ đ a ch t c thìế ộ ị ỉ ứ(Immediate Addressing Mode)(Immediate Addressing Mode)

• Toán h ng đích là thanh ghi ho c ô nhạ ặ ớ• Toán h ng ngu n là ạ ồ h ng sằ ố• Dùng đ n p h ng s vào thanh thi (tr thanh ghi ể ạ ằ ố ừ

đo n và thanh c ) ho c vào ô nh trong đo n d li u ạ ờ ặ ớ ạ ữ ệDS

• Ví d :ụ MOV BL, 44 ; Copy s th p phân 44 vào thanh ghi BLố ậ MOV AX, 44H ; Copy 0044H vào thanh ghi AX MOV AL, ‘A’ ; Copy mã ASCII c a A vào thanh ghi ALủ MOV DS, 0FF0H ; không h p l ợ ệ MOV AX, 0FF0H ; MOV DS, AX ;

MOV [BX], 10 ; copy s th p phân 10 vào ô nh DS:BXố ậ ớ

36/Chapter2

© DHBK 2005

Ch đ đ a ch tr c ti pế ộ ị ỉ ự ếCh đ đ a ch tr c ti pế ộ ị ỉ ự ế(Direct Addressing Mode)(Direct Addressing Mode)

• M t toán h ng là đ a ch ô nh ch a d li uộ ạ ị ỉ ớ ứ ữ ệ• Toán h ng kia ch có th là thanh ghiạ ỉ ể

• Ví d :ụ MOV AL, [1234H] ; Copy nội dung ô nhớ có địa chỉ DS:1234 vào AL MOV [ 4320H ], CX ; Copy nội dung của CX vào 2 ô nhớ liên tiếp DS:

4320 và DS: 4321

37/Chapter2

© DHBK 2005

Ch đ đ a ch gián ti p qua thanh ghi ế ộ ị ỉ ếCh đ đ a ch gián ti p qua thanh ghi ế ộ ị ỉ ế(Register indirect Addressing Mode)(Register indirect Addressing Mode)

• M t toán h ng là thanh ghi ch a đ a ch c a 1 ô nh ộ ạ ứ ị ỉ ủ ớd li uữ ệ

• Toán h ng kia ch có th là thanh ghiạ ỉ ể

• Ví d :ụ MOV AL, [BX] ; Copy nội dung ô nhớ có địa chỉ DS:BX vào AL MOV [ SI ], CL ; Copy nội dung của CL vào ô nhớ có địa chỉ DS:SI MOV [ DI ], AX ; copy nội dung của AX vào 2 ô nhớ liên tiếp DS: DI và

DS: (DI +1)

38/Chapter2

© DHBK 2005

Ch đ đ a ch t ng đ i c s ế ộ ị ỉ ươ ố ơ ởCh đ đ a ch t ng đ i c s ế ộ ị ỉ ươ ố ơ ở(Based relative Addressing Mode)(Based relative Addressing Mode)

• M t toán h ng là thanh ghi c s BX, BP và các ộ ạ ơ ởh ng s bi u di n giá tr d ch chuy nằ ố ể ễ ị ị ể

• Toán h ng kia ch có th là thanh ghiạ ỉ ể

• Ví d :ụ MOV CX, [BX]+10 ; Copy nội dung 2 ô nhớ liên tiếp có địa chỉ DS:BX+10

và DS:BX+11 vào CX MOV CX, [BX+10] ; Cách viết khác của lệnh trên MOV AL, [BP]+5 ; copy nội dung của ô nhớ SS:BP+5 vào thanh ghi AL

39/Chapter2

© DHBK 2005

Ch đ đ a ch t ng đ i ch s ế ộ ị ỉ ươ ố ỉ ốCh đ đ a ch t ng đ i ch s ế ộ ị ỉ ươ ố ỉ ố(Indexed relative Addressing Mode)(Indexed relative Addressing Mode)

• M t toán h ng là thanh ghi ch s SI, DI và các h ng ộ ạ ỉ ố ằs bi u di n giá tr d ch chuy nố ể ễ ị ị ể

• Toán h ng kia ch có th là thanh ghiạ ỉ ể

• Ví d :ụ MOV AX, [SI]+10 ; Copy nội dung 2 ô nhớ liên tiếp có địa chỉ DS:SI+10

và DS:SI+11 vào AX MOV AX, [SI+10] ; Cách viết khác của lệnh trên MOV AL, [DI]+5 ; copy nội dung của ô nhớ DS:DI+5 vào thanh ghi AL

40/Chapter2

© DHBK 2005

Ch đ đ a ch t ng đ i ch s c sế ộ ị ỉ ươ ố ỉ ố ơ ởCh đ đ a ch t ng đ i ch s c sế ộ ị ỉ ươ ố ỉ ố ơ ở( ( Based Indexed relative Addressing ModeBased Indexed relative Addressing Mode))

• Ví d :ụ MOV AX, [BX] [SI]+8 ; Copy nội dung 2 ô nhớ liên tiếp có địa chỉ

DS:BX+SI+8 và DS:BX+SI+9 vào AX MOV AX, [BX+SI+8] ; Cách viết khác của lệnh trên MOV CL, [BP+DI+5] ; copy nội dung của ô nhớ SS:BP+DI+5 vào thanh

ghi CL

41/Chapter2

© DHBK 2005

Tóm t t các ch đ đ a chắ ế ộ ị ỉTóm t t các ch đ đ a chắ ế ộ ị ỉChế độ địa chỉ Toán hạng Thanh ghi đoạn ngầm định

Thanh ghi Thanh ghi

Tức thì Dữ liệu

Trực tiếp [offset] DS

Gián tiếp qua thanh ghi [BX][SI][DI]

DSDSDS

Tương đối cơ sở [BX] + dịch chuyển[BP] + dịch chuyển

DSSS

Tương đối chỉ số [DI] + dịch chuyển[SI] + dịch chuyển

DSDS

Tương đối chỉ số cơ sở [BX] + [DI]+ dịch chuyển[BX] + [SI]+ dịch chuyển[BP] + [DI]+ dịch chuyển[BP] + [SI]+ dịch chuyển

DSDSSSSS

42/Chapter2

© DHBK 2005

B ch đ ng m đ nh thanh ghi đo nỏ ế ộ ầ ị ạB ch đ ng m đ nh thanh ghi đo nỏ ế ộ ầ ị ạ(Segment override)(Segment override)

• Ví d :ụ MOV AL, [BX]; Copy nội dung ô nhớ có địa chỉ DS:BX vào AL MOV AL, ES:[BX] ; Copy nội dung ô nhớ có địa chỉ ES:BX vào AL

43/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

44/Chapter2

© DHBK 2005

Cách mã hoá l nh c a 8086ệ ủCách mã hoá l nh c a 8086ệ ủ

• M t l nh có đ dài t 1 đ n 6 byteộ ệ ộ ừ ế

Opcode1-2 byte

MOD-REG-R/M0-1 byte

D ch chuy nị ể0-2 byte

T c thìứ0-2 byte

D W

Opcode W=0 d li u 1 byteữ ệ

W=1 d li u 2 byteữ ệ

D=1 d li u đi đ n thanh ghi cho b i 3 bit REGữ ệ ế ở

D=0 d li u đi t thanh ghi cho b i 3 bit REGữ ệ ừ ở

45/Chapter2

© DHBK 2005

Cách mã hoá l nh c a 8086ệ ủCách mã hoá l nh c a 8086ệ ủ

MOD

00 không có d ch chuy nị ể01 d ch chuy n 8 bitị ể10 d ch chuy n 16 bitị ể11 R/M là thanh ghi

REG

Thanh ghi Mã

W=1 W=0AX AL 000BX BL 011CX CL 001DX DL 010SP AH 100DI BH 111BP CH 101SI DH 110

R/M

Mã Chế độ địa chỉ

000 DS:[BX+SI]001 DS:[BX+DI]010 SS:[BP+SI]011 SS:[BP+DI]100 DS:[SI]101 DS:[DI]110 SS:[BP]111 DS:[BX]

MOD <> 11

46/Chapter2

© DHBK 2005

Cách mã hoá l nh c a 8086ệ ủCách mã hoá l nh c a 8086ệ ủ

• Ví d : chuy n l nh MOV CL, [BX] sang mã máyụ ể ệ opcode MOV: 100010 D li u là 1 byte: W=0ữ ệ Chuy n t i thanh ghi: D=1ể ớ Không có d ch chuy n: MOD=00ị ể [BX] nên R/M=111 CL nên REG=001

1 01 0 0 0 1 0 0 0 0 0 1 1 1 1

MOV D WMOD CL [BX]

Ví d 2: chuy n l nh MOV [SI+F3H], CL sang mã máyụ ể ệ

47/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ

Các l nh di chuy n d li uệ ể ữ ệ Các l nh s h c và logicệ ố ọ Các l nh đi u khi n ch ng trìnhệ ề ể ươ

• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ80286

48/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ

Các l nh di chuy n d li uệ ể ữ ệ Các l nh s h c và logicệ ố ọ Các l nh đi u khi n ch ng trìnhệ ề ể ươ

• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ80286

49/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• MOV, XCHG, POP, PUSH, POPF, PUSHF, IN, OUT• Các l nh di chuy n chu i MOVS, MOVSB, MOVSWệ ể ỗ

• 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, BXMOV AH, ‘A’MOV AL, [1234H]

50/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• Kh năng k t h p toán h ng c a l nh MOVả ế ợ ạ ủ ệ

Thanh ghi đa năng

Thanh ghi đo nạ

ô nhớ H ng sằ ố

Thanh ghi đa năng

YES YES YES NO

Thanh ghi đo nạ

YES NO YES NO

Ô nhớ YES YES NO NO

H ng sằ ố YES NO YES NO

Đích

Ngu nồ

51/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• L nh XCHGệ Dùng đ hoá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: toá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, BXXCHG AX, [BX]

52/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác 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 này không tác đ ng đ n cệ ộ ế ờ Ví d :ụ

PUSH BXPUSH PTR[BX]

• L nh PUSHFệ C t n i dung c a thanh ghi c vào ngăn x pấ ộ ủ ờ ế

53/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• Ví d v l nh PUSHụ ề ệ

130001300113002130031300413005130061300713008130091300A

1 3 0 0

0 0 0 A

1 2 3 4

SS

SP

AX

SP

130001300113002130031300413005130061300713008130091300A

1 3 0 0

0 0 0 8

1 2 3 4

SS

SP

AX

SP

PUSH AX

1234

130001300113002130031300413005130061300713008130091300A

1 3 0 0

0 0 0 6

7 8 5 6

SS

SP

BX

SP

PUSH BX

12347856

54/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• L nh POPệ Dùng đ l y l i 1 t vào thanh ghi ho c ô nh t đ nh ngăn x p ể ấ ạ ừ ặ ớ ừ ỉ ế Cú pháp: POP Đích Mô t : {SP} => Đích, SP=SP+2ả Gi i h n: thanh ghi 16 bit (tr CS) ho c là 1 t nhớ ạ ừ ặ ừ ớ L nh này không tác đ ng đ n cệ ộ ế ờ Ví d :ụ

POP BXPOP PTR[BX]

• L nh POPFệ L y 1 t t đ nh ngăn x p r i đ a vào thanh ghi cấ ừ ừ ỉ ế ồ ư ờ

55/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• Ví d l nh POPụ ệ

130001300113002130031300413005130061300713008130091300A

1 3 0 0

0 0 0 6

3 2 5 4

SS

SP

DX

SP

12347856

130001300113002130031300413005130061300713008130091300A

1 3 0 0

0 0 0 8

7 8 5 6

SS

SP

DX

SP12347856

POP DX

56/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• 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 này không tác đ ng đ n cệ ộ ế ờ Ví d :ụ

IN AX, 00H IN AL, F0H IN AX, DX

• L nh 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, AXOUT F0H, ALOUT DX, AX

57/Chapter2

© DHBK 2005

Các l nh di chuy n d li uệ ể ữ ệCác l nh di chuy n d li uệ ể ữ ệ

• 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, chu i ngu nỗ ỗ ồ

MOVSB MOVSW

Th c hi n: ự ệDS:SI là đ a ch c a ph n 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

58/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ

Các l nh di chuy n d li uệ ể ữ ệ Các l nh s h c và logicệ ố ọ Các l nh đi u khi n ch ng trìnhệ ề ể ươ

• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ80286

59/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• ADD, ADC, SUB, MUL, IMUL, DIV, IDIV, INC, DEC• AND, OR, NOT, NEG, XOR• L nh quay và d ch: RCL, RCR, SAL, SAR, SHL, SHRệ ị• L nh so sánh: CMP, CMPSệ

• L nh ADDệ L nh c ng hai toán h ng ệ ộ ạ Cú pháp: ADD Đích, ngu nồ Th c hi n: Đích=Đích + ngu nự ệ ồ Gi i h n: toá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, BXADD AX, 40H

60/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• L nh ADCệ L nh c ng có nh hai toán h ng ệ ộ ớ ạ Cú pháp: ADC Đích, ngu nồ Th c hi n: Đích=Đích + ngu n+CFự ệ ồ Gi i h n: toá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 :ụ

ADC AL, 30H

• L nh SUBệ L nh tr ệ ừ Cú pháp: SUB Đích, ngu nồ Th c hi n: Đích=Đích - ngu nự ệ ồ Gi i h n: toá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

61/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• L nh MULệ L nh nhân s không d uệ ố ấ Cú pháp: MUL ngu nồ Th c hi n:ự ệ

AX=AL* ngu n8bitồDXAX=AX*ngu n16bitồ

L nh này thay đ i c : CF, OFệ ổ ờ Ví d :ụ

MUL BL

• L nh IMULệ nhân s có d uố ấ

62/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• L nh DIVệ L nh chia 2 s không d uệ ố ấ Cú pháp: DIV ngu nồ Th c hi n:ự ệ

AL = th ng (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

• L nh IDIVệ chia 2 s có d uố ấ

63/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• L nh INCệ L nh c ng 1 vào toá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

• L nh DECệ L nh tr 1 t n i dung m t 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]

64/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• L nh ANDệ L nh AND logic 2 toán h ngệ ạ Cú pháp: AND Đích, ngu nồ Th c hi n: Đích=Đích And ngu nự ệ ồ Gi i h n: toá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ệ ị ố ủ ạ

65/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• 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: toán h ng ph i cùng đ dài và không đ c là 2 ô nhớ ạ ạ ả ộ ượ ớ• 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, chu i ngu nỗ ỗ ồ

CMPSB CMPSW

Th c hi n: ự ệDS:SI là đ a ch c a ph n 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ậ ậ ờ

66/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• 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ệ ổ ờ

• L nh RCRệ L nh quay ph i thông qua c nhệ ả ờ ớ

CF MSB LSB

67/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• 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ệ ổ ờ

• L nh RORệ L nh quay ph iệ ả

CF MSB LSB

68/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• L nh SALệ L nh d ch trái s h cệ ị ố ọ Cú pháp: SAL Đích, CL (v i s l n d ch l n h n 1)ớ ố ầ ị ớ ơ

SAL Đích, 1 SAL Đí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ệ ổ ờ

• L nh SHLệ L nh d ch trái logic t ng t nh SALệ ị ươ ự ư

CF MSB LSB

0

69/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• L nh SARệ L nh d ch ph i s h cệ ị ả ố ọ Cú pháp: SAR Đích, CL (v i s l n d ch l n h n 1)ớ ố ầ ị ớ ơ

SAR Đích, 1 ho c ặ SAR Đí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 MSBệ ổ ờ ị ủ

CFMSB LSB

70/Chapter2

© DHBK 2005

Các l nh s h c và logicệ ố ọCác l nh s h c và logicệ ố ọ

• 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ệ ổ ờ ị ủ

CFMSB LSB

0

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

71/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ

Các l nh di chuy n d li uệ ể ữ ệ Các l nh s h c và logicệ ố ọ Các l nh đi u khi n ch ng trìnhệ ề ể ươ

L nh nh y không đi u ki n: JMPệ ả ề ệL nh nh y có đi u ki n JE, JG, JGE, JL, JLE...ệ ả ề ệL nh l p LOOPệ ặL nh g i ch ng trình con CALLệ ọ ươL nh g i ch ng trình con ph c v ng t INT và IRETệ ọ ươ ụ ụ ắ

• Cách đánh đ a ch ch đ b o v các máy tính t 80286ị ỉ ở ế ộ ả ệ ở ừ

72/Chapter2

© DHBK 2005

L nh nh y không đi u ki n JMPệ ả ề ệ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)ệ ả ắĐ dài l nh 2 bytes:ộ ệ

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 :ụ

E B Đ l chộ ệ

XOR BX, BX

Nhan: MOV AX, 1

ADD AX, BX

JMP SHORT Nhan

73/Chapter2

© DHBK 2005

L nh nh y không đi u ki n JMPệ ả ề ệ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 :ụ

E 9 Độ lệchLo

XOR BX, BX

Nhan: MOV AX, 1

ADD AX, BX

JMP NEAR Nhan

Độ lệchHi

XOR CX, CX

MOV AX, 1

ADD AX, BX

JMP NEAR PTR BX

XOR CX, CX

MOV AX, 1

ADD AX, BX

JMP WORD PTR [BX]

Th c hi n: IP=IP+ đ l chự ệ ộ ệ IP=BX IP=[BX+1] [BX]

Nh y gián ti pả ế

74/Chapter2

© DHBK 2005

L nh nh y không đi u ki n JMPệ ả ề ệL nh nh y không đi u ki n JMPệ ả ề ệ

L nh nh y xa (far jump)ệ ảĐ dài 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 :ụ

E A IP Lo

EXTRN Nhan: FAR

Next: MOV AX, 1

ADD AX, BX

JMP FAR PTR Next

........

JMP FAR Nhan

IP Hi

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

CS Lo CS Hi

XOR CX, CX

MOV AX, 1

ADD AX, BX

JMP DWORD PTR [BX]

IP = [BX+1][BX]CS= [BX+3][BX+2]

75/Chapter2

© DHBK 2005

Tóm t t l nh JMPắ ệTóm t t l nh JMPắ ệ

JMP

00000H

FFFFFH

+127

-128

Đo n mã 2ạ

Đo n mã 1ạ

Nh y ng nả ắ Nh y g nả ầ

Nh y xaả

76/Chapter2

© DHBK 2005

L nh nh y có đi u ki nệ ả ề ệL nh nh y có đi u ki nệ ả ề ệ

• JE or JZ, JNE or JNZ, JG, JGE, JL, JLE (dùng cho s có d u) và JA, JB, JAE, JBE (dùng cho s không ố ấ ốd u) ...ấ

• 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

Th c hi n: IP=IP + đ d chự ệ ộ ị

77/Chapter2

© DHBK 2005

L nh l p LOOPệ ặL nh l p LOOPệ ặ

• LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ• Là l nh ph i h p gi a DEC CX và JNZệ ố ợ ữ

XOR AL, AL

MOV CX, 16

Lap: INC AL

LOOP Lap

L p đ n khí CX=0ặ ế

XOR AL, AL

MOV CX, 16

Lap: INC AL

CMP AL, 10

LOOPE Lap

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

XOR AL, AL

MOV CX, 16

Lap: INC AL

CMP AL, 10

LOOPNE Lap

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

78/Chapter2

© DHBK 2005

L nh CALLệL nh 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

Tong PROC NEARADD AX, BXADD AX, CX

RET Tong ENDP ...MOV BX, OFFSET Tong CALL BX

CALL WORD PTR [BX]

Cất IP vào ngăn xếpIP=IP + dịch chuyểnRET: lấy IP từ ngăn xếp

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

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

79/Chapter2

© DHBK 2005

L nh CALLệL nh 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

ADD AX, BX

ADD AX, CX

RET

Tong ENDP

...

CALL Tong

CALL DWORD PTR [BX]

Cất CS vào ngăn xếpCất IP vào ngăn xếpIP=IP của TongCS =CS của TongRET: lấy IP từ ngăn xếplấy CS từ ngăn xếp

Cất CS vào ngăn xếpCất IP vào ngăn xếpIP = [BX+1][BX]CS= [BX+3][BX+2]RET: lấy IP từ ngăn xếplấy CS từ ngăn xếp

80/Chapter2

© DHBK 2005

L nh ng t INT và IRETệ ắL nh ng t INT và 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ụ ọ ủ

81/Chapter2

© DHBK 2005

L nh ng t INT và IRETệ ắL nh ng t INT và 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ấ ờ ừ ế

82/Chapter2

© DHBK 2005

Ch ng 2: B vi x lý Intel 8088/8086ươ ộ ửCh ng 2: B vi x lý Intel 8088/8086ươ ộ ử

• C u trúc bên trongấ• S đ chânơ ồ• B n đ b nh c a máy tính IBM-PCả ồ ộ ớ ủ• Các ch đ đ a ch c a 8086ế ộ ị ỉ ủ• Cách mã hoá l nh c a 8086ệ ủ• Mô t t p l nh c a 8086ả ậ ệ ủ• Cách đánh đ a ch ch đ b o v các máy tính t ị ỉ ở ế ộ ả ệ ở ừ

80286

83/Chapter2

© DHBK 2005

Đánh đ a ch b nh ch đ b o vị ỉ ộ ớ ở ế ộ ả ệĐánh đ a ch b nh ch đ b o vị ỉ ộ ớ ở ế ộ ả ệ

• Cho phép truy c p d li u và ch ng trình vùng ậ ữ ệ ươ ởnh trên 1Mớ

• Thanh ghi l ch ch a đ a ch l chệ ứ ị ỉ ệ• Thanh ghi đo n ch a t ch n đo n (segment ạ ứ ừ ọ ạ

selector) t ch n đo n ch n 1 ph n t trong 1 trong 2 b ng mô t ừ ọ ạ ọ ầ ử ả ả

đo n (descriptor table), m i b ng có kích th c 64 KBạ ồ ả ướB ng mô t đo n toàn c c (Global DT): ch a thông tin v các ả ả ạ ụ ứ ề

đo n c a b nh mà t t c các ch ng trình có th truy nh pạ ủ ộ ớ ấ ả ươ ể ậB ng mô t đo n c c b (Local DT): ch a thông tin v các đo n ả ả ạ ụ ộ ứ ề ạ

c a 1 ch ng trìnhủ ươ Mô t đo n ch a thông tin v đ a ch b t đ u c a đo nả ạ ứ ề ị ỉ ắ ầ ủ ạ

84/Chapter2

© DHBK 2005

Đánh đ a ch b nh ch đ b o vị ỉ ộ ớ ở ế ộ ả ệĐánh đ a ch b nh ch đ b o vị ỉ ộ ớ ở ế ộ ả ệ

01215

Index TI RPL

RPL: mức ưu tiên yêu cầu, 00 cao nhất, 11 thấp nhấtTI=0, sử dụng bảng toàn cục, TI=1 sử dụng bảng cục bộIndex: 13 bit chỉ số để chọn 1 trong 8K mô tả đoạn trong bảng mô tả đoạn

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Access rights Base(B23-B16)

Base(B15-B0)

Limit(L15-L0) 01

3

5

7

2

46 Base(B31-B24)

G D O A Limit V (L19-L16)

Access rights Base(B23-B16)

Base(B15-B0)

Limit(L15-L0) 01

3

5

7

2

46

mô t đo n c a 80286ả ạ ủ mô t đo n t 80386ả ạ ừ

Base: xác đ nh đ a ch b t đ u c a đo nị ị ỉ ắ ầ ủ ạLimit: gi i h n kích th c t i đa c a đo nớ ạ ướ ố ủ ạ

85/Chapter2

© DHBK 2005

Đánh đ a ch b nh ch đ b o vị ỉ ộ ớ ở ế ộ ả ệĐánh đ a ch b nh ch đ b o vị ỉ ộ ớ ở ế ộ ả ệ

• 80286 Base 24 bit: 000000H đ n FFFFFFH (16 MB)ế Limit 16 bit: kích th c đo n: t 1 đ n 64 KBướ ạ ừ ế Đ a ch v t lý= Base + đ l chị ỉ ậ ộ ệ 1 ch ng trình có th s d ng t i đa: 2*8K*64 K= 1GB b ươ ế ử ụ ố ộ

nh => b nh o (virtual memory)ớ ộ ớ ả

• 80386/486/Pentium Base 32 bit: 00000000H đ n FFFFFFFFH (4 GB)ế Limit 20 bit:

G=0: kích th c đo n: t 1 đ n 1MBướ ạ ừ ế G=1: kích th c đo n t 4K đ n 4 GB ướ ạ ừ ế

Đ a ch v t lý= Base + đ l chị ỉ ậ ộ ệ 1 ch ng trình có th s d ng t i đa: 2*8K*4 GB= 64 ươ ế ử ụ ố

Terabytes b nhộ ớ