Part 2: Register (Thanh ghi)
- Như tên gọi chúng sử dụng vào việc thao tác dữ liệu (thực hiện nhanh hơn so với thao tác trực tiếp trên bộ xử lý).
- Các thanh ghi được chia thành 2 byte cao/thấp tương ứng H/L (như AL là byte thấp, AH byte cao).
1. AX – Accumulator Register:
- Thực hiện các lệnh số học, login, chuyển dữ liệu và tạo ra mã máy ngắn nhất.
- Với các thao tác nhân/chia đa phần các toán hạng đa phần được lưu ở đây. Như MUL BX --> AX = AX * BX
- Việc Input/Output cũng được sử dụng với thanh ghi này.
2. BX – Base Register:
- Thanh ghi được dùng cho việc ghi địa chỉ. Sẽ nói rõ hơn ở các phần sau.
3. CX – Count Register:
- Sử dụng làm biến đếm cho vòng lập, dịch, xoay bit.
4. DX – Data Register:
- Sử dụng cho việc nhân/chia hoặc In/Output.
5. Các thanh ghi đoạn CS, DS, ES, SS: - Code, Data, Stack được nạp vào các đoạn bộ nhớ gọi là Code Segment, Data Segment, Stack Segement.
- Các thanh ghi CS, DS, SS chứa địa chỉ Code Segment, Data Segment, Stack Segement. Còn ES (Extra Segment) được sử dụng cho việc truy cập đến Code Segment thứ 2.
6. Các thanh ghi con trỏ và chỉ số SP, BP, SI, DI:
- Được sử dụng nhằm trỏ tới các ô nhớ, tương ứng việc chứa offset ô nhớ.
- Ngoài ra còn được dùng cho tính toán số học và một số việc khác.
a. SP – Stack Pointer: Kết hợp với Register SS nhằm truy trỏ đến đoạn ngăn xếp.
b. BP – Base Pointer: Chủ yếu nhằm việc truy cập dữ liệu ngăn xếp ngoài ra còn có thể truy cập dữ liệu trong các đoạn khác. (SP chỉ truy cập ngăn xếp).
c. SI – Source Index: Trỏ đến ô nhớ trong Code Segment chỉ định bằng DS.
d. DI – Destination Index: Tương tự SI.
SI, DI được sử dụng trong các thao tác dời chuỗi. Trong đó SI trỏ chuỗi nguồn, DI trỏ chuỗi đích.
7. Thanh ghi con trỏ lệnh IP:
- Sử dụng trong việc truy cập đến các lệnh (CS chứa Address đoạn lệnh tiếp theo, IP chứa Offset).
- Một lệnh sau khi được thực hiện xong, thanh ghi cập nhật lại giá trị để trỏ tiếp đến lệnh next.
- Vì tính quan trọng trong việc trỏ đến các lệnh sẽ được xử lý, do đó IP không sử dụng được trong các lệnh thông thường.
II. Các thanh ghi cờ (Flag):Mục đích các Registers này như tên chúng nói lên nhằm quản lý các trạng thái của bộ xử lý (0/1)
Ý nghĩa các cờ sẽ được nói đến ở next part .
Extension(mở rộng):
- Với bộ xử lý 8086 ta có 20 bits Physical Address tương ứng 220 = 1048576 bytes (1 Megabyte)
- Các Address này thường được biểu diễn dưới dạng số Hex. Chẳng hạn 00001…FFFFFh.
Ta thấy Address lớn nhất là FFFFFh quá lớn để có thể đặt vào các Register 16 bit. Do đó bộ xử lý sẽ chia bộ nhớ này thành các đoạn (Segments)
a. Đoạn bộ nhớ (Memory Segment):
- Mỗi đoạn bộ nhớ chứa 216 byte = 64 KB ô nhớ liên tiếp nhau được xác định bằng một địa chỉ segment tương ứng. Bắt đầu từ địa chỉ 0.
- Cũng tương ứng trên ta có địa chỉ đoạn lớn nhất là FFFFFh.
- Bên trong mỗi đoạn, các ô nhớ được gán địa chỉ gọi là Offset tính từ đầu đoạn và là con số 16 bit và max là FFFFh.
b. Segment:Offset
Qua trên ta thấy để trỏ đến 1 ô nhớ ta thông qua Segment để đến đoạn và Offset đến ô nhớ cần tìm. Và để tìm ngược lại Physical Address 20bits của ô nhớ đó ta dịch trái 4 bit cho địa chỉ đoạn (tương ứng nhân 10h) và cộng Offset
Các thanh ghi là nơi lưu giữ thông tin của bộ xử lý. Chúng được phân loại theo chức năng tương ứng (tổng cộng 13 thanh ghi)
I. Thanh ghi dữ liệu: AX, BX, CX, DX (Với Windows được mở rộng thành EAX, EBX, ECX, EDX với 32 bits):
- Các thanh ghi được chia thành 2 byte cao/thấp tương ứng H/L (như AL là byte thấp, AH byte cao).
1. AX – Accumulator Register:
- Thực hiện các lệnh số học, login, chuyển dữ liệu và tạo ra mã máy ngắn nhất.
- Với các thao tác nhân/chia đa phần các toán hạng đa phần được lưu ở đây. Như MUL BX --> AX = AX * BX
- Việc Input/Output cũng được sử dụng với thanh ghi này.
2. BX – Base Register:
- Thanh ghi được dùng cho việc ghi địa chỉ. Sẽ nói rõ hơn ở các phần sau.
3. CX – Count Register:
- Sử dụng làm biến đếm cho vòng lập, dịch, xoay bit.
4. DX – Data Register:
- Sử dụng cho việc nhân/chia hoặc In/Output.
5. Các thanh ghi đoạn CS, DS, ES, SS: - Code, Data, Stack được nạp vào các đoạn bộ nhớ gọi là Code Segment, Data Segment, Stack Segement.
- Các thanh ghi CS, DS, SS chứa địa chỉ Code Segment, Data Segment, Stack Segement. Còn ES (Extra Segment) được sử dụng cho việc truy cập đến Code Segment thứ 2.
6. Các thanh ghi con trỏ và chỉ số SP, BP, SI, DI:
- Được sử dụng nhằm trỏ tới các ô nhớ, tương ứng việc chứa offset ô nhớ.
- Ngoài ra còn được dùng cho tính toán số học và một số việc khác.
a. SP – Stack Pointer: Kết hợp với Register SS nhằm truy trỏ đến đoạn ngăn xếp.
b. BP – Base Pointer: Chủ yếu nhằm việc truy cập dữ liệu ngăn xếp ngoài ra còn có thể truy cập dữ liệu trong các đoạn khác. (SP chỉ truy cập ngăn xếp).
c. SI – Source Index: Trỏ đến ô nhớ trong Code Segment chỉ định bằng DS.
d. DI – Destination Index: Tương tự SI.
SI, DI được sử dụng trong các thao tác dời chuỗi. Trong đó SI trỏ chuỗi nguồn, DI trỏ chuỗi đích.
7. Thanh ghi con trỏ lệnh IP:
- Sử dụng trong việc truy cập đến các lệnh (CS chứa Address đoạn lệnh tiếp theo, IP chứa Offset).
- Một lệnh sau khi được thực hiện xong, thanh ghi cập nhật lại giá trị để trỏ tiếp đến lệnh next.
- Vì tính quan trọng trong việc trỏ đến các lệnh sẽ được xử lý, do đó IP không sử dụng được trong các lệnh thông thường.
II. Các thanh ghi cờ (Flag):Mục đích các Registers này như tên chúng nói lên nhằm quản lý các trạng thái của bộ xử lý (0/1)
Ý nghĩa các cờ sẽ được nói đến ở next part .
Extension(mở rộng):
- Với bộ xử lý 8086 ta có 20 bits Physical Address tương ứng 220 = 1048576 bytes (1 Megabyte)
- Các Address này thường được biểu diễn dưới dạng số Hex. Chẳng hạn 00001…FFFFFh.
Ta thấy Address lớn nhất là FFFFFh quá lớn để có thể đặt vào các Register 16 bit. Do đó bộ xử lý sẽ chia bộ nhớ này thành các đoạn (Segments)
a. Đoạn bộ nhớ (Memory Segment):
- Mỗi đoạn bộ nhớ chứa 216 byte = 64 KB ô nhớ liên tiếp nhau được xác định bằng một địa chỉ segment tương ứng. Bắt đầu từ địa chỉ 0.
- Cũng tương ứng trên ta có địa chỉ đoạn lớn nhất là FFFFFh.
- Bên trong mỗi đoạn, các ô nhớ được gán địa chỉ gọi là Offset tính từ đầu đoạn và là con số 16 bit và max là FFFFh.
b. Segment:Offset
Qua trên ta thấy để trỏ đến 1 ô nhớ ta thông qua Segment để đến đoạn và Offset đến ô nhớ cần tìm. Và để tìm ngược lại Physical Address 20bits của ô nhớ đó ta dịch trái 4 bit cho địa chỉ đoạn (tương ứng nhân 10h) và cộng Offset
In bài này