Tải bản đầy đủ (.pdf) (39 trang)

tìm hiểu kiến trúc vi xử lý intel core 2 duo

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.5 MB, 39 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG


Bài tập lớn
Môn:Kỹ Thuật Vi Xử Lý

Đề tài:
TÌM HIỂU KIỂN TRÚC VI XỬ LÝ INTEL CORE 2 DUO
Giảng viên: Phạm Văn Cường
Lớp: D10CN3
Nhóm 4: 1. Kim Nguyệt Hà
2. Vũ Thị Dung
3. Bùi Hữu Duy
4. Vũ Văn Hải


I . Giới thiệu xuất xứ của Core 2 Duo
Nền vi xử lý thế hệ mới của Intel ( Core 2 Dual) chính thức được hãng này công bố toàn cầu
hôm 28/7/2006 với 10 loại chip cho máy tính để bàn và xách tay. Tích hợp 291 triệu bóng bán
dẫn, tiêu thụ điện năng ít hơn 40%, dòng chip được mong đợi từ lâu này có sự hỗ trợ của hơn
550 thiết kế hệ thống - lớn nhất trong lịch sử của Intel.
Vào tháng 1 năm 2006 AMD chính thức tung ra thị trường thế hệ CPU K8 sử dụng socket
AM2( socket AM2 có 940 chân).Thế hệ CPU K8 này hỗ trợ Ram DDR2 và có thêm một số tính
năng và công nghệ mới như: công nghệ máy tính ảo AMD virtualiation, công nghệ “ Integrated
Memory Controller ” giúp bảo đảm độ trễ ngắn trong quá trình CPU xử lý dữ liệu. Thời điểm đó
vi sử lý K8 của AMD được xem là bộ xử lý với giải pháp tiến bộ nhất, hiển nhiên AMD hơn hẳn
Intel về nhiều mặt : ít nhất là về mặt công nghệ Intel còn tỏ ra lạc hậu hơn so với AMD.
Trước thời gian này Intel vẫn còn đang sử dụng kiến trúc NetBurst với thế hệ Pentium 4
chạy với tốc độ 1.5Ghz trên nền Socket 423 chân.Tuy nhiên không muốn AMD vượt mặt quá lâu
Intel đã đưa ra một chiến lược công nghệ mới cho riêng mình: công nghệ Dual core ( công nghệ
2 nhân) có tích hợp thêm công nghệ Hyper Threarding ( Công nghệ Siêu phân luồng ) đã ra đời


vào năm 2002.Tiêu biểu với sản phẩm Core Duo (được biết đến với tên mã là Yonah), Core Duo
là một tên thương mại cho Pentium M processor có hai lõi xử lý và được sản xuất dưới công
nghệ 90 nm .
Với sự ra đời của công nghệ Dual Core vị thế của Intel đã được lấy lại nhanh chóng. Không
chỉ dừng lại ở đó Intel đã cho ra đời thế hệ lõi kép thứ hai với sản phẩm tiêu biểu là Core 2 Duo.
Core 2 Duo là tên thương mại cho bộ vi xử lý có tên mã là Merom (cho các máy laptop) hoặc
Conroe (cho các máy desktop), sử dụng kiến trúc mới lõi siêu nhỏ.
Ý tưởng và nền tảng cho Merom bắt đầu từ Banias, tên mã của chip Pentium M đầu tiên. Sau đó,
Dothan được giới thiệu là phiên bản Banias 90 nm. Tháng 1 năm đó chip Yonah (Core Duo) 65
nm ra đời và đến tháng 3 thì được quảng bá rộng rãi như vi xử lý lõi đôi đầu tiên cho nền di động
của Intel.
Đội thiết kế tại Haifa (Israel) do Mooly Eden (hiện là Phó chủ tịch kiêm tổng giám đốc nền
tảng di động của Intel) lãnh đạo là những người phát minh ra nền Banias và cũng là những người
phát triển vi kiến trúc Core.


Thực ra đây là kiến trúc tương tự như kiến trúc siêu nhỏ được sử dụng trong Pentium M
nhưng có thêm nhiều tính năng mới được bổ sung, như hỗ trợ SIMD instructions, công nghệ
Virtualization Technology cho phép chạy cùng lúc nhiều HĐH, tăng cường bảo vệ hệ thống
trước sự tấn công của virus (Execute Disable Bit), tối ưu tốc độ VXL nhằm tiết kiệm điện năng
(Enhanced Intel SpeedStep Technology), quản lý máy tính từ xa (Intel Active Management
Technology).
Các chip mới có 291 triệu bóng bán dẫn, 2 lõi dùng bộ nhớ đệm L2 cache (4 MB cho Core 2
Duo E6000 và T7000; 2 MB cho T5000 và phiên bản E4000). Trong tổ hợp "Core": Woodcrest
(Xeon 5100) và 2 chip Core 2 Duo Merom và Conroe thì Merom cung cấp nền tảng công nghệ
cho Conroe và Woodcrest.

Core 2 Duo được phát hành dưới dạng các sản phẩm E6000 (trước đây mang tên mã Conroe)
dành cho máy tính để bàn và dòng T5000/T7000 (tên mã trước đây là "Merom") dành cho máy
xách tay. Chữ "E" biểu thị mức tiêu thụ năng lượng 50 watt và cao hơn (dòng chip chủ đạo

E6000 thuộc nhóm tiêu thụ 65 watt); chữ "T" được dùng cho các chip tiêu thụ từ 25 đến 49 watt.
Core 2 Duo với tên mã Conroe có 291 triệu transistor, bộ nhớ đệm L2 4 MB, bus hệ thống
1066 MHz, socket 775LGA. Một số BXL thuộc dòng này:E6600 (2,4 GHz), E6700 (2,66 GHz).
Core 2 Duo với tên mã Allendale (hay Conroe-L) E6300 (1,86 GHz), E6400 (2,13 GHz) có
167 triệu transistor, bộ nhớ đệm L2 2MB, bus hệ thống 1066 MHz, socket 775LGA. Riêng
E4300 (1,8 GHz) xuất hiện năm 2007 có bộ nhớ đệm L2 2 MB, bus 800 MHz, không hỗ trợ
Virtualization Technology.
Core 2 Duo tên mã Merom dành cho MTXT có công suất tiêu thụ chuẩn TDP là 35W và gây
ấn tượng sâu sắc với công suất 5W khi chạy kiểu ULV (Ultra Low Voltage) . Intel tuyên bố bộ vi
xử lí mới Core 2 của họ chạy nhanh hơn 20% khi cùng với mức tiêu thụ điện năng so với bộ vi
xử lí Core Duo.
*Một số thông số của Merom:
- Công nghệ sản xuất: 65 nm
- Kích thước nhân: 143 mm2


- Transistors: 291 triệu
- Tốc độ xung nhịp: 1.06 GHz – 2.4 GHz
- FSB: 533 MHz – 800 MHz
- Bộ nhớ Cache L1: 32 KB + 32 KB
- Bộ nhớ Cache L2: 2 MB – 4 MB Shared
- Số tầng Pipeline: 14
- Số bộ Decoder: 1 Complex + 3 Simple
- Tốc độ giải mã nhanh nhất: 4 + 1
Các thông số chính Intel® Core™2 Duo Processor
- Kiểu chân: Soket LGA775
- Sản xuất dựa trên xử lí 65 nm.
- Tốc độ xử lý từ 1,8GHz đến >= 3,16GHz
- Tốc độ FSB: 800MHz, 1066MHz và 1333MHz
- Bộ nhớ Cache L1 cho lệnh 32 KB và dữ liệu 32KB cho mỗi lõi.

- Cache L2 từ 2MB đến 6MB dùng chung cho cả 2 nhân
- Tương thích với Memory là DDR2
- Chipset hỗ trợ là Intel 945GC, 945GT, 946PL, 946GZ, Q963, Q965, P965,G965
- Tập lệnh MMX, SSE, SSE2, SSE3.
- Hỗ trợ công nghệ Intel Virtualization (trừ Core 2 Duo E4300)
- Hỗ trợ côngnghệ Intel EM64T .
- Hỗ trợ Execute Disable Bit.
- Khả năng quản lí nguồn thông minh - Intelligent Power Capability.
- Hỗ trợ công nghệ Enhanced SpeedStep

II. Nội dung chính
A.Sơ đồ kiến trúc core
Để hiểu về các vi cấu trúc core chúng ta trở về lịch sử các dòng Core của Intel ,dòng Core 2
nhân đầu tiên của Intel là Dual core( chúng tachỉ đê cập đến dòng 2 nhân trở lên). Nó có 2 CPU
thật, hoàn chỉnh bên trong 1 con chip. Core Duo được sản xuất bằng công nghệ 65nm (tên mã là
Yonah). Core Duo dùng kiến trúc lõi siêu nhỏ gần giống với Pentium nhưng được bổ sung thêm
nhiều tính năng mới. Bộ nhớ đệm cấp 2 (Cache L2) của Core Duo được chia đều cho mỗi nhân.


Nghĩa là nếu Cache L2 là 2 MB thì nhân 1 và nhân 2 được sử dụng tối đa là 1 MB dù dư dù
thiếu ,chính vì điều này giải thích vì sao dòng dual core hao tốn điện năng và tốc độ .

Cấu trúc Dual Core
Khắc phục nhược điểm của dòng dual core intel cho ra đời dòng Core 2 duo .Core 2 duo
ngoài những tính năng mới thì cải tiến tiêu biểu nhất là việc Share dung lượng Cache L2 của 2
nhân. Nghĩa là nếu Cache L2 là 2 MB thì nhân 1 không phải dùng cố định 1 MB nữa mà nếu có
thiếu thì lấy phần dung lượng dư của nhân 2 dùng tiếp (điều này đối với Core Duo là không thể)
nên việc xử lý sẽ nhanh hơn (vì khi Core Duo xài hết 1 MB L2 Cache mà vẫn còn thiếu thì sẽ
truy xuất vào RAM để lấy dữ liệu, mà RAM thì có tốc độ truy xuất chậm hơn Cache L2). Các bộ
vi xử lý Core 2 Duo từ E7200 trở về sau đã được sản xuất theo công nghệ 45nm .



Cấu trúc Core 2 duo
Như vậy vi cấu trúc core đươc hiểu theo cách nôm na là sư cải tiến về mặt số lượng nhân và
cache.
Kiến trúc Core có 5 cổng gửi đi nhưng ba trong số chúng được sử dụng cho việc gửi các chỉ
lệnh nối micro-ops đến các khối thực thi. Điều đó có nghĩa rằng các CPU đang sử dụng kiến trúc
Core đó có thể gửi ba địa chỉ lệnh micro-ops đến khối thực thi trên một chu kỳ clock.
Kiến trúc Core cung cấp một FPU mở rộng và một IEU mở rộng (ALU) khi chúng ta mang
ra so với kiến trúc Pentium M. Điều này có nghĩa rằng kiến trúc Core có thể xử lý đến ba chỉ
lệnh số nguyên trên một chu kỳ clock,trong khi Pentium M chỉ có hai.
Sơ đồ khối chính của các khối thực thi trong kiến trúc Core.




IEU: Instruction ExecutionUnit là nơi các chỉ lệnh được thực thi. Khối này cũng được
biết đến là khối ALU (Arithmetic and Logic Unit). Các chỉ lệnh thông thường cũng được
biết là các chỉ lệnh số nguyên.



JEU: Jump Execution Unit xử lý rẽ nhánh và cũng được biết đến với tên Branch Unit.



FPU:Floating-Point Unit. Khối này chịu trách nhiệm cho việc thực thi các biểu thức toán
học floating-point và cũng cả các chỉ lệnh MMX và SSE.Trong CPU này, các FPU không
“hoàn thiện” vì một số kiểu chỉ lệnh(FPmov, FPadd và FPmul) chỉ được thực thi trên các
FPU nào đó:

o

FPadd: Chỉ có FPU này mới có thể xử lý các chỉ lệnh cộng floating-point như
ADDPS.

o

FPmul: Chỉ có FPU này mới có thể xử lý các chỉ lệnh nhân floating-point như
MULPS

o

FPmov:Các chỉ lệnh cho việc nạp hoặc copy một thanh ghi FPU, như MOVAPS
(đượcdùng để truyền tải dữ liệu đến thanh ghi SSE 128-bit XMM). Kiểu chỉlệnh
này có thể được thực thi trên các FPU, nhưng chỉ trên các FPU thứhai và thứ ba
nếu các chỉ lệnh Fpadd hay Fpmul không có trongReservation Station.



Load: khối này dùng để xử lý các chỉ lệnh yêu cầu dữ liệu được đọc từ bộ nhớ RAM.



Store Data: Khối này xử lý các chỉ lệnh yêu cầu dữ liệu được ghi vào bộ nhớ RAM.


B.Cấu tạo phần cứng CPU( Core 2 Duo)


Nhìn một cách tổng thể hệ thống trên chúng ta có thế thấy rằng vi sử lý core 2 duo bao gồm ba

thành phần chính đó là:
+ CPU là bộ sử lý trung tâm của hệ thống và nằm ở vị trí trên cùng.Các thành phần chính của
CPU gồm khối tính toán ALU , bộ sử lý trung tâm CU và các BUS hệ thống có băng thông lớn .
Chức năng chính của CPU là tiến hành các thao tác tính toán xử lý, đưa ra các tín hiệu địa chỉ,
dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa ra thông qua
các lệnh.
+ Chip Cầu Bắc(North Bridge) là IC quan trọng nhất trên Mainboard, nó quyết định độ mạnh và
giá thành của Main. Chip Cầu Bắc điều khiển trực tiếp các thành phần như :
o Điều khiển CPU
o Điều khiển bộ nhớ RAM
o Điều khiển Video Card
o Và trao đổi dữ liệu với Chip Cầu Nam.


Các thành phần do Chip Cầu Bắc thực hiện (CPU, RAM, Video Card) phải đồng bộ với nhau
và thuộc phạm vi của Chip Cầu Bắc hỗ trợ thì chúng mới doạt động được.
Trong thực tế, mỗi loại Chip Cầu Bắc chỉ hỗ trợ khoảng 2 loại CPU, 2 loại RAM và 2 loại
Video Card, nếu bạn sử dụng CPU hay RAM hay Video Card mà Chip Cầu Bắc không hỗ trợ thì
nó sẽ không hoạt động được.
+ Chíp Cầu Nam(South Bridge) còn gọi là I/O Controller Hud (ICH), là một chip đảm nhiệm
những việc có tốc độ chậm của Mainboard trong Chipset. Khác với Chip Cầu Bắc, Chip Cầu
Nam không được kết nối trực tiếp với CPU, chính xác hơn Chíp Cầu Nam kết nối với CPU thông
qua Chíp Cầu Bắc.
Vì Chíp Cầu Nam được đặt xa CPU hơn, nó được giao trách nhiệm liên lạc với các thiết bị có
tốc độ chậm hơn. Một Chip Cầu Nam điển hình thường có thể làm việc được với vài loại Chip
Cầu Bắc khác nhau. Trước đây cổng giao tiếp chung giữa Chip Cầu Bắc và Chip Cầu Nam đơn
giản là BUS PCI, hiện nay phần lớn các Chipset hiện thời sử dụng giao các giao tiếp chung được
thiết kế độc quyền có hiệu năng cao hơn.



Tên gọi “Chip Cầu Nam” bắt nguồn từ việc vẽ một kiến trúc trên sơ đồ.Nhiệm vụ chính của Chip
cầu Nam là kết nối :
o Với Chip cầu bắc
o Cổng USB 2.0
o Ổ đĩa cứng
o Và các cổng giao tiếp

C.Tập lệnh của core 2 duo

1 .TỔ CHỨC LỆNH CỦA VI XỬ LÝ Core 2 Duo
a. Dạng lệnh :
- Một lệnh của vi xử lý Core 2 Duo có dạng tổng quát như sau :
<Mã gợi nhớ> <Toán hạng đích>,<Toán hạng nguồn>
- Mã gợi nhớ giúp cho người sử dụng biết hoạt động của lệnh. Mã gợi nhớ thường là


các chữ tiếng anh viết tắt như : MOV là lệnh chuyển, ADD là lệnh cộng, AND là lệnh
và luận lý, JMP là lệnh nhảy . . .
- Toán hạng đích giữ kết quả (nếu có yêu cầu) sau khi thi hành lệnh. Toán hạng đích
có thể là thanh ghi hay bộ nhớ.
- Toán hạng nguồn có thể là thanh ghi, bộ nhớ hay một số tức thời.
- Toán hạng thanh ghi là các thanh ghi của vi xử lý 86 gồm các thanh ghi tổng quát (8
bit lẫn 16 bit) và các thanh ghi đoạn đã biết.
- Toán hạng số tức thời có thể là số trong các hệ đếm khác nhau và được viết theo qui
định như sau :
. Số hệ 2 : ××××××××B (× là 1 bit nhị phân).
Ví dụ : 01101101B, 11111111B
. Số hệ 10 : ××××× , hay ×××××D (× là một số thuộc hệ 10).
Ví dụ : 65535, 1000
. Số hệ 16 : ××××H và bắt đầu bằng số ( là một số thuộc hệ 16).

Ví dụ : 1A59H, 0E05BH
- Toán hạng bộ nhớ dùng trong tập lệnh vi xử lý 86 sử dụng phương pháp định địa chỉ tổng hợp
được gọi là địa chỉ hiệu dụng.
b. Địa chỉ hiệu dụng :
- Địa chỉ hiệu dụng là tổ hợp của 3 nhóm sau được đặt trong dấu ngoặc vuông [ ]:
. Nhóm thanh ghi chỉ số : SI, DI
. Nhóm thanh ghi nền : BX, BP
. Địa chỉ trực tiếp : số 16 bit
- Các thanh ghi trong cùng một nhóm không được xuất hiện trong cùng một địa chỉ hiệu dụng.
- Địa chỉ hiệu dụng chính là thành phần offset của địa chỉ luận lý bộ nhớ.
- Segment của địa chỉ hiệu dụng được mặc định như sau :
. Nếu không sử dụng BP trong địa chỉ hiệu dụng thì mặc định theo thanh ghi DS.
. Nếu có BP trong địa chỉ hiệu dụng thì mặc định theo thanh ghi SS.
- Các hoạt động thực hiện trên bộ nhớ thông qua địa chỉ hiệu dụng chia ra làm 2 trường hợp :
hoạt động 8 bit và hoạt động 16 bit.
- Hoạt động bộ nhớ 8 bit làm việc trên 1 byte bộ nhớ ngay vị trí chỉ ra bởi địa chỉ hiệu dụng.
- Hoạt động bộ nhớ 16 bit sẽ làm việc trên 2 byte bộ nhớ có địa chỉ kế tiếp nhau và nội dung của
chúng được ghép lại thành dữ liệu 16 bit theo qui tắc "byte cao địa chỉ cao, byte thấp địa chỉ
thấp"


- Để thuận tiện trong vấn đề giải thích lệnh, ta qui ước thêm cách diễn tả sau :
. Dữ liệu 8 bit của bộ nhớ : [địa chỉ ]
. Dữ liệu 16 bit của bộ nhớ : [địa chỉ +1,địa chỉ]
- Để xác định rõ hoạt động của bộ nhớ, ta phải dùng thêm toán tử PTR như sau :
. Hoạt động 8 bit : BYTE PTR [1000h] là tham khảo 1 byte bộ nhớ có địa
chỉ 1000h
. Hoạt động 16 bit : WORD PTR [1000h] là tham khảo đến 2 byte bộ nhớ
liên tiếp 1000h và 1001h
2. CÁC NHÓM LỆNH CỦA VI XỬ LÝ Core 2 Duo

Ký hiệu qui ước :
- Các chữ viết tắt dùng trong các nhóm lệnh :
reg : thanh ghi tổng quát.
reg16 : thanh ghi 16 bit.
segreg : thanh ghi đoạn.
accum : thanh ghi bộ tích lũy AX hoặc AL.
mem : bộ nhớ (địa chỉ hiệu dụng).
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).
a. Nhóm lệnh chuyển dữ liệu :
 Lệnh MOV :
- Dạng lệnh : MOV reg,reg MOV reg,immed
MOV mem,reg MOV mem,immed
MOV reg,mem MOV mem16,segreg
MOV reg16,segreg MOV segreg,mem16
MOV segreg,reg16
MOV DL,BH ; DL ← BH
MOV [SI+1000h],BP ; [SI+1001h, SI+1000h] ← BP


MOV DX,[1000h] ; DX ← [1001h,1000h]
MOV DX,DS ; DX ← DS
MOV ES,BX ; ES ← BX
MOV DI,12h ; DI ← 12h
MOV AL,12h ; AL ← 12h

a Lệnh PUSH :
- Dạng lệnh : PUSH reg16 PUSH segreg
PUSH mem16
- Giải thích : SP ← SP-2
[SS:SP+1,SS:SP] ← thn
 Lệnh POP :
- Dạng lệnh : POP reg16 POP segreg
POP mem16
- Giải thích : thđ ← [SS:SP+1,SS:SP] SP ← SP+2
- Tác động cờ : OF DF IF SF ZF AF PF CF
- Lấy dữ liệu từ đỉnh chồng vào toán hạng đích.
 Lệnh IN :
- Dạng lệnh : IN accum,immed8 IN accum,DX
- Giải thích : btl ← [cổng IO]
- Tác động cờ : OF DF IF SF ZF AF PF CF
- Nhập dữ liệu từ cổng xuất nhập vào thanh ghi bộ tích lũy AL hay AX. Trường
hợp AX sẽ nhập byte thấp trước, byte cao sau.
 Lệnh OUT :
- Dạng lệnh : OUT immed8,accum
OUT DX,accum
- Giải thích : [cổng IO] ← btl
- Tác động cờ : OF DF IF SF ZF AF PF CF
- Xuất dữ liệu từ thanh ghi bộ tích lũy AL hoặc AX ra cổng xuất nhập có địa chỉ 8


bit là số tức thời immed8 hay có địa chỉ 16 bit trong thanh ghi DX.
 Lệnh XLAT :
- Dạng lệnh : XLAT
- Giải thích : AL ← [DS:BX+AL]
- Tác động cờ : OF DF IF SF ZF AF PF CF

- Lệnh XLAT có ứng dụng trong mã hóa dữ liệu.
Lệnh LEA :
- Dạng lệnh : LEA reg16,mem
- Giải thích : thđ ← địa chỉ
- Tác động cờ : OF DF IF SF ZF AF PF CF
- Nạp địa chỉ hiệu dụng vào thanh ghi 16 bit.
 Lệnh LDS :
- Dạng lệnh : LDS reg16,mem32
- Giải thích : DS ← [địa chỉ+3,địa chỉ+2]
thđ ← [địa chỉ+1,địa chỉ]
- Tác động cờ : OF DF IF SF ZF AF PF CF
- Nạp 4 byte bộ nhớ (con trỏ) vào thanh ghi DS và một thanh ghi tổng quát.
 Lệnh LES :
- Dạng lệnh : LES reg16,mem32
- Giải thích : ES ← [địa chỉ+3,địa chỉ+2]thđ ← [địa chỉ+1,địa chỉ]
- Tác động cờ : OF DF IF SF ZF AF PF CF
- Nạp 4 byte bộ nhớ (con trỏ) vào thanh ghi ES và một thanh ghi tổng quát.
Lệnh PUSHF :
- Dạng lệnh : PUSHF
- Giải thích : SP ← SP - 2 [SS:SP+1,SS:SP] ← Flags
- Tác động cờ : OF DF IF SF ZF AF PF CF


- Đẩy thanh ghi cờ vào chồng.
 Lệnh POPF :
- Dạng lệnh : POPF
- Giải thích : Flags ← [SS:SP+1,SS:SP] SP ← SP + 2
- Tác động cờ : OF DF IF SF ZF AF PF CF
- Lấy thanh ghi cờ từ chồng ra.


b. Nhóm lệnh số học :
 Lệnh ADD :
- Dạng lệnh : ADD reg,reg ADD reg,immed
ADD mem,reg ADD mem,immed
ADD reg,mem ADD accum,immed
- Giải thích : thđ ← thđ + thn
- Cộng toán hạng nguồn vào toán hạng đích. Kết quả cất vào toán hạng đích.
 Lệnh ADC :
- Dạng lệnh : ADC reg,reg ADC reg,immed
ADC mem,reg ADC mem,immed
ADC reg,mem ADC accum,immed
- Giải thích : thđ ← thđ + thn + CF
- Cộng toán hạng đích với toán hạng nguồn với cờ nhớ. Kết quả cất vào toán hạng
đích. ADC dùng cho phép cộng 2 số có chiều dài nhiều byte.
 Lệnh INC :
- Dạng lệnh : INC reg INC mem
- Giải thích : thđ ← thđ + 1
- Tăng tức là cộng 1 vào toán hạng đích nhưng không ảnh hưởng cờ nhớ.
 Lệnh AAA :


- Dạng lệnh : AAA
- Giải thích : Nếu (b3b2b1b0 của AL) > 9 hoặc AF=1 thì
AL ← (AL+6) and 0Fh, AH ← AH+1, CF ← 1, AF ← 1
- Chỉnh ASCII sau phép cộng. Chỉnh kết quả trong AL thành 2 số BCD không nén trong AH và
AL.
 Lệnh DAA :
- Dạng lệnh : DAA
- Giải thích : Nếu (b3b2b1b0 của AL) > 9 hoặc AF=1 thì
AL ← (AL+6), AF ← 1

Nếu AL > 9Fh hoặc CF=1 thì
AL ← AL+60h, CF ← 1
- Chỉnh thập phân sau phép cộng. Chỉnh kết quả trong AL thành số BCD nén trong AL.
 Lệnh SUB :
- Dạng lệnh : SUB reg,reg SUB reg,immed
SUB mem,reg SUB mem,immed
SUB reg,mem SUB accum,immed
- Giải thích : thđ ← thđ - thn
- Trừ toán hạng đích cho toán hạng nguồn. Kết quả cất vào toán hạng đích.
 Lệnh SBB :
- Dạng lệnh : SBB reg,reg SBB reg,immed
SBB mem,reg SBB mem,immed
SBB reg,mem SBB accum,immed
- Giải thích : thđ ← thđ - thn - CF
. Lệnh DEC :
- Dạng lệnh : DEC reg DEC mem
- Giải thích : thđ ← thđ - 1
- Giảm tức là trừ 1 vào toán hạng đích nhưng không ảnh hưởng cờ nhớ.
 Lệnh NEG :
- Dạng lệnh : NEG reg NEG mem
- Giải thích : thđ ← bù 2(thđ)


- Lấy bù 2 toán hạng đích.
 Lệnh CMP :
- Dạng lệnh : CMP reg,reg CMP reg,immed
CMP mem,reg CMP mem,immed
CMP reg,mem CMP accum,immed
- Giải thích : thđ - thn
- So sánh. Thực hiện trừ toán hạng đích cho toán hạng nguồn, không lưu lại kết quả

mà chỉ giữ lại tác động của phép trừ lên các cờ.
 Lệnh AAS :
- Dạng lệnh : AAS
- Giải thích : Nếu (D3D2D1D0 của AL) > 9 hoặc AF=1 thì
AL ← (AL - 6) and 0Fh, AH ← AH - 1, CF ← 1, AF ← 1
- Chỉnh ASCII sau phép cộng. Chỉnh kết quả trong AL thành 2 số BCD không nén trong AH và
AL.
 Lệnh DAS :
- Dạng lệnh : DAS
- Giải thích : Nếu (D3D2D1D0 của AL) > 9 hoặc AF=1 thì
AL ← (AL - 6), AF ← 1
Nếu AL > 9Fh hoặc CF=1 thì
AL ← AL - 60h, CF ← 1
- Chỉnh thập phân sau phép trừ. Chỉnh kết quả trong AL thành số BCD nén trong AL.
 Lệnh MUL :
- Dạng lệnh : MUL reg MUL mem
- Giải thích : Toán hạng nguồn 8 bit thì : AX ← AL * thn8
Toán hạng nguồn 16 bit thì : DX AX ← AX * thn16
- Nhân hai số không dấu 8 bit hay 16 bit. Số bit thực hiện được xác định bằng chiều dài của toán
hạng nguồn.
 Lệnh DIV :
- Dạng lệnh : DIV reg DIV mem
- Giải thích : Toán hạng nguồn 8 bit thì : AL ← (AX / thn8)


AH ← số dư của (AX / thn8)
Toán hạng nguồn 16 bit thì : AX ← (DXAX / thn16)
DX ← số dư của (DXAX / thn16)
- Chia hai số không dấu.
 Lệnh IDIV :

- Dạng lệnh : IDIV reg IDIV mem
- Chia hai số có dấu. Thực hiện giống như lệnh DIV nhưng kết quả coi là số có dấu.
 Lệnh AAD :
- Dạng lệnh : AAD
- Giải thích : AL ← ((AH * 0Ah) + AL)
AH ← 0
- Chỉnh ASCII trước phép chia IDIV. Có thể dùng lệnh này để đổi số BCD không nén trong AX
ra thành giá trị nhị phân trong AL.
 Lệnh CWD :
- Dạng lệnh : CWD
- Giải thích : Nếu AX < 8000h thì DX ← 0000h
Nếu AX >= 8000h thì DX ← 0FFFFh
- Mở rộng dấu trước khi dùng lệnh chia. Đổi số 2 byte có dấu trong AX thành số 4 byte có dấu
trong DXAX.
C.Nhóm lệnh luận lý :
 Lệnh NOT :
- Dạng lệnh : NOT reg NOT mem
- Giải thích : thđ ← bÓ 1 của thđ
- Đảo hay lấy bù 1.
 Lệnh SHL/SAL :
- Dạng lệnh : SHL reg,1 SHL mem,1
SHL reg,CL SHL mem,CL
- Giải thích : thđ ← (thđ) dịch trái 1 hay nhiều bit.
- Dịch trái. Dạng SHL reg,1 dùng để dịch trái 1 bit. Dạng SHL reg,CL dùng để dịch trái nhiều
bit. Lúc đó thanh ghi CL chứa số bit cần dịch.
 Lệnh SHR :


- Dạng lệnh : SHR reg,1 SHR mem,1
SHR reg,CL SHR mem,CL

- Giải thích : thđ ← (thđ) dịch phải luận lý 1 hay nhiều bit.
- Dịch phải luận lý. Dạng có thanh ghi CL dùng để dịch nhiều bit.
 Lệnh SAR :
- Dạng lệnh : SAR reg,1 SAR mem,1
SAR reg,CL SAR mem,CL
- Giải thích : thđ ← (thđ) dịch phải số học 1 hay nhiều bit.
- Dịch phải số học. Dạng có thanh ghi CL dùng để dịch nhiều bit.
 Lệnh ROL :
- Dạng lệnh : ROL reg,1 ROL mem,1
ROL reg,CL ROL mem,CL
- Giải thích : thđ ← (thđ) quay trái không qua cờ nhớ 1 hay nhiều bit.
- Quay trái không qua cờ nhớ. Dạng có thanh ghi CL dùng để quay nhiều bit.
 Lệnh ROR :
- Dạng lệnh : ROR reg,1 ROR mem,1
ROR reg,CL ROR mem,CL
- Giải thích : thđ ← (thđ) quay phải không qua cờ nhớ 1 hay nhiều bit.
- Quay phải không qua cờ nhớ. Dạng có thanh ghi CL dùng để quay nhiều bit.
 Lệnh RCL :
- Dạng lệnh : RCL reg,1 RCL mem,1
RCL reg,CL RCL mem,CL
- Giải thích : thđ ← (thđ) quay trái qua cờ nhớ 1 hay nhiều bit.
- Quay trái qua cờ nhớ. Dạng có thanh ghi CL dùng để quay nhiều bit.
 Lệnh RCR :
- Dạng lệnh : RCR reg,1 RCR mem,1
RCR reg,CL RCR mem,CL
- Giải thích : thđ ← (thđ) quay phải qua cờ nhớ 1 hay nhiều bit.
- Quay phải qua cờ nhớ. Dạng có thanh ghi CL dùng để quay nhiều bit.


 Lệnh AND :

- Dạng lệnh : AND reg,reg AND reg,immed
AND mem,reg AND mem,immed
AND reg,mem AND accum,immed
- Giải thích : thđ ← thđ AND thn.
- Và luận lý. Xóa cờ nhớ về 0.
 Lệnh TEST :
- Dạng lệnh : TEST reg,reg TEST reg,immed
TEST mem,reg TEST mem,immed
TEST reg,mem TEST accum,immed
 Lệnh OR :
- Dạng lệnh : OR reg,reg OR reg,immed
OR mem,reg OR mem,immed
OR reg,mem OR accum,immed
- Giải thích : thđ ← thđ OR thn.
- Hay luận lý. Xóa cờ nhớ về 0.
 Lệnh XOR :
- Dạng lệnh : XOR reg,reg XOR reg,immed
XOR mem,reg XOR mem,immed
XOR reg,mem XOR accum,immed
- Giải thích : thđ ← thđ XOR thn.
- Hay ngoại luận lý. Xóa cờ nhớ về 0.
Lệnh SCAS :
- Dạng lệnh : SCASB
SCASW
- Quét chuỗi nghĩa là so sánh byte trong thanh ghi AL hay word trong thanh ghi AX với chuỗi
đích. Cặp thanh ghi ES:DI giữ địa chỉ chuỗi đích. Địa chỉ chuỗi đích được tự động tăng hay
giảm sau mỗi lần so sánh. Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý
tăng địa chỉ. DF=1 xử lý giảm địa chỉ.



- Lệnh này thường dùng kết hợp với tiếp đầu lệnh REPNE để thực hiện việc tìm kiếm một dữ
liệu trong một chuỗi. Lúc đó thanh ghi CX giữ chiều dài chuỗi.
- Có thể có hai nguyên nhân làm ngừng lệnh quét chuỗi : hoặc tìm thấy dữ liệu
trong chuỗi (ZF=1 hay CX 0), hoặc hết chuỗi mà vẫn chưa tìm thấy dữ liệu (ZF=0 hay CX=0).
 Lệnh LODS :
- Dạng lệnh : LODSB
LODSW
- Nạp chuỗi nguồn byte vào thanh ghi AL hay chuỗi nguồn word vào thanh ghi AX. Cặp thanh
ghi DS:SI giữ địa chỉ chuỗi nguồn. Địa chỉ chuỗi nguồn được tự động tăng hay giảm sau mỗi lần
nạp. Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý tăng địa chỉ. DF=1 xử lý
giảm địa chỉ.
 Lệnh STOS :
- Dạng lệnh : STOSB
STOSW
- Cất byte trong thanh ghi AL hay word trong thanh ghi AX vào chuỗi đích. Cặp thanh ghi ES:DI
giữ địa chỉ chuỗi đích. Địa chỉ chuỗi đích được tự động tăng hay giảm sau mỗi lần cất. Chiều
tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý tăng địa chỉ. DF=1 xử lý giảm địa
chỉ.

d. Chuyển điều khiển :
 Lệnh CALL :
- Dạng lệnh : CALL nearlabel CALL mem16
CALL farlabel CALL mem32
CALL reg16
- Địa chỉ trở về chính là nội dung hiện tại của cặp thanh ghi CS:IP.
- Với lệnh gọi gián tiếp qua bộ nhớ ta có thể tổ chức sắp xếp các địa chỉ chương trình con thành
một bảng trong bộ nhớ gọi là bảng nhảy. Lúc đó mỗi chương trình con sẽ được gọi theo số thứ
tự của nó trong bảng nhảy.
 Lệnh JMP :



- Dạng lệnh : JMP shortlabel JMP mem16
JMP nearlabel JMP mem32
JMP farlabel JMP reg16
- Nhảy không điều kiện. Lệnh nhảy không điều kiện thực hiện giống như lệnh gọi nhưng không
có bước lưu lại địa chỉ trở về.
- Lệnh nhảy đến nhãn ngắn shortlabel là lệnh nhảy tương đối. Nơi đến phải nằm trong phạm vi từ
-128 đến +127 so với vị trí của lệnh nhảy. Toán hạng nguồn trong lệnh chỉ là byte độ dời để
cộng thêm vào thanh ghi IP. Byte độ dời này được mở rộng dấu trước khi cộng vào thanh ghi IP.
 Lệnh RET :
- Dạng lệnh : RET RETF
RET immed8 RETF immed8
- Trở về từ chương trình con. Lệnh trở về là lệnh dùng để kết thúc một chương trình con.
- Lệnh RET để kết thúc một chương trình con gần.
- Lệnh RETF để kết thúc một chương trình con xa.
- Dạng lệnh trở về có toán hạng immed8 dùng cho các chương trình con có sử dụng thông số
trong chồng. Khi đó, toán hạng nguồn immed8 sẽ được cộng vào thanh ghi SP để chỉnh lại vị trí
đỉnh chồng sau khi gọi chương trình con, tránh thất thoát bộ nhớ dùng cho chồng.
 Lệnh nhảy có điều kiện :
- Dạng lệnh : Jcond shortlabel
- Giải thích : Nếu thỏa điều kiện thì nhảy tương đối
IP ← địa chỉ lệnh kế + độ dời (mở rộng dấu 16 bit)
ngược lại không làm gì cả (qua lệnh kế).
- Lệnh nhảy có điều kiện dùng trạng thái các cờ để làm điều kiện.
 Lệnh LOOP :
f. Lệnh JCXZ :
- Dạng lệnh : JCXZ shortlabel
- Giải thích : Nếu CX = 0 thì
IP ← địa chỉ lệnh kế + dộ dời (mở rộng dấu 16 bit)
- Nhảy nếu CX=0. Thường dùng sau LOOPE, LOOPNE, REPE, REPNE để xác định nguyên

nhân kết thúc vòng lặp.


 Lệnh INT :
- Dạng lệnh : INT immed8
INT 3
- Ngắt quãng mềm. Thực chất của lệnh ngắt quãng là gọi đến một chương trình con đặc biệt gọi
là chương trình phục vụ ngắt quãng.
- Cách thực hiện lệnh ngắt quãng chính là cách gọi xa gián tiếp qua bộ nhớ 32 bit.
- Số ngắt 1 byte immed8 cung cấp trong lệnh chính là số thứ tự của chương trình con phục vụ
ngắt quãng. Nhờ vậy nên mặc dù lệnh ngắt quãng là lệnh gọi xa nhưng lại rất ngắn.
- Bảng nhảy trong trường hợp này được gọi là bảng vector ngắt quãng. Vị trí của vector ngắt
quãng được xác định bằng cách lấy số ngắt nhân 4. Kết quả này có thể xem là địa chỉ vật lý cũng
được hoặc là địa chỉ offset lấy theo segment 0000 cũng được.
- Điểm khác biệt giữa lệnh ngắt quãng và lệnh gọi xa là thao tác cất thanh ghi trạng thái (cờ) vào
chồng PUSHF. Chính vì thế nên chương trình con phục vụ ngắt quãng phải được kết thúc bằng
một lệnh trở về khác là IRET.
- Các chương trình con phục vụ ngắt quãng thường được dùng cho các chương trình hệ thống (hệ
điều hành, chương trình giao tiếp với các thiết bị, các chương trình con sử dụng thường xuyên,
...) hơn là dùng cho chương trình của người sử dụng.
- Số ngắt cũng theo qui ước của hệ thống như sau :
00h ÷ 07h : ngắt hệ thống.
08h ÷ 0Fh, 70h ÷ 77h : ngắt cứng.
Còn lại : ngắt mềm.
- Một số ngắt thông dụng :
INT 10h : màn hình.
INT 13h : đĩa.
INT 14h : thông tin liên lạc.
INT 16h : bàn phím.
INT 17h : máy in

INT 21h : các phục vụ của MS-DOS.
INT 20h : kết thúc chương trình, trở về DOS.
- Mỗi chương trình con phục vụ ngắt quãng có thể thực hiện nhiều chức năng bên trong nghĩa là
các phục vụ được chia nhỏ ra nữa. Ví dụ ngắt phục vụ màn hình có chức năng chọn chế độ màn


hình, chức năng định vị điểm nháy (cursor), chức năng xuất ký tự ra màn hình, chức năng đồ
họa, . . .
- Thông số của chương trình phục vụ ngắt quãng thường được truyền thông qua các thanh ghi
đầu vào (input) và kết quả thi hành chương trình con sẽ giữ trong các thanh ghi đầu ra (output).
 Lệnh INTO :
- Dạng lệnh : INTO
- Giải thích : PUSHF
PUSH CS
PUSH IP
- Ngắt quãng nếu tràn (OF = 1).
 Lệnh IRET :
- Dạng lệnh : IRET
- Giải thích : POP IP
POP CS
POPF
- Trở về từ chương trình phục vụ ngắt quãng.
 Điều khiển bộ xử lý :
* Lệnh CLC :
- Dạng lệnh : CLC
- Giải thích : CF ← 0
- Xóa cờ nhớ về 0.
* Lệnh STC :
- Dạng lệnh : STC
- Giải thích : CF ← 1

- Lập cờ nhớ lên 1.
* Lệnh CMC :
- Dạng lệnh : CMC
- Giải thích : CF ← bù 1 của CF
- Lấy bù cờ nhớ.


×