Tài liệu Vi xử lý - Chương 2: Tổ chức hệ thống vi xử lý

Tất cảcác máy vi tính IBM họPC hoặc các máy vi tính tương thích IBM đều sử

dụng µP Intel họiAPX. Bảng 2.1 liệt kê các đặc tính cơbản của một số µP của Intel

trong đó 80486 chứa một bộ điều khiển cache tích hợp và 8 KB RAM tĩnh, Pentium

chứa cache 16 KB RAM tĩnh.

pdf22 trang | Chuyên mục: Kiến Trúc Máy Tính | Chia sẻ: dkS00TYs | Lượt xem: 2131 | Lượt tải: 2download
Tóm tắt nội dung Tài liệu Vi xử lý - Chương 2: Tổ chức hệ thống vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 
cho các chương trình dịch. 
Toán tử DATA SEGMENT báo cho chương trình dịch biết các lệnh theo sau sẽ 
nằm trong đoạn dữ liệu. Toán tử DB (Define Byte) gán cho nhãn SAMPLEB 1 byte 
trong đoạn dữ liệu. Ký hiệu ? xác định rằng không cần định nghĩa nội dung của byte 
đó. Do SAMPLEB là dòng đầu tiên nên nó sẽ có địa chỉ logic là 0. Phát biểu DATA 
ENDS kết thúc đoạn dữ liệu (ở đây chỉ dịnh nghĩa 1 byte). Trong trường hợp muốn 
định nghĩa 1 word, ta dùng toán tử DW (Define Word). 
VD: 
 SAMPLEW DW 1000h 
Phát biểu này định nghĩa nhãn SAMPLEW ứng với vị trí word và nội dung của 
vị trí này là 1000h. 
Ngoài ra, ta có thể dùng các toán tử DD định nghĩa từ kép (double word), DQ 
định nghĩa từ bộ bốn (8 byte) và DT định nghĩa 10 byte. 
3. Cách mã hoá lệnh 
Lệnh của bộ vi xử lý sẽ biểu diễn bằng các ký tự dưới dạng gợi nhớ 
(mnemonic) để có thể dễ dàng sử dụng. Đối với vi xử lý thì các lệnh được biểu diễn 
bằng các mã lệnh (opcode) nên sau khi nhận lệnh vi xử lý phải thực hiện giải mã lệnh 
rồi mới thực thi nó. Một lệnh vi xử lý có thể dài 1 byte hay nhiều byte. Nếu ta dùng 1 
byte để mã hoá thì sẽ mã hoá được 256 lệnh khác nhau. Tuy nhiên do một lệnh không 
phải chỉ có một cách thực hiện nên ta không thể thực hiện đơn giản như trên. 
Để tìm hiểu cách mã hoá lệnh, ta xét lệnh MOV des,src dùng để chuyển dữ liệu 
giữa hai thanh ghi hay một ô nhớ và một thanh ghi. 
Lệnh MOV mã hoá như sau: 
1 0 0 0 1 0 
Opcode D W Mod reg M/R 
Để mã hóa lệnh MOV, ta cần dùng ít nhất là 2 byte trong đó 6 bit dùng cho mã 
lệnh. 
Bit D xác định hướng truyền của dữ liệu, D = 0 xác định dữ liệu sẽ đi từ thanh 
ghi cho bởi 3 bit Reg, D = 1 xác định dữ liệu sẽ đi đến thanh ghi cho bởi 3 bit Reg. 
Bit W xác định sẽ truyền 1 byte (W = 0) hay 1 word (W = 1). 
3 bit Reg dùng để chọn thanh ghi sử dụng: 
Byte 1 Byte 2 Byte 3 Byte 4 
Tài liệu vi xử lý Tổ chức hệ thống vi xử lý 
Phạm Hùng Kim Khánh Trang 40 
Bảng 2.10: 
Thanh ghi Mã W = 1 W = 0 
000 
001 
010 
011 
100 
101 
110 
111 
AX 
CX 
DX 
BX 
SP 
DI 
BP 
SI 
AL 
CL 
DL 
BL 
AH 
CH 
DH 
BH 
2 bit mod và 3 bit R/M (Register / Memory) dùng để xác định chế độ địa chỉ 
cho các toán hạng của lệnh. 
Bảng 2.11: 
11 MOD 
R/M 00 01 10 W = 1 W = 0 
000 [BX]+[SI] [BX]+[SI]+addr8 [BX]+[SI]+addr16 AX AL 
001 [BX]+[DI] [BX]+[DI]+addr8 [BX]+[DI]+addr16 CX CL 
010 [BP]+[SI] [BP]+[SI] +addr8 [BP]+[SI] +addr16 DX DL 
011 [BP]+[DI] [BP]+[DI] +addr8 [BP]+[DI] +addr16 BX BL 
100 [SI] [SI] +addr8 [SI] +addr16 SP AH 
101 [DI] [DI] +addr8 [DI] +addr16 BP CH 
110 addr16 [BP] +addr8 [BP] +addr16 SI DH 
111 [BX] [BX] +addr8 [BX] +addr16 DI BH 
Tổng quát, 8086/8088 có khoảng 300 tác vụ có thể có trong tập lệnh của nó. 
Mỗi lệnh kéo dài từ 1 đến 6 byte. Từ ví dụ trên, ta thấy mã lệnh có các vùng: 
- Vùng mã lệnh (opcode): chứa mã lệnh của lệnh sẽ thực thi 
- Vùng thanh ghi (reg): chứa các thanh ghi sẽ thực hiện (bảng 2.10) 
- Vùng chế độ (mod): (bảng 2.11) 
00: toán hạng bộ nhớ trực tiếp nếu R/M = 110, ngược lại là toán hạng gián tiếp 
01: toán hạng gián tiếp, độ dời 8 bit 
10: toán hạng gián tiếp, độ dời 16 bit 
11: sử dụng 2 thanh ghi, vùng R/M sẽ là vùng Reg 
- Vùng thanh ghi / bộ nhớ R/M (Reg/Mem): (bảng 2.11) 
Tài liệu vi xử lý Tổ chức hệ thống vi xử lý 
Phạm Hùng Kim Khánh Trang 41 
4. Các cách định địa chỉ 
Bảng 2.12: 
Ví dụ Cách định 
địa chỉ 
Mã đối 
tượng Từ gợi nhớ Đoạn 
truy xuất
Hoạt động Mô tả 
Tức thời B80010 MOV AX,1000h Mã AH ← 10h 
AL ← 00h 
(1) 
Thanh ghi 8BD1 MOV DX,CX Trong µP DX ← CX (2) 
Trực tiếp 8A260010 MOV AH,[1000h] Döõ 
lieäu 
AH ← [1000h] (3) 
Gián tiếp 
thanh ghi 
8B04 
FF25 
FE4600 
FF0F 
MOV AX,[SI] 
JMP [DI] 
INC BYTE PTR [BP] 
DEC WORD PTR [BX] 
Dữ liệu 
Dữ liệu 
Stack 
Dữ liệu 
AL ← [SI]; AH ←[SI+1] 
IP←[DI+1:DI] 
[BP]←[BP]+1 
[BX+1:BX]← [BX+1:BX]-1 
(4) 
Có chỉ số 8B4406 
FF6506 
MOV AX,[SI+6] 
JMP [DI+6] 
Dữ liệu 
Dữ liệu 
AL ← [SI+6]; AH ←[SI+7] 
IP←[DI+7:DI+6] 
(5) 
Có nền 8B4602 
FF6702 
MOV AX,[BP+2] 
JMP [BP+2] 
Stack 
Dữ liệu 
AL←[BP+2]; AH ←[BP+3] 
IP←[BX+3:BX+6] 
(6) 
Có nền và 
có chỉ số 
8B00 
FF21 
FE02 
FF0B 
MOV AX,[BX+SI] 
JMP [BX+DI] 
INC BYTE PTR [BP+SI] 
DEC WORD PTR [BP+DI] 
Dữ liệu 
Dữ liệu 
Stack 
Stack 
AL←[BX+SI];AH←[BX+SI+1] 
IP←[BX+DI+1:BX+DI] 
[BP+SI]←[BP+SI]+1 
[BP+DI+1:BP+DI]← 
[BP+DI+1:BP+DI]-1 
(7) 
Có nền và 
có chỉ số 
với độ dời 
8B4005 
FF6105 
FE4205 
FF4B05 
MOV AX,[BX+SI+5] 
JMP [BX+DI+5] 
INC BYTE PTR [BP+SI+5] 
DEC WORD PTR [BP+DI+5]
Dữ liệu 
Dữ liệu 
Stack 
Stack 
AL←[BX+SI+5] 
AH←[BX+SI+1] 
IP←[BX+DI+6:BX+DI+5] 
[BP+SI+5]←[BP+SI+5]+1 
[BP+DI+6:BP+DI+5]← 
[BP+DI+6:BP+DI+5]-1 
(8) 
String A4 MOVSB Thêm, 
dữ liệu 
[ES:DI] ← [DS:DI] 
Nếu DF = 0 thì 
SI ← SI + 1; DI ← DI + 1 
Nếu DF = 1 thì 
SI ← SI - 1; DI ← DI - 1 
(9) 
- BYTE PTR và WORD PTR tránh lầm giữa truy xuất byte và word. 
- Độ dời được cộng vào thanh ghi con trỏ hay nền là số nhị phân dạng bù 2. 
- (1): nguồn dữ liệu trong lệnh 
- (2): đích và nguồn là các thanh ghi của µP 
- (3): địa chỉ bộ nhớ cung cấp trong lệnh 
- (4): địa chỉ bộ nhớ cung cấp trong thanh ghi con trỏ hay chỉ số 
- (5): địa chỉ bộ nhớ là tổng của thanh ghi chỉ số cộng với độ dời trong lệnh 
- (6): địa chỉ bộ nhớ là tổng của thanh ghi BX hay BP cộng với độ dời trong 
lệnh 
- (7): địa chỉ bộ nhớ là tổng của thanh ghi chỉ số và thanh ghi nền 
Tài liệu vi xử lý Tổ chức hệ thống vi xử lý 
Phạm Hùng Kim Khánh Trang 42 
- (8): địa chỉ bộ nhớ là tổng của thanh ghi chỉ số, thanh ghi nền và độ dời 
trong lệnh 
- (9): địa chỉ nguồn bộ nhớ là thanh ghi SI trong đoạn dữ liệu và địa chỉ đích 
bộ nhớ là thanh ghi DI trong đoạn thêm 
4.1. Định địa chỉ tức thời 
Các lệnh dùng cách định địa chỉ tức thời lấy dữ liệu trong lệnh làm một phần 
của lệnh. Trong cách này, dữ liệu sẽ được chứa trong đoạn mã thay vì trong đoạn dữ 
liệu. Dữ liệu cho lệnh MOV AX,1000h được cung cấp tức thời sau mã lệnh B8. Chú ý 
rằng trong mã đối tượng byte dữ liệu cao đi sau byte dữ liệu thấp. 
Cách định địa chỉ tức thời thường dùng để nạp một thanh ghi hay vị trí bộ nhớ 
với các dữ liệu ban đầu. Sau đó, các lệnh kế tiếp sẽ làm việc với các dữ liệu này. Tuy 
nhiên, cách định địa chỉ này không sử dụng được cho các thanh ghi đoạn. 
4.2. Định địa chỉ thanh ghi 
Một số lệnh chỉ làm công việc chuyển dữ liệu giữa các thanh ghi của µP. Ví dụ 
như MOV DX,CX sẽ chuyển dữ liệu từ thanh ghi CX vào thanh ghi DX. Ở đây ta 
không cần thực hiện tham chiếu bộ nhớ. 
Ta có thể kết hợp cách định địa chỉ tức thời và định địa chỉ thanh ghi để nạp dữ 
liệu cho các thanh ghi đoạn. 
VD: 
 MOV AX, 1000h 
 MOV CS,AX 
Sau khi thực hiện 2 lệnh này, giá trị của thanh ghi CS sẽ là 1000h. 
4.3. Định địa chỉ trực tiếp 
Ngoài 2 cách định địa chỉ trên, tất cả các cách định địa chỉ còn lại cho trong 
bảng 2.6 đều cần phải truy xuất đến bộ nhớ với ít nhất một toán hạng. Trong cách định 
địa chỉ trực tiếp, địa chỉ bộ nhớ được cung cấp trực tiếp như là một phần của lệnh. Ví 
dụ như lệnh MOV AH,[1000h] sẽ đưa nội dung chứa trong ô nhớ DS:1000h vào thanh 
ghi AH hay lệnh MOV [2000h],AX sẽ đưa nội dung chứa trong AX vào 2 ô nhớ liên 
tiếp DS:2000h và DS:2001h 
4.4. Định địa chỉ truy xuất bộ nhớ gián tiếp 
Các cách định địa chỉ trực tiếp sẽ thuận lợi cho các truy xuất bộ nhớ không 
thường xuyên. Tuy nhiên, nếu một ô nhớ cần phải truy xuất nhiều lần trong một 
chương trình thì quá trình nhận địa chỉ (2 byte) sẽ phải thực hiện nhiều lần. Điều này 
sẽ không hiệu quả. 
Để giải quyết vấn đề này, ta thực hiện lưu trữ địa chỉ của ô nhớ cần truy xuất 
trong một thanh ghi con trỏ, chỉ số hay thanh ghi cơ sở (BX, BP, SI hay DI). Ngoài ra, 
ta có thể sử dụng độ dời bù 2 bằng cách cộng vào các thanh ghi để dời đi so với vị trí 
được các thanh ghi chỉ đến. 
Tài liệu vi xử lý Tổ chức hệ thống vi xử lý 
Phạm Hùng Kim Khánh Trang 43 
Bảng 2.13: 
Địa chỉ hiệu dụng (EA – Effective Address) Cách định địa chỉ 
Độ dời Thanh ghi nền Thanh ghi chỉ số
Gián tiếp thanh ghi 
Có chỉ số 
Có nền 
Có nền và chỉ số 
Có nền và chỉ số với độ dời 
Không 
Không 
-128 ÷ 127 
-128 ÷ 127 
Không 
-128 ÷ 127 
BX hay BP 
Không 
Không 
BX hay BP 
BX hay BP 
BX hay BP 
Không 
SI hay DI 
SI hay DI 
Không 
SI hay DI 
SI hay DI 
Như vậy, một độ dời có thể được cộng vào thanh ghi nền và kết quả này được 
cộng tiếp vào thanh ghi chỉ số. Địa chỉ thu được gọi là địa chỉ hiệu dụng EA. 
Ngoài ra ta cũng có thể viết cách định địa chỉ gián tiếp như sau: 
MOV AX,table[SI] 
Trong đó table là nhãn gán cho một vị trí ô nhớ nào đó. Lệnh này sẽ truy xuất 
phần tử thứ SI trong dãy table (giả sử SI = 2 thì sẽ truy xuất phần tử thứ 2). Ta cũng có 
thể viết lệnh trên như sau: 
 MOV AX,[table + SI] 
Chú ý rằng các đoạn mặc định cho các cách định địa chỉ gián tiếp là đoạn stack 
khi dùng BP, là đoạn dữ liệu khi dùng BX, SI hay DI. 
VD: Lệnh: 
MOV AH,10h thực hiện định địa chỉ tức thời 
MOV AX,[BP + 10] thực hiện định địa chỉ có nền 
MOV AH,[BP + SI] thực hiện định địa chỉ có nền và có chỉ số 
4.5. Định địa chỉ chuỗi 
Chuỗi là một dãy liên tục các byte hay word lưu trữ trong bộ nhớ dưới dạng các 
ký tự ASCII. 8086/8088 có các lệnh dùng để xử lý chuỗi, các lệnh này sử dụng cặp 
thanh ghi DS:SI để chỉ nguồn chuỗi ký tự và ES:DI để chỉ đích chuỗi. Lệnh MOVSB 
sẽ chuyển byte dữ liệu nguồn đến vị trí đích trong đó SI và DI sẽ tăng hay giảm tuỳ 
theo giá trị của DF (xem 2.3.4 và bảng 2.13) 
4.6. Thay đổi thanh ghi đoạn mặc định 
Như đã nói ở phần trên, khi sử dụng các lệnh định địa chỉ thanh ghi, ta chỉ cần 
dùng các thanh ghi để xác định độ lệch còn các thanh ghi đoạn thì được hiểu mặc định. 
Ví dụ như ta dùng lệnh MOV AH,[BP] thì sẽ đưa dữ liệu tại ô nhớ SS:BP vào thanh 
ghi AH. Trong trường hợp không muốn dùng thanh ghi đoạn mặc định, ta có thể thay 
đổi bằng cách thêm tên thanh ghi đoạn vào để loại bỏ thanh ghi đoạn mặc định. Ví dụ 
lệnh MOV AH,CS:[BP] sẽ đưa dữ liệu tại CS:[BP] vào AH. 

File đính kèm:

  • pdfVi_Xu_Ly_2.pdf