Professional Documents
Culture Documents
Sơ đồ khối 8088/8086
bus địa chỉ
Các thanh AX EU 20 bit BIU
BX Execution Unit Bus Interface Unit
ghi đa năng Khối thực thi Khối giao tiếp BUS ngoài
CX
DX
SP Các thanh ghi CS
Các thanh ghi BP đoạn và con trỏ DS
con trỏ SI SS
lệnh ES
và chỉ số DI
IP
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ở, 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)
© DHBK 2005 5/Chapter2
1000 H ?
1200 H ?
1004 H ?
0300 H ?
• Ví dụ: Cho địa chỉ đầu của đoạn: 49000 H, xác định địa chỉ cuối
© DHBK 2005 7/Chapter2
00000
© DHBK 2005 8/Chapter2
s
t
a d
c a
k 0A480
t 0A47F
a c Stack
o 0A280
d 0A28 SS
0A27F
e Data
0A0F0 0A0F DS
0A0EF
Code
090F0 090F CS
00000
© DHBK 2005 9/Chapter2
15 14 2 1 0
O D I T S Z A P C
15 14 2 1 0
O D I T S Z A P C
• 3 cờ điều khiển
T hoăc TF (trap flag)): cờ bẫy, TF=1 -> 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)
© DHBK 2005 13/Chapter2
100h
Không có
pipelining F1 D1 E1 F2 D2 E2 F3 D3 E3
t
F1 D1 E1
Có pipelining F2 D2 E2
F3 D3 E3
t
© DHBK 2005 15/Chapter2
Sơ đồ chân
Intel 8088
• 16-bit processor
• introduced in 1979
• 3 µm, 5 to 8 MHz, 29 KTOR,
0.33 to 0.66 MIPS
© DHBK 2005 17/Chapter2
Sơ đồ chân
Intel 8086
© DHBK 2005 18/Chapter2
08E30
COMMAND.COM 640Kb
08490 TPA
Device drivers (mouse.sys)
02530
MSDOS program
01160
IO.SYS
00700
Vùng DOS
00500
Vùng BIOS
00400
00000 Các vector ngắt
© DHBK 2005 20/Chapter2
C8000
Video BIOS ROM
C0000
Video RAM (text)
B0000 128Kb
Video RAM (đồ hoạ) SA
A0000
© DHBK 2005 21/Chapter2
003FF
Các vector ngắt
00000
© DHBK 2005 22/Chapter2
Vùng nhớ
mở rộng
Vùng mở rộng
03FF
COM1
03F8
Điều khiển đĩa mềm
03F0
CGA adapter
03D0
LPT1
0378
Điều khiển ổ cứng
0320
COM2
02F8
8255
0060
Định thời (8253)
0040
Điều khiển ngắt (8259)
0020
0000 Điều khiển DMA
© DHBK 2005 25/Chapter2
• Ví dụ:
MOV BX, DX ; Copy nội dung DX vào BX, nội dung DX được giữ nguyên
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
© DHBK 2005 27/Chapter2
• 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
© DHBK 2005 29/Chapter2
• 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)
© DHBK 2005 30/Chapter2
• 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
© DHBK 2005 31/Chapter2
• 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
© DHBK 2005 32/Chapter2
• 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
© DHBK 2005 33/Chapter2
• 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
© DHBK 2005 35/Chapter2
Byte Opcode
D W
7 6 5 4 3 2 1 0
1 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1
MOV
D W MOD REG R/M
• 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 1234H, AL
MOV AH, ‘A’ MOV [SI], 1234H
MOV AL, [1234H] MOV [DI] + 10, 1234H
MOV AH, 1234H MOV [SI], [DI] + 10
MOV [1234H], AL MOV 1234H, [SI] + [BX] + 10
MOV [1234H], 1234H MOV DS,12H
MOV 1234H, [1234H] MOV ES, DS
MOV 1234H,AX MOV 12H, DS
© DHBK 2005 42/Chapter2
Ví dụ: LAHF
Ví dụ: SAHF
© DHBK 2005 48/Chapter2
1300A 1300A
13009 12 13009 12
13008 34 13008 34 SP
13007 78 13007 78
13006 SP 13006
56 56
13005 13005
13004 13004
13003 13003
13002 13002
13001 13001
13000 13000
SS 1300 SS 1300
SP 0006 SP 0008
DX 7856 AX 1234
© DHBK 2005 54/Chapter2
ví dụ: PUSHF
• Lệnh POPF
Lấy nội dung của ngăn xếp đưa vào thanh ghi cờ
Thực hiện: trước tiên {SP} -> FR, sau đó SP = SP + 2
ví dụ: POPF
© DHBK 2005 58/Chapter2
ChuongTrinhCon:
PUSH AX ;cất AX vào ngăn xếp
PUSH BX ;cất BX vào ngăn xếp
PUSHF
MOV AX,0 ;Thuật toán của chương trình con, có sử dụng AX, BX
POPF
POP BX ;trả lại giá trị cũ của AX, BX
POP AX
RET ;Trở về chương trình chính
1300B 66 1300B 66
1300A 55 1300A 55
13009 44 BX + AL 13009 44
13008 33 13008 33
13007 22 13007 22
13006 BX 13006
11 11
13005 13005
13004 13004
13003 13003
13002 13002
13001 13001
DS 1300 DS 1300
BX 0006 BX 0006
AL 03 AL 44
© DHBK 2005 62/Chapter2
• 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ụ1:
Cho AX = 3488h -> thực hiện lệnh ADD AX,BX
BX = 2212h -> tìm AX và xác định các bit của FR
© DHBK 2005 63/Chapter2
Ví dụ 6:
Cho AX = A387h
DS = 1000h
DI = 0000h
DS: DI = 11h
ADD AX, DS
© DHBK 2005 65/Chapter2
Ví dụ 2:
Cho
AX = 1245h
BX = 11ADh
SUB BX, AX
© DHBK 2005 67/Chapter2
Ví dụ 7:
Cho AX = A387h
DS = 1000h
DI = 0000h
DS: DI = 11h
SUB AX, DS
© DHBK 2005 69/Chapter2
Ví dụ 7:
Cho AX = A387h
DS = 1000h
DI = 0000h
DS: DI = 11h
AND AX, DS
© DHBK 2005 78/Chapter2
Ví dụ 7:
Cho AX = A387h
DS = 1000h
DI = 0000h
DS: DI = 11h
XOR AX, DS
© DHBK 2005 81/Chapter2
Ví dụ 7:
Cho AX = A387h
DS = 1000h
DI = 0000h
DS: DI = 11h
OR AX, DS
© DHBK 2005 84/Chapter2
Ví dụ 1:
Cho AX = 1123h
BX = 0054h
CMP AX, BX
Ví du 2:
Cho AL = ABh
DS = 1000h
DI = 0000h
DS:DI = BEh CMP AL, [DI]
© DHBK 2005 87/Chapter2
1 0 1 0 0 1 1 0 1
• Ví dụ 2: Cho AX = 3D2Eh
CL = 0004h
CF = 0
RCL AX,CL
Tìm AX, CL ?
© DHBK 2005 90/Chapter2
1 0 1 0 0 1 1 0 1
• Ví dụ 2: Cho AX = 3D2Eh
CL = 0004h
CF = 0
RCR AX,CL
Tìm AX, CL ?
© DHBK 2005 92/Chapter2
CF AL
1 0 1 0 0 1 1 0 1
• Ví dụ 2: Cho AX = 3D2Eh
CL = 0004h
CF = 0
ROL AX,CL
Tìm AX, CL ?
© DHBK 2005 94/Chapter2
MSB LSB CF
© DHBK 2005 95/Chapter2
AL CF
0 1 0 0 1 1 0 1 1
• Ví dụ 2: Cho AX = 3D2Eh
CL = 0004h
CF = 0
ROR AX,CL
Tìm AX, CL ?
© DHBK 2005 96/Chapter2
CF MSB LSB
CF AL
1 0 1 0 0 1 1 0 1
• Ví dụ 2: Cho AX = 3D2Eh
CL = 0004h
CF = 0
SHL AX,CL
Tìm AX, CL ?
© DHBK 2005 98/Chapter2
MSB LSB CF
© DHBK 2005 99/Chapter2
AL CF
0 1 0 0 1 1 0 1 1
• Ví dụ 2: Cho AX = 3D2Eh
CL = 0004h
CF = 0
SAR AX,CL
Tìm AX, CL ?
© DHBK 2005 100/Chapter2
MSB LSB CF
0
© DHBK 2005 101/Chapter2
AL CF
0 1 0 0 1 1 0 1 1
• Ví dụ 2: Cho AX = 3D2Eh
CL = 0004h
CF = 0
SHR AX,CL
Tìm AX, CL ?
© DHBK 2005 102/Chapter2
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 AX, AX
Nhan: MOV BX, 1
ADD AX, BX
JMP SHORT Nhan
© DHBK 2005 103/Chapter2
E 9 Độ lệchLo Độ lệchHi
Nhảy gián tiếp
© DHBK 2005 104/Chapter2
Phạm vi nhảy: nhảy trong 1 đoạn mã hoặc nhảy sang đoạn mã khác
Ví dụ:
Đoạn mã 2
Nhảy xa
+127 Đoạn mã 1
Nhảy ngắn
JMP Nhảy gần
-128
00000H
© DHBK 2005 106/Chapter2
Lặp đến khi CX=0 Lặp đến khi CX=0 Lặp đến khi CX=0
hoặc AL<>10 (ZF=0) hoặc AL=10
© DHBK 2005 108/Chapter2
Tong PROC NEAR Tong PROC NEAR CALL WORD PTR [BX]
ADD AX, BX
ADD AX, BX
ADD AX, CX
ADD AX, CX RET
Tong ENDP
RET
...
Tong ENDP MOV BX, OFFSET Tong
CALL BX
...
CALL Tong
Cất IP vào ngăn xếp Cất IP vào ngăn xếp Cất IP vào ngăn xếp
IP=IP + dịch chuyển IP= BX IP= [BX+1] [BX]
RET: lấy IP từ ngăn xếp RET: lấy IP từ ngăn xếp RET: lấy IP từ ngăn xếp
© DHBK 2005 109/Chapter2
CS 1000
1234AH MOV DX,AX
IP 2345
12345H CALL ABCDEH
SP ABC4 MOV BX,1
© DHBK 2005 111/Chapter2
RET RET
ADD AX,CX ADD AX,CX
ABCDEH ADD AX,BX ABCDEH ADD AX,BX
CS 1 0 0 0 IP 2 3 4 A SP A B C 4 CS A 0 0 0 IP B C D E SP A B C 0
© DHBK 2005 112/Chapter2
RET RET
ADD AX,CX ADD AX,CX
ABCDEH ADD AX,BX ABCDEH ADD AX,BX
CS ? IP ? SP A B C 0 CS 1 0 0 0 IP 2 3 4 A SP A B C 4
© DHBK 2005 113/Chapter2
Các lệnh
Làm việc với mảng, 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, 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
• LODS/LODSB/LODSW-Load String Byte/Word into AL/AX
© DHBK 2005 116/Chapter2
• 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
© DHBK 2005 118/Chapter2
1 số bộ vi xử lý khác
VXL 80186
- Registers (16bit):
General Reg: AX(AH+AL), BX(BH+BL), CX(CH+CL), DX(DH+DL)
Pointer and index Reg: SP, BP, SI, DI
Segment Reg: CS, DS, ES, SS
Flag Reg: OF,CF,AF,SF,ZF,PF,IF,DF,TF
Control Reg: IR,Timer, DMA, CS, Refresh CU,PowerSaving, Rellocation
- Memory map: similar to 8086
- Instruction set: can be viewed as existing on two levels
including an assembly level and a machine level
© DHBK 2005 121/Chapter2
1 số bộ vi xử lý khác
VXL 80286
- Registers (16bit):
General Reg: AX(AH+AL), BX(BH+BL), CX(CH+CL), DX(DH+DL)
Pointer and index Reg: SP, BP, SI, DI
Segment Reg: CS, DS, ES, SS
Flag Reg (32bit): OF,CF,AF,SF,ZF,PF,IF,DF,TF,NP,IOPL,TS,EM,PE,MP
Control Reg: IR,Timer, DMA, CS, Refresh CU,PowerSaving, Rellocation
Status Reg: Status Word
- Memory map: Real Address mode and Virtual memory protected
mode
- Instruction set: similar to 8086 with some additional instructions
which are used for virtual memory protected mode
© DHBK 2005 122/Chapter2
1 số bộ vi xử lý khác
VXL 32bit - 80386
- General registers (32bit):
- Special registers: CR0-4, TR,
GDTR,IDTR
- Memory management:
using Paging for virtual
memory management
- Instruction set: 2 formats
(ModR/M or SIB byte)
allow to implement 8bit, 16bit
, 32bit operations
© DHBK 2005 123/Chapter2
Index TI RPL