Page | 1
Trêng ®¹i häc c«ng nghiÖp hµ néi
Khoa c«ng nghÖ th«ng tin
B¸o c¸o bµi tËp lín m«n häc
KiÕn tróc m¸y tÝnh
Nhóm Thực Hiện: Nhóm 15
Trang 1
Page | 2
Lớp: KTPM2-K6
Thành viên trong nhóm:
1. HOÀNG VĂN QUỲNH
2. NGUYỄN ĐÌNH QUÝ
3. NGUYỄN VĂN QUÝ
4. CHU THANH QUÝ
5. DƯƠNG VĂN QUÝ
Trang 2
Page | 3
BỘ VI XỬ LÝ INTEL 8086
I. LỊCH SỬ RA ĐỜI BỘ VI XỬ LÝ 8086
Cách đây 30 năm, Intel tung ra bộ vi xử lý 8086, giới thiệu kiến trúc x86, làm nền
tảng cho tất cả các PC bao gồm Windows, Mac hay Linux được sản xuất ngày nay.
Sự ra đời của bộ vi xử lý Intel 8086 năm 1978 là một sự kiện trọng đại đối với ngành
công nghiệp máy tính. Bộ vi xử lý 8086 là trung tâm của bất kỳ máy tính nào, từ
Windows, Mac hay Linux, đã biến Intel từ một công ty sản xuất chip bán dẫn nhỏ
thành một tên tuổi nổi tiếng nhất trên thế giới.
Điều ngạc nhiên về sự thành công kỳ diệu của 8086 là rất ít người kỳ vọng về nó khi
8086 còn đang được “thai nghén”. Lịch sử của bộ vi xử lý cách mạng này là một câu
chuyện kinh điển về một nhóm nhỏ các kỹ sư thiên tài có thể đạt được thành công khi
họ được tự do làm công việc nghiên cứu theo những cách sáng tạo.
Khi sự phát triển của 8086 bắt đầu vào tháng 5 năm 1976, các giám đốc điểu hành của
Mc dự 8086 l d ỏn con cng ca Morse, nhng ụng ta khụng lm vic n c.
Tham gia vo nhúm ca Morse l cỏc nhõn viờn ca Intel, bao gm Bill Pohlman, Jim
McKevitt v Bruce Ravenel, tt c ó gúp sc a 8086 bc ra th trng vo mựa hố
nm 1978.
Vt ra ngoi vic ch dng li mt s yờu cu c bn, 8086 tng thớch vi cỏc
phn mm vit cho 8080 v cú kh nng h tr 128KB b nh - cỏc nh lónh o ca
Intel khụng can thip vo cụng vic ca Morse. Bi vỡ khụng ai mong i thit k s
tn ti lõu di, khụng ro cn no ngỏng chõn cụng vic ca tụi, tụi t do lm nhng gỡ
mỡnh mun ụng núi.
ii.Tổ CHứC Bộ Xử Lý INTEL 8086
Bộ Xử Lý (CPU) INTEL 8086
1. Tổ chức tổng quát
CPU 8086 là CPU 16 bit (bus số liệu có 16 dây). Nó đợc dùng để chế tạo các máy
vi tính đầu tiên của hãng IBM. Thật ra IBM dùng CPU 8088 với đờng bus số liệu ra
ngoài là 8 bit.
Cho đến nay, CPU đã không ngừng cải tiến và đã trải qua các dạng 80186, 80286,
80386, 80486, 80586 (Pentium), Pentium Pro, Pentium II, PIII, PIV.
Các CPU tơng thích từ trên xuống (downward compatible) nghĩa là tập lệnh mới
bao gồm tập lệnh của CPU cũ và thêm nhiều lệnh mới nữa.
Hình ảnh CPU 8086:
Trang 4
Page | 5
Execution Unit (EU)
Thùc hiÖn lÖnh
Bus Interface
Unit (BIU)
Giao tiÕp Bus
AH AL
A
X
bus
Bus ngoại
ALU
(Bộ làm tính &
luận lý)
1
Hàng
chờ
2
3
CU
4
5
Thanh ghi trạ
ng
thái
6
Thanh ghi lệnh
Hình: Sơ đồ khối của CPU 8086
Ta thấy CPU 8086 chia thành 2 bộ phận chính: Bộ phận thực hiện lệnh (Execution
Unit: EU) và bộ phận giao tiếp Bus (Bus Interface Unit: BIU).
Bộ phận thực hiện lệnh EU: Kiểm soát các thanh ghi, giải mã và thi hành lệnh tức
là làm các tác vụ mà lệnh yêu cầu. Nh vậy EU làm hầu hết công việc của CPU cổ điển.
Các thanh ghi và đờng bus trong EU điều là 16 bit. EU không nối với bus hệ thống bên
ngoài, nó lấy lệnh từ hàng chờ lệnh mà BIU cung cấp. Khi có yêu cầu truy xuất bộ nhớ
hay ngoại vi thì EU yêu cầu BIU làm việc. BIU có thể tái định địa chỉ cho phép EU
truy xuất đầy đủ 1MB (8086 có 20 đờng địa chỉ ngoại).
Bộ phận giao tiếp bus (BIU): BIU thực hiện tất cả các tác vụ về bus của EU.
Trong khi EU đang thực hiện lệnh thì BIU lấy lệnh từ bộ nhớ trong và cất giữ vào trong
đỉnh của ngăn xếp.
e. Thanh ghi cờ: Phản ảnh kết quả của phép tính toán số học và luận lý, xác
định trạng thái hoạt động của CPU. Các bit trên thanh ghi cờ có ý nghĩa đợc trình bày
dới đây.
Trang 7
Page | 8
CF: thể hiện số giữ thoát ra từ bit cao nhất của thanh ghi kết quả sau một
phép tính toán.
OF: thể hiện việc tính toán vợt quá khả năng của CPU.
AF: thể hiện số giữ thoát ra từ bít thứ 4 (bit 3) của thanh ghi kết quả.
PF: bằng 1 nếu 8 bít thấp của thanh ghi kết quả một phép tính toán có số
con số 1 chẳn (và ngợc lại).
ZF: bằng 1 khi kết quả phép tính bằng 0 (và ngợc lại).
DF: có thể lập trình đợc, bằng 1 thì SI và DI giảm 1 cho mỗi vòng lặp.
IF: có thể lập trình đợc, bằng 1 cho phép ngắt.
TF: có thể lập trình đợc, bằng 1 khi cho phép chơng trình chạy từng bớc
để phục vụ sửa sai một chơng trình.
1
5
1
4
1
3
1
2
1
1
1
0
9 8 7 6 5 4 3 2 1 0
ghi đoạn 4 bit (nhân cho 16) rồi cộng vào độ dời.
Ví dụ: Đoạn CS có giá trị là 1002H, thì địa chỉ vật lý của ô nhớ K trong đoạn CS
có độ dời 500H (thờng viết CS:500H) là:
+ 10020H Vì 1002H dịch trái 4bit = 10020H
500H
10520H
Đây là địa chỉ vật lý của ô nhớ K
Trong ví dụ ta thấy đoạn CS có điểm bắt đầu ở địa chỉ vật lý 10020H. Độ
dời 500H là khoảng cách từ địa chỉ của điểm bắt đầu của đoạn CS đến ô nhớ K.
:
Ô nhớ
K
Địa chỉ vật lý của ô nhớ K: 10520H
Độ dời 500H
Điểm bắt đầu của đoạn CS
:
Chính BIU quyết định sẽ dùng đoạn nào theo tính chất của số liệu.
Nếu số liệu là mã lệnh thì BIU sẽ dùng đoạn CS.
Nếu số liệu là dữ liệu của chơng trình thì BIU sẽ dùng đoạn DS.
Nếu số liệu là dữ liệu nằm trên ngăn xếp thì BIU sẽ dùng đoạn SS.
Nếu dùng các phép tính chuỗi thì thanh ghi DI luôn chứa độ dời của ô
nhớ trong đoạn ES.
Lúc khởi động CPU 8086 đến địa chỉ vật lý cao của bộ nhớ trong (đoạn
CS=0FFFFH và độ dời 0) để lấy lệnh. Địa chỉ này ứng với địa chỉ ROM của bộ nhớ
trong.
Trang 9
Page | 10
5. Địa chỉ các ngoại vi
Các ngoại vi đều có địa chỉ riêng từ 0 đến 64 KB. CPU 8086 dùng các lệnh riêng
biệt để truy xuất ngoại vi và bộ nhớ trong. Muốn truy xuất ngoại vi, BIU chỉ cần đa địa
Reset: Khởi động lại hệ thống.
CPU 8086 có hai chế độ vận hành MAX (
MX
) và MIN (MN). Nhiệm vụ của các
chân tơng ứng với 2 chế độ vận hành nh sau:
MIN
(MN)
MAX (
MX
)
HOLD
0/ GTRQ
HALD
1/ GTRQ
WR
Lock
IOM /
2S
RDT /
1S
DEN
0S
ALE QS0
INTA
QS1
Chế độ MN (hiệu điện thế ở chân
MXMN /
cao)
DEN
(data enable): Cho phép số liệu đợc nhận vào CPU hoặc đa ra bus số liệu
0 1 0 Viết ra ngoại vi
0 1 1 Trạng thái dừng (HALT)
1 0 0 Tìm lệnh
1 0 1 Đọc bộ nhớ
1 1 0 Viết vào bộ nhớ
1 1 1 Không có hoạt động
0/ GTRQ
(request / grant): Ngoại vi tạo một xung thấp ở chân này để báo cho
CPU biết nó cần sử dụng bus hệ thống. CPU báo lại bằng một xung âm cho biết nó đã
thả nổi bus hệ thống.
1/ GTRQ
giống nh
0/ GTRQ
nhng u tiên thấp hơn.
QS0 và QS1 cho biết trạng thái của hàng chờ lệnh nh sau:
QS0 QS1 ý nghĩa
0 0 Cha có tác vụ
0 1 Byte thứ nhất của lệnh đợc thực hiện
1 0 Hàng chờ lệnh đã đầy
1 1
Byte kế tiếp của lệnh đang đợc lấy đi từ hàng chờ
lệnh
Trang 12
Page | 13
LOCK: Đây là tín hiệu báo CPU đang sử dụng bus hệ thống.
GND (ground): là chân mass (0 volt). V
cc
là hiệu điện thế nguồn 5 volt.
CPU 8086 phải dùng chung với một số vi mạch khác nh: vi mạch điều khiển bus,
vi mạch tạo xung nhịp (clock), mới tạo thành một máy vi tính.
MOV- di chuyễn dữ liệu
Cú pháp: MOV Đích, Nguồn
MOV SegReg, Reg16
MOV Reg16, SegReg
Nguồn (toán hạng nguồn): Reg, Mem, Immed.
Đích (toán hạng đích): Reg, Mem.
Ý nghĩa: Sao chép dữ liệu (xác định bởi toán hạng nguồn) vào vùng nhớ hoặc thanh
ghi ( xác định bởi toán hạng đích). Sau khi thực hiện xong thì giá trị
toán hạng nguồn và đích bằng nhau.
Lưu ý: - Lệnh MOV không ảnh hưởng tới thanh ghi trạng thái.
- Một trong hai toán hạng là thanh ghi.
Ví dụ: MOV, CX, BX : Sao chép nội dung thanh ghi BX vào thanh ghi CX. Sau
khi thực hiện xong BX=CX
MOV DX, 1234h ; DL34h, DH12h
MOV DS, AX ; DS AX
MOV AH, [1234h] ; AHM[ DS:1234h]
MOV [1235h], DX ; M[ DS:1235h] DL, M[DS:1236h]DH
MOV AH, CX ; SAI vì AH có 8 bit trong khi CX có 16 bit.
Bộ nhớ:
DS:1237h
DS:1236h
DS:1235h
DS:1234h
Hình1: mô tả lệnh MOV [1235h]. DX
Hoán chuyển dữ liệu- XCHG
Cú pháp: XCHG Đích, Nguồn ; Đích Nguồn
Nguồn, đích : reg, mem.
Trang 14
DH DL
Page | 15
- nguồn
Nguồn: Reg, Mem, Immed.
Đích: Reg, Mem.
Trang 15
1Ah 2Bh
Page | 16
Ý nghĩa: Lấy toán hạng đích (số bị trừ) trừ toán hạng nguồn (số trừ) và lưu kết quả
ở toán hạng đích
Ví dụ: ADD AL, 15 ; ALAL+15
ADD AX, DX ; AXAX+DX
SUB BX, 15h ; BXBX-15h
SUB DX, CL ; SAI vì DX là 16 bit trong khi CL chỉ có 8 bit
INC- Tăng 1 đơn vị (Increment)
cú pháp : INC đích ; đích đích +1
Đích: Reg, Mem.
Ý nghĩa : tăng nội dung toán hạng đích lên 1 đơn vị.
DEC-giảm 1 đơn vị (Decrment)
Cú pháp: DEC đích ; đíchđích-1
Đích: Reg, Mem.
Ý nghĩa: giảm nôi dung của toán hạng đích đi 1 đơn vị.
Ví dụ: INC AL ; ALAL+1
DEC AX ; AXAX-1
MUL- nhân 2 số nguyên
Cú pháp: MUL nguồn
Nguồn: Reg, Mem.
Ý nghĩa: nhân thanh ghi tích lũy với toán hạng nguồn. Tùy theo kích thước của
toán hạng nguồn mà CPU thực hiện phép nhân 8 hay 16 bit.
- Nhân 8 bit: dành cho toán hạng nguồn là 8 bit. Khi đó CPU sẽ lấy thanh ghi AL
nhân với toán hạng nguồn rồi lưu kết quả vào thanh ghi AX
Ý nghĩa: thực hiện phép toán logic (and, or, xor) theo từng bit tương ứng giữa toán
hạng đích và toán hạng nguồn, lưu giữ kết quả ở toán hạng đích.
-Lệnh TEST thực hiện kiểm tra bit, giống lệnh AND nhưng không giữ lại
kết quả mà kết quả của phép toán chỉ ảnh hưởng tới các cờ trạng thái.
Ví dụ: MOV AL, 01101110b ; AL01101110b
AND AL, 01101110b ; AL AL ∧01101110b (AL=01101110b)
XOR AX, AX ; AX AX ⊕AX (kết quả AX=0)
TEST DH, 01101110b ; Kiểm tra giá trị của 4 bit trong thanh ghi DH. Kết
quả kiểm tra sẽ ảnh hưởng tới cờ zero (ZF)
NOT- đảo bit (lấy bù 1)
Cú pháp: NOT đích ; đíchđích
Đích: Reg, Mem
Trang 17
Page | 18
Ý nghĩa: đảo ngược từng bít (lấy bù 1) toán hạng đích
Ví dụ: MOV AH, 0Fh : AH0Fh (00001111b)
NOT AH ; AH0F0h (11110000b)
SHL- dịch trái logic
Cú pháp: SHL đích, 1 ; dịch toán hạng đích sang trái 1 bit
SHL đích, CL ; dịch sang trái CL bit
Đích: Reg, Mem
Ý nghĩa: Dịch toán hạng đích sang trái, có thể dịch 1 bit hoặc nhiều hơn (CL chứa số
bit dịch). LSB được nạp vào logic 0, con MSB được dịch sang cờ Carry
(CF)
CF 7 2 1 0
0
Hình3: Dịch toán hạng đích bit sang trái 1 bit
Ví dụ: MOV AL, 01101101b ; AL= 01101101b
SHL Al, 1 ; AL=11011010b và CF=0
SHR- dịch phải logic
SAR AL,1 ; AL=00110110b và CF=1
ROL-Quay vòng sang trái
Cú pháp: ROL đích,1 ;quay vòng toán hạng đích sang trái 1 bit
ROL đích,CL ; quay vòng toán hạng đích sang trái CL vòng
Ý nghĩa: Giống SHL, nhưng thực hiện việc quay vòng, MSB dịch vào LSB
CF 7 2 1 0
Hình7:quay toán hạng đích 8 bit sang trái 1 bit.
ROR- Quay vong sang phải
Cú pháp: ROR đích,1 ;quay vòng toán hạng đích sang phải 1 bit
Trang 19
Page | 20
ROR đích,CL ; quay vòng toán hạng đích sang phải CL vòng
Ý nghĩa: Giống ROL, nhưng quay vòng sang phải, LSB vừa được dịch đến MSB
7 6 0 CF
Hình8: Quay vòng toán hạng đích 8 bit sang phải 1 bit
RCL- Quay trái qua cờ carry
Cú pháp : RCL Đích,1 ; quay vòng toán hạng qua cờ sang trái 1 bit
RCL đích,CL ; quay vòng qua cờ sang trái số vòng bằng CL
Ý nghĩa : giống như ROL, nhưng có sự tham gia của cờ carry (CF). Xem
hình 9. Như vậy CF cũng là 1 bit tham gia vào vòng quay
CF 7 2 1 0
Hình9 : Quay toán hạng đích 8 bit qua cờ sang trái 1 bit.
RCR- Quay vòng qua cờ sang phải
Cú pháp : RCR Đích,1 ; quay vòng toán hạng qua cờ sang phải 1 bit
RCR đích,CL ; quay vòng qua cờ sang phải số vòng bằng CL
Đích: Reg, Mem
Ý nghĩa : giống như RCL, nhưng quay vòng sang phải
7 6 0 CF
Hình10 : Quay toán hạng đích 8 bit qua cờ sang phải 1 bit.
4. Lệnh ra vào ngoại vi
IRET (– return from interrupt) : Trở về chương trình chính từ chương trình
phục vụ ngắt
LOCK; Khóa BUS ngoài. CPU sẽ không giao tiếp với BUS
NOP ( No operation) : Không có tác vụ
WAIT; Tạm dừng CPU cho đến khi có tín hiệu điện ở chân TEST của CPU-
8086 thì hoạt động tiếp
6. Lệnh vòng lặp
Vòng lặp là đoạn chương trình được thực hiện nhiều lần cho đến khi thỏa
mãn một điều kiện nào đó thì dừng lại, do đó vòng lặp thường được kết thúc
bằng một vòng lặp có điều kiện. Tuy nhiên ngoài các lệnh đã biết Inter 8086
còn cung cấp thêm các lệnh vòng lặp như LOOP, LOOPE, LOOPZ, LOOPNE,
LOOPNZ…các lệnh này đều có cú pháp giống nhau.
Cú pháp: LOOP đích
Đích : Reg, Mem, Immed
Ý nghĩa: tự động giảm CX một đơn vị, nếu CX khác 0 thì nhảy đến đích, ngược lại
nếu CX=0 thì không nhảy đến đích mà thực hiện lếnh sau LOOP. Nói cách
khác vòng lặp LOOP dừng lại khi CX=0. Đây là vòng lặp for có số lần lặp
lưu trữ trong CX.
Cấu trúc vòng lặp for viết bằng LOOP:
MOV CX,n ;n là số lần lặp
Nhan : ; các lệnh cần lặp nhan
LOOP nhan
Ví dụ : đoạn lệnh in ra màn hình các ký tự rừ
A Z
MOV DL, ‘A’ ; DL ‘A’
MOV CX, 26 ; AZ;26 ký tự
inkytu MOV AH,02h
INT 21h
INC DL; DL tăng lên 1 để có ký tự kế S
CALL (call: gọi): lệnh gọi chơng trình con.
CALL Nhản (hoặc tên chơng trình con)
Lệnh gọi chơng trình con là một lệnh đặc biệt vì trớc khi nhảy tới nhãn thì CPU tự
động lu địa chỉ trở về (là địa chỉ sau lệnh CALL) vào ngăn xếp.
RET (return: trở về). Lệnh kết thúc chơng trình con.
Khi gặp lệnh này thì CPU 8086 lấy địa chỉ trở về ở ngăn xếp để tiếp tục thi hành
lệnh ở chơng trình chính.
Ví dụ: Chơng trình sau sử dụng Macro, Procedure.
INCHU Macro
Trang 22
CX s ln lp
Cỏc lnh cn lp
CXCX-1
CX # 0
ZF=1?
Page | 23
mov ah,02
mov dl, 'A'
int 21h
ENDM
dulieu segment
thongbao db 'hello!$'
dulieu ends
malenh1 segment
P2 Proc far
mov ah,02
mov dl, 'C'
int 21h
ret
P2 Endp
Chuỗi lưu trữ trong bộ nhớ có địa chỉ đầu và địa chỉ cuối chính là địa chỉ của
phần tử đầu tiên và phần tử cuối trong chuỗi. Như vậy thông số của 1 chuỗi trong
bộ nhớ bao gồm: Địa chỉ đầu, địa chỉ cuối, số phần tử của chuỗi phải thỏa mãn
công thức sau.
(Số byte của phần tử x số phần tử)= ĐC cuối – ĐC đầu +1
Trong đó: (Số byte của phần tử x số phần tử)= số byte của chuỗi.
Hình: mô tả chuỗi gồm 14 phần tử, mỗi phần tử là 1 byte được lưu trữ trong
bộ nhớ bắt đầu tại địa chỉ 12h.
Đầu chuỗi 14 phần tử (14 byte nhớ) Cuối chuỗi
0 1 2 3 4 5 6 7 8 9 10 11 12 13
12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh
Hình: Chuỗi trong bộ nhớ.
Intel-8086 cung cấp nhiều lệnh xử lí chuỗi để thực hiện các thao tác như:
chuyển chuỗi, so sánh chuỗi, dò tìm trong chuỗi…Khi sử dụng những lệnh này
thì việc viết chương trình sẽ ngắn hơn và thi hành nhanh hơn là sử dụng các lệnh
MOV, CMP…trong các thao tác chuỗi. các lệnh xử lý chuỗi gồm 3 nhóm trong
bảng 7.1
Các lệnh xử lý chuỗi không có toán hạng trên dòng lệnh, nên việc sử dụng các
toán hạng mặc nhiên phải tuân thủ quy định của từng lệnh.
Trang 24
Địa chỉ đầu chuỗi Địa chỉ cuối chuỗi
Page | 25
LỆNH Ý NGHĨA
Nhóm di chuyển chuỗi
MOVSB Di chuyển chuỗi từng byte ( Move String Byte)
MOVSW Di chuyển chuỗi từng word ( Move String Word)
LODSB Nạp chuỗi từng byte ( Load String Byte)
LODSW Nạp chuỗi từng word ( Load String Word)
STOSB Ghi chuỗi từng byte (Store String Byte)
STOSW Ghi chuỗi từng word ( Store String Word)