Xây dựng tập lệnh opcode địa chỉ toán hạng 1 địa chỉ kết quả địa chỉ lệnh kế địa chỉ toán hạng hiểu ngầm để bỏ vùng này quá dài Các phương pháp định địa chỉ toán hạng... - làm ngắn câu l
Trang 1CHƯƠNG 4
Tổ chức CPU
Trang 2ACC ← ACC - toán hạng
ACC ← ACC - toán hạng - CF
Tăng
Toán hạng ← Toán hạng + 1
Giảm
Toán hạng ← Toán hạng - 1 (không ảnh hưởng CF)
So sánh Nhân Chia
ACC ← ACC / toán hạng R2 ← ACC mod toán hạng
R2,ACC ← ACC * toán hạng
Trang 40 0 0 1 1 1 1
Kết quả = 00000000
Xét các bit của số 0011 từ trái sang
Dịch trái kết quả 1 bit
Nếu bit = 1 thì kết quả = kết quả + 0101
ngược lại không làm gì cả
Hết bit của số 0011 thì ngưng
Kết quả chính là tích số
Giải thuật
bắt đầu : kết quả = 00000000
dịch trái 1 bit = 00000000 b3 = 0 : kết quả = 00000000
dịch trái 1 bit = 00000000 b2 = 0 : kết quả = 00000000
dịch trái 1 bit = 00000000 b1 = 1 : kết quả = 00000000+0101
dịch trái 1 bit = 00001010 b0 = 1 : kết quả = 00001010+0101
hết bit : kết quả = 00001111
Trang 5Xây dựng tập lệnh
opcode
(địa chỉ) toán hạng
1
địa chỉ kết quả
địa chỉ lệnh kế
(địa chỉ) toán hạng
hiểu ngầm để bỏ vùng này
quá dài
Các phương pháp định địa chỉ toán hạng
Trang 6- làm ngắn câu lệnh
- đơn giản hóa câu lệnh
- truy xuất toán hạng nhanh
- làm câu lệnh có tính linh động
Dựa vào một trong các đặc tính sau
8
phương pháp
Trang 7dấu ( ) cho biết dùng phương pháp trực tiếp
ACC ← (7000) giải thích
Địa chỉ trong lệnh là địa chỉ ô nhớ chứa toán hạng
Trang 82 dấu ( ) cho biết dùng
phương pháp gián tiếp
R1 ← R1 + ((7000)) giải thích
Địa chỉ trong lệnh là địa chỉ ô nhớ chứa địa chỉ toán hạng
Trang 9tức thời
R1
bộ nhớ lệnh
R1 ← 23 giải thích
Toán hạng nằm trong lệnh
13
15
23
Trang 10IX và dấu + cho biết dùng
phương pháp chỉ số
ACC ← (IX + 10) giải thích
Địa chỉ toán hạng là tổng của nội dung thanh ghi chỉ số với độ dời trong lệnh
Trang 11tương đối
bộ nhớ lệnh
PC và dấu + cho biết dùng
phương pháp tương đối
ACC ← (PC + 6) giải thích
Địa chỉ toán hạng là tổng của nội dung thanh ghi PC với độ dời trong lệnh
Trang 12thanh ghi
ACC
bộ nhớ lệnh
ACC ← R1 giải thích
Toán hạng nằm trong thanh ghi
Trang 13gián tiếp qua thanh ghi
ACC
bộ nhớ lệnh
ACC ← (R1) giải thích
Thanh ghi chứa địa chỉ ô nhớ chứa toán hạng
dấu () cho biết dùng
phương pháp gián tiếp
thanh ghi để truy xuất
toán hạng bộ nhớ
Trang 14stack
ACC
stack lệnh
ACC ← (SP) giải thích
Thanh ghi SP chứa địa chỉ ô nhớ chứa toán hạng
Trang 15Các nhóm lệnh của tập lệnh Chuyển dữ liệu
Xử lý dữ liệu Chuyển điều khiển
Quản lý trạng thái
Bên trong
Bộ nhớ Xuất nhập
Số học Luận lý Dịch, quay
IO
IO mapped
IO
Nhảy Gọi
Tuyệt đối (Địa chỉ) Tương đối (PC+n) Không điều kiện (Luôn luôn nhảy)
Có điều kiện (Lúc nhảy lúc không) Trực tiếp (PC = địa chỉ)
Gián tiếp (PC = M/R)
Tác động
cờ
Trở về Ngắt quãng
Nhảy nhưng có lưu địa chỉ trở
về vào stack
Lập xóa cờ Đặc biệt
Trang 16Memory mapped
IO
IO mapped
+ Dùng chung mạch giải mã địa chỉ với bộ nhớ
+ Truy xuất cổng xuất nhập bằng lệnh bộ nhớ
mapped
mapped mapped
mapped
Trang 17Mã hóa lệnh
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Opcode Địa chỉ 1 Địa chỉ 2 Địa chỉ 3
Chỉ được tối đa 16 lệnh 3 địa chỉ (0000 ÷ 1111)
Trang 18(thêm được 32 lệnh 1 địa chỉ) 61 lệnh
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Opcode Địa chỉ 1
1 1 1 1 1 1 1 ××××
Bớt tiếp tổ hợp cuối của lệnh 1 địa chỉ (1111 1111 1111) còn 31 lệnh 1 địa chỉ
(thêm được 16 lệnh 0 địa chỉ)
Trang 19CPU 8086/88 :
Vi xử lý 16 bit
Tuyến địa chỉ : A19 ÷÷÷÷ A0 ⇒ Quản lý 1MB bộ nhớ (100 000H)
địa chỉ bộ nhớ 00000 ÷÷÷÷ FFFFF Tuyến dữ liệu : D15 ÷÷÷÷ D0 (8086) / D7 ÷÷÷÷ D0 (8088)
Thực tế sử dụng tuyến địa chỉ dữ liệu chung : AD 7 ÷÷÷÷ AD 0 ⇒ Cần mạch tách tuyến
DT/R DEN
Trang 20Bộ thanh ghi tổng quát (8 từ 16 bit)
Khối điều khiển và định thì (Execution Unit)
ALU
16 bit
Thanh ghi cờ
Bộ thanh ghi đoạn và IP (5 từ 16 bit)
Khối giao tiếp BUS
Tuyến địa chỉ Tuyến dữ liệu
INTA, RD, WR DT/R, DEN ALE, M/IO
INTR, NMI, TEST CLK, RESET, READY
MN/MX HOLD HLDA
Trang 21Thanh ghi trạng thái (cờ)
Bộ thanh ghi đa dụng Bộ thanh ghi đoạn
Accumuator Base
Counter Data Source index Destination index Base pointer Stack pointer
Code segment Data segment Stack segment Extra segment
Trang 22* Dùng thanh ghi đoạn chứa segment
* Dùng thanh ghi đa dụng chứa offset
Trang 23*Đổi địa chỉ luận lý ra địa chỉ vật lý :
Địa chỉ vật lý = (Segment * 16) + Offset
0FFFF 1000F 1001F
Trang 24C¾c cặp thanh ghi mặc ½ịnh :
CS : IP địa chỉ lệnh kế
SS : SP địa chỉ đỉnh stack
DS : SI địa chỉ đầu chuỗi nguồn (chỉ trong lệnh xử lý chuỗi)
ES : DI địa chỉ đầu chuỗi đích (chỉ trong lệnh xử lý chuỗi)
Truy xuất biến bộ nhớ : địa chỉ hiệu dụng (Effective Address)
Offset : là tổ hợp của 3 thành phần trong ngoặc vuông [ ]
Trang 25CLK M/IO
A 19 -A 16
ALE
AD15-AD0
RD DT/R DEN
Trang 26Chu kỳ máy đọc bộ nhớ
CLK M/IO
A19-A16
ALE
AD 15 -AD 0
RD DT/R
DEN
Dữ liệu Địa chỉ
Địa chỉ
Chu kỳ máy nhập
Trang 27Chu kỳ máy ghi bộ nhớ
CLK M/IO
A 19 -A 16
ALE
AD 15 -AD 0
WR DT/R
DEN
Dữ liệu Địa chỉ
Địa chỉ
Chu kỳ máy xuất
Trang 28Bảng vector ngắt 00024h
36 09 7C 00 2A E4 00 F0 5B E0 00 F0
76 2A 00 30 5B E8 00 F0
Truy xuất vector ngắt
Trang 29Lệnh MOV (chuyæn)
Thanh ghi/bî nhð ½än/t÷ thanh ghi
1 0 0 0 1 0 d w mod reg r/m Töc thñi ½än thanh ghi/bî nhð
1 1 0 0 0 1 1 w mod 0 0 0 r/m dữ liệu dữ liệu nếu w=1 Töc thñi ½än thanh ghi
1 0 0 0 1 1 0 0 mod 0 reg r/m
Nếu d = 1 thì "đến"; nếu d = 0 thì "từ"
Nếu w = 1 thì hoạt động 2 byte; nếu w = 0 thì hoạt động 1 byte
Mã hóa các byte lệnh
Trang 3016-Bit ( w=1 ) 8-Bit ( w=0 ) đoạn
Trang 31trong đó
00 DISP = 0 (*), không có độ dời thấp và độ dời cao
01 DISP = độ dời thấp mở rộng dấu đến 16 bit, không có độ dời cao
10 DISP = độ dời cao : độ dời thấp
11 r/m xem như vùng "reg"
Trang 32-a 159E:0100 mov word ptr [2000],1234 159E:0106 mov cl,ah
159E:0108 mov dx,[bp-10]
159E:010B mov [si+1000],bx 159E:010F mov cx,2000 159E:0112 mov ax,es 159E:0114 mov [1000],ds 159E:0118
-u
159E:0100 C70600203412 MOV WORD PTR [2000],1234
159E:0106 88E1 MOV CL,AH
159E:0108 8B56F0 MOV DX,[BP-10]
159E:010B 899C0010 MOV [SI+1000],BX
159E:010F B90020 MOV CX,2000
159E:0112 8CC0 MOV AX,ES
159E:0114 8C1E0010 MOV [1000],DS
159E:0118 DF8B440A3400 ESC 39,[BP+DI+0A44]TBYTE PTR [BP+DI+0034] 159E:011E 8D15 LEA DX,[DI]
-q
Trang 34CMP b,t,r/m
CMP w,t,r/m
CMP b,i
CMP w,i
JMP si,d
IN v,b
IN v,w
OUT v,b
OUT v,w
f = từ thanh ghi của CPU
Trang 35
reg16 : thanh ghi 16 bit
segreg : thanh ghi đoạn
accum : thanh ghi bộ tích lũy AX hoặc AL
mem16 : bộ nhớ 2 byte liên tiếp (địa chỉ hiệu dụng)
mem32 : bộ nhớ 4 byte liên tiếp (địa chỉ hiệu dụng)
immed : số tức thời
immed8 : số tức thời 8 bit
shortlabel : nhãn ngắn (-128 byte ÷ +127 byte)
nearlabel : nhãn trong đoạn (2 byte offset)
farlabel : nhãn ngoài đoạn (4 byte : 2 byte segment và 2 byte offset)
Các chữ viết tắt dùng trong các nhóm lệnh
Trang 36MOV reg,reg MOV mem,reg MOV segreg,reg16
MOV reg,immed MOV mem,immed (*)
MOV reg16,segreg MOV mem16,segreg
Trang 37ADD reg,reg ADD mem,reg SUB reg,reg SUB mem,reg
ADD reg,immed ADD mem,immed SUB reg,immed SUB mem,immed
ADC reg,reg ADC mem,reg SBB reg,reg SBB mem,reg
ADC reg,immed ADC mem,immed SBB reg,immed SBB mem,immed
ADC accum,immed SBB accum,immed
INC reg INC mem DEC reg DEC mem
NEG reg NEG mem CMP reg,immed CMP mem,immed
CMP accum,immed
AAM AAD
Nhóm lệnh số học
Trang 38NOT reg NOT mem
AND reg,reg AND mem,reg OR reg,reg OR mem,reg
AND reg,immed AND mem,immed OR reg,immed OR mem,immed
AND accum,immed OR accum,immed
TEST reg,reg TEST mem,reg XOR reg,reg XOR mem,reg
TEST reg,immed TEST mem,immed XOR reg,immed XOR mem,immed
TEST accum,immed XOR accum,immed
SHL reg,1 SHL mem,1 SHR reg,1 SHR mem,1
SHL reg,CL SHL mem,CL SHR reg,CL SHR mem,CL
SAR reg,1 SAR mem,1
SAR reg,CL SAR mem,CL
ROL reg,1 ROL mem,1 ROR reg,1 ROR mem,1
ROL reg,CL ROL mem,CL ROR reg,CL ROR mem,CL
RCL reg,1 RCL mem,1 RCR reg,1 RCR mem,1
RCL reg,CL RCL mem,CL RCR reg,CL RCR mem,CL
Nhóm lệnh luận lý
Trang 39Cờ DF = 0 : tăng SI hoặc DI sau khi làm xong lệnh
Cờ DF = 1 : giảm SI hoặc DI sau khi làm xong lệnh
< Khởi động các thanh ghi DS, SI, ES, DI, CX, AL, AX và cờ DF trước khi dùng lệnh >
Trang 40CALL nearlabel CALL farlabel
JMP shortlabel JMP nearlabel JMP farlabel
Jcond shortlabel (xem slide kế)
JCXZ shortlabel
LOOP shortlabel
LOOPE/LOOPZ shortlabel LOOPNE/LOOPNZ shortlabel
INT immed8 INT 3 INTO
IRET
Nhóm lệnh chuyển điều khiển