Bộ vi xử lý 8088/8086 và lập trình hợp ngữ x86

Chia sẻ: ptitd04_vt

Thanh ghi (Register) Là các phần tử nhớ đặc biệt bên trong bộ vi xử lý. các thanh ghi luôn có kích thước bằng nhau, kích thước này cũng chính là độ

Bạn đang xem 7 trang mẫu tài liệu này, vui lòng download file gốc để xem toàn bộ.

Nội dung Text: Bộ vi xử lý 8088/8086 và lập trình hợp ngữ x86

Bộ vi xử lý 8088/8086 và lập trình hợp ngữ x86
3.1 Thanh ghi (Register)

Là các phần tử nhớ đặc biệt bên trong bộ vi xử lý. các thanh ghi luôn có kích thước
bằng nhau, kích thước này cũng chính là độ rộng của data bus bên trong bộ xử lý.
8088 là bộ vi xử lý 16 bit do đó các thanh ghi của 8088 đều có kích thước 16 bit.

Một số tác vụ đặc biệt như nhân hay chia, kết quả bắt buộc phải đặt trong thanh
ghi
Một số thanh ghi chỉ dùng để xác định địa chỉ cho bộ xử lý
Các tác vụ trên thanh ghi nhanh hơn nhiều so với các tác vụ trên bộ nhớ
Bộ vi xử lý 8088 có 14 thanh ghi 16 bit chia thành nhóm theo chức năng như sau:

Nhóm thanh ghi đa dụng (General registers):
F E D C B A 9 8 7 6 5 4 3 2 1 0
AX AH AL
BX BH BL
CX CH CL
DX DH DL

Nhóm thanh ghi chỉ mục và con trỏ (Index & Pointer registers):
F E D C B A 9 8 7 6 5 4 3 2 1 0
SI SI
DI DI
BP BP
SP SP

Nhóm thanh ghi phân đoạn (Segment registers):
F E D C B A 9 8 7 6 5 4 3 2 1 0
DS DS
ES ES
SS SS
CS CS

Thanh ghi cờ hiệu:
F E D C B A 9 8 7 6 5 4 3 2 1 0
Flag O D I T S Z A P C

Thanh ghi contrỏ lệnh (Instruction Pointer) :
F E D C B A 9 8 7 6 5 4 3 2 1 0
Flag IP
3.1.1 Nhóm thanh ghi dữ liệu (Data registers):

AX,BX,CX,DX hay là AH,AL,BH,BL,CH,CL,DH,DL
Đóng vai trò chủ yếu như là các phần tử nhớ cơ bản trong các quá trình tính
toán. Tham gia vào các tác vụ tính toán của bộ xử lý. Có thể sử dụng như là
một thanh ghi 16 bit hoặc hai thanh ghi 8 bit nối liền nhau.

3.1.2 Nhóm thanh ghi chỉ mục và con trỏ (Index & Pointer registers):

SI,DI,BP,SP
Có thể sử dụng như các thanh ghi đa dụng, ngoài ra còn đóng vai trò làm chỉ
mục khi xác dịnh địa chỉ theo offset của bộ xử lý.

- SI và DI là hai thanh ghi chỉ mục để thực hiện các tác vụ chuỗi
- BP và SP là hai thanh ghi con trỏ để thao tác trên cấu trúc STACK

3.1.3 Nhóm thanh ghi phân đoạn (Segment registers):

DS,ES,SS,CS
Không thể tham gia vào các tác vụ tính toán, thường chỉ dùng để xác định
các địa chỉ phân đoạn.

- DS: Data segment register
- ES: Extra segment register
- SS: Stack segment register
- CS: Code segment register

3.1.4 Thanh ghi con trỏ lệnh (Instruction Pointer register):

IP
Không thể tham gia vào các tác vụ tính toán, không thể gán giá trị trực tiếp,
cùng với CS tạo thành địa chỉ mã lệnh sẽ thực hiện của CPU

3.1.5 Thanh ghi cờ hiệu (Flag register):

Flag
Không thể tham gia vào các tác vụ tính toán, không thể gán giá trị trực tiếp,
chỉ dùng để ghi nhận hoặc chỉ định các trạng thái làm việc của CPU.

3.2 Địa chỉ (Memory address)

Các lệnh của bộ xử lý thao tác trực tiếp lên các đối tượng chủ yếu là thanh ghi và
bộ nhớ . Các thanh ghi dược xác định bằng tên , các phần tử thuộc bộ nhớ được
xác định bằng địa chỉ. Các bộ xử lý thuộc dòng họ x86 xác định địa chỉ bằng hai giá
trị 16 bit gọi là segment và offset. Địa chỉ vật lý tương ứng được tính theo công
thức :

Memory_Address = Segment * 10h + Offset
20 bit 16 bit 16 bit


Một địa chỉ vật lý có thể biểu diễn thành nhiều cặp segment và offset khác nhau.
Thí dụ: 0040:006C 0000:046C 0020:026C
là các biểu diễn của dịa chỉ vật lý 20 bit 00046C.

3.2.1 Segment:

Segment là một đoạn bộ nhớ có kích thước tối đa 64KB (16 bit offset) và có
thể bắt đầu tại các địa chỉ chia chẵn cho 16 (10h) trên toàn bộ vùng nhớ
1MB (20 bit).

Trong hầu hết các tác vụ của bộ xử lý 8088, segment dược xác định gián
tiếp qua các thanh ghi segment DS , ES , SS , CS . Khi cần sử dụng
segment nào , phải gán giá trị tương ứng cho các thanh ghi segment . Lúc đó
các địa chỉ được thể hiện thành dạng Segment:offset
Thí dụ: CS:Offset , DS:Offset

3.2.2 Offset:

Offset là một cự ly (16 bit) so với điểm đầu của một segment.
Các cách mô tả offset:
[Const] , [BX] , [BP] , [SI] , [DI]
[BX+Const] , [BP+Const] , [SI+Const] , [DI+Const]
[BX+SI+Const] , [BX+DI+Const] , [BP+SI+Const] , [BP+DI+Const]

Const là một hằng số

* Nhận xét: Offset có thể mô tả bằng một tổng của : Hằng số 16 bit và các
thanh ghi chỉ mục BX, BP, SI, DI . Trong đó các cặp BX và BP , SI và DI
không được phép cùng xuất hiện


3.3 Các lệnh cơ bản

Các lệnh của bộ vi xử lý 8088 dưới đây sẽ được mô tả theo dạng thức:
Tên_Lệnh [Đích [, Nguồn]]

Đích (Dest) có thể là tên một thanh ghi (Reg) , một địa chỉ trong bộ nhớ (Mem),
một vị trí trong chương trình (Label)

Nguồn (Src) có thể là tên một thanh ghi (Reg) , một địa chỉ trong bộ nhớ (Mem),
một hằng số (Const)
Đích và Nguồn không đồng thời là hai địa chỉ trong bộ nhớ (Mem)

3.3.1 Lệnh MOVE

MOVE ,

Giá trị của Src dược gán (assign) vào Dest

Không thể MOVE :
- Hai thanh ghi segment
- Hằng số vào thanh ghi segment
- Bất cứ gia trị nào vào các thanh ghi IP và Flag

3.3.2 Lệnh XCHG

XCHG ,

Giá trị của Src và Dest đổi chỗ cho nhau
 Src và Dest chỉ có thể là Reg hoặc Addr/Mem

Không thể XCHG giữa các thanh ghi segment với nhau.

3.3.3 Lệnh INC , ADD và ADC

INC
Lấy Dest cộng với 1 rồi gán kết quả vào Dest

ADD ,
Lấy Dest cộng với Src rồi gán kết quả vào Dest

ADC ,
Lấy Dest cộng với Src và cộng thêm 1 nếu CF=1 rồi gán kết quả vào Dest

3.3.4 Lệnh DEC , SUB và SBB

DEC
Lấy Dest trừ đi 1 rồi gán kết quả vào Dest

SUB ,
Lấy Dest trừ đi Src rồi gán kết quả vào Dest

SBB ,
Lấy Dest trừ đi Src và trừ tiếp 1 nếu CF=1 rồi gán kết quả vào Dest
3.3.5 Lệnh MUL

MUL

Lấy AL nhân với Reg_8bit hoặc Mem_8bit
Kết quả (16 bit) gán vào AX

MUL

Lấy AX nhân với Reg_16bit hoặc Mem_16bit
Kết quả (32 bit) gán vào DX,AX (Theo thứ tự DH,DL,AH,AL)


3.3.6 Lệnh DIV

DIV

Lấy AX chia cho Reg_8bit hoặc Mem_8bit
Kết quả (8 bit) gán vào AL , số dư (8 bit) gán vào AH

DIV

Lấy DX,AX (32 bit) chia cho Reg_8bit hoặc Mem_8bit
Kết quả (16 bit) gán vào AX , số dư (16 bit) gán vào DX


3.3.7 Lệnh IMUL và IDIV

Giống MUL và DIV, nhưng thực hiện trên các giá trị có dấu và cho ra kết
quả có dấu


3.3.8 Lệnh AND , OR , XOR và NOT

ADD ,
OR ,
XOR ,

Lấy Dest AND/OR/XOR với Src rồi gán kết quả vào Dest

NOT

Lấy NOT của Dest gán vào Dest
3.3.9 Lệnh SHL , SHR

SHL/SHR ,1

Đẩy các bit của thanh ghi sang trái (SHL)hoặc sang phải(SHR) 1 cột (Nhân/
Chia với 2)

SHL/SHR ,CL

Đẩy các bit của thanh ghi sang trái (SHL) hoặc sang phải (SHR) n cột, với n
là giá trị chứ a trong CL (Nhân/Chia với 2n )

Kết thúc lệnh , cờ hiệu CF chứa bit cuối cùng lọt ra ngoài.


Trước khi SHL  SHL AL,1  SHL AL,1
1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0
CF = 1 CF = 0

Trước khi SHR  SHR AL,1  SHR AL,1
1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 0
CF = 1 CF =1

3.3.10 Lệnh RCL , RCR

RCL/RCR ,1

Quay các bit của thanh ghi và CF sang trái hoặc sang phải 1 cột

RCL/RCR ,CL

Quay các bit của thanh ghi và CF sang trái hoặc sang phải n cột, với n là giá
trị chứ a trong CL

Trước khi RCL  RCL AL,1  RCL AL,1
1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1
CF = 0 CF = 1 CF = 0

Trước khi RCR  RCR AL,1  RCR AL,1
1 0 0 1 1 0 1 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1 0
CF = 0 CF = 1 CF =1
3.3.11 Lệnh ROL , ROR

ROL/ROR ,1

Quay các bit của thanh ghi sang trái (ROL) hoặc sang phải (ROR) 1 cột

ROL/ROR ,CL

Quay các bit của thanh ghi sang trái (ROL) hoặc sang phải (ROR) n cột, với
n là giá trị chứ a trong CL

Trước khi ROL  ROL AL,1  ROL AL,1
1 0 0 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0

Trước khi ROR  ROR AL,1  ROR AL,1
1 0 0 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 1 1 0

3.4 Các lệnh so sánh và chuyển điều khiển cơ bản

3.4.1 Lệnh JMP

JMP
CPU chuyển đến thực hiện lệnh tại .

3.4.2 Lệnh CMP và TEST

CMP ,
Thực hiện phép trừ Dest cho Src, kết quả không được giữ lại, các cờ hiệu
bị thay đổi.

Test ,
Thực hiện phép AND Dest với Src, kết quả không được giữ lại, các cờ
hiệu bị thay đổi.

Hai tác vụ này được phối hợp cùng với các lệnh chuyển điều khiển theo
điều kiện.

3.4.3 Các lệnh chuyển điều khiển theo điều kiện

Lệnh chuyển điều khiển theo điều kiện có dạng thức chung như sau :


là một tên nhãn đánh dấu một vị trí trong chương trình. Khi điều
kiện kiểm tra là đúng, CPU sẽ chuyển đến thực hiện lệnh tại vị trí
, nếu điều kiện kiểm tra là sai CPU sẽ thực hiện lệnh kế tiếp


Lệnh chuyển điều khiển theo điều kiện so sánh
Số không dấu Số có dấu So
sánh
JA JG >
JAE , JNB JGE , JNL >=
JE , JZ JE , JZ =
JBE , JNA JLE , JNG
Đề thi vào lớp 10 môn Toán |  Đáp án đề thi tốt nghiệp |  Đề thi Đại học |  Đề thi thử đại học môn Hóa |  Mẫu đơn xin việc |  Bài tiểu luận mẫu |  Ôn thi cao học 2014 |  Nghiên cứu khoa học |  Lập kế hoạch kinh doanh |  Bảng cân đối kế toán |  Đề thi chứng chỉ Tin học |  Tư tưởng Hồ Chí Minh |  Đề thi chứng chỉ Tiếng anh
Theo dõi chúng tôi
Đồng bộ tài khoản