Chương 2 - Bộ xử lí Intel 8086
...

#1 - Cấu trúc bên trong của 8086
...

  • Intel 8086 là bộ vi xử lý 16 bít đầu tiên của Intel và là vi xử lý đầu tiên hỗ trợ tập lệnh x86
  • Các chương trình viết cho 8086 vẫn có thể chạy trên các hệ thống tiên tiến sau này
  • CPU Intel 8086 sử dụng một hệ thống địa chỉ 20-bit, cho phép nó truy cập đến 1MB (2^20 bytes) bộ nhớ. Điều này bao gồm cả bộ nhớ lệnh (mã lệnh), bộ nhớ dữ liệu, và ngăn xếp.
  • Vì vậy, khi bạn viết mã lệnh cho CPU 8086 (ví dụ, sử dụng trình biên dịch như MASM), bạn cần đảm bảo rằng tổng dung lượng của mã lệnh, dữ liệu, và ngăn xếp không vượt quá 1MB.

#1.1 - Sơ đồ khối
...

  • Sơ đồ khối của vi xử lý 8086 bao gồm hai khối chính
    • BIU (Bus Interface Unit): Thực hiện tất cả các giao tiếp với thế giới bên ngoài

      • BIU Cung cấp các tín hiệu địa chỉ, dữ liệu và điều khiển để truy cập các bộ nhớ và vào ra. Khối này cũng cho phép giao tiếp với các bộ vi xử lý khác

      • Chức năng quan trọng nhất của BIU là tự động kích hoạt quá trình lấy lệnh từ bộ nhớ sắp vào hàng đợi lệnh sẵn sàng cho EU giải mã thực hiện. Nhờ hàng đợi lệnh (Queue) quá trình lấy lệnh từ bộ nhớ thực hiện song song với các quá trình khác

      • BIU tạo ra địa chỉ vật lý cung cấp ra bên ngoài, bằng quá trình tính toán từ các địa chỉ logic quản lý trong chương trình

    • EU (Execution Unit): Giải mã và thực hiện các lệnh lấy vào từ bộ nhớ

      • Eu giải mã các lệnh từ hàng đợi lệnh bằng khối EU Control
      • Thực hiện các phép tính số học và logic bằng ALU

#1.2 - Thanh ghi
...

#1.2.1 - Thanh ghi đoạn (Segment Registers)[1]
...

  • Các thanh ghi đoạn trong CPU giống như các chỉ dẫn đường, giúp CPU biết phải tìm dữ liệu ở đâu trong bộ nhớ
    • Thanh ghi đoạn mã CS (Code - Segment) chỉ cho CPU biết chương trình đang thực thi nằm ở đâu
    • Thanh ghi đoạn dữ liệu DS (Data - Segment) cùng với thanh ghi đoạn dữ liệu phụ ES (Extra Segment) cho biết dữ liệu cần xử lý nằm ở đâu
    • Thanh ghi đoạn ngăn xếp SS (Stack - Segment) được sử dụng để lưu các giá trị trung gian hoặc các địa chỉ trở về khi gọi hàm

#1.2.2 - Thanh ghi đa năng
...

  • Trong khối EU có bốn thanh ghi đa năng 16 bit là AX, BX, CX, DX. Khi cần chứa các dữ liệu 8 bít thì mỗi thanh gh có thể tách ra thành hai thanh ghi 8 bit cao và thấp để làm việc độc lập
    • AX (accumulator): Thanh ghi tích lũy
    • BX (base): thanh ghi cơ sở, thường được dùng để chứa địa chỉ ô nhớ
    • CX (counter): Sử dụng làm bộ đếm số vòng lặp
    • DX (Data): Thanh ghi dữ liệu

#1.2.3 - Các thanh ghi con trỏ và chỉ số
...

  • IP (Instruction Pointer): Con trỏ lệnh. IP luôn trỏ vào lệnh tiếp theo sẽ được thực hiện nằm trong đoạn mã CS (Code - Segment)
  • BP (Base Pointer): Con trỏ cơ sở - sử dụng với đoạn ngăn xếp
  • SP (Stack Pointer): Con trỏ ngăn xếp. SP luôn chứa địa chỉ đỉnh ngăn xếp
  • SI (Source Index): Thanh ghi chỉ số nguồn. SI thường dùng chứa địa chỉ ô nhớ nguồn trong các thao tác chuyển dữ liệu
  • DI (Destination Index): Thanh ghi chỉ số đích. DI thường dùng chứa địa chỉ ô nhớ đích trong các thao tác chuyển dữ liệu
Info

Mỗi thanh ghi trong CPU, bao gồm cả các thanh ghi đoạn chỉ có thể lưu trữ một giá trị tại một thời điểm. Khi một giá trị mới được ghi vào thanh ghi, giá trị cũ sẽ bị thay thế

#1.2.4 - Thanh ghi cờ FR (Flag register)
...

  • Ý nghĩa của các loại cờ
    • ZF (Zero Flag): Cờ Zero, ZF=1 nếu kết quả=0 và ZF=0 nếu kết quả<>0
    • SF (Sign Flag): Cờ dấu, SF=1 nếu kết quả âm và SF=0 nếu kết quả dương
    • CF (Carry Flag): Cờ nhớ, CF=1 nếu có nhớ/mượn, CF=0 trong trường hợp khác
    • AF (Auxiliary Cary Flag): Cờ nhớ phụ, AF=1 nếu có nhớ/mượn ở nửa thấp của toán hạng
    • OF (Overflow Flag): Cờ tràn, OF=1 nếu xảy ra tràn, OF=0 trong trường hợp khác
    • PF (Parity Flag): Cờ chẵn lẻ, PF=1 nếu tổng số bit 1 trong kết quả là lẻ và PF=0 nếu tổng số bit 1 trong kết quả là chẵn
    • IF (Interrupt Enable Flag): Cờ ngắt, IF=1: cho phép ngắt, IF=0: cấm ngắt
    • DF (Direction Flag): Cờ hướng, DF = 0 là cờ tiến, DF = 1 là cờ lùi

#2 - Kỹ thuật phân đoạn bộ nhớ trong CPU 8086
...

Kỹ thuật phân đoạn bộ nhớ trong CPU 8086 hoạt động như sau

  1. Phân đoạn bộ nhớ: Bộ nhớ được chia thành các đoạn (segment). Mỗi đoạn có thể chứa tối đa 64KB dữ liệu
  2. Thanh ghi đoạn: Các thanh ghi đoạn (CS, DS, SS, ES) trỏ đến địa chỉ bắt đầu của các đoạn. Địa chỉ này còn gọi là địa chỉ cơ sở
  3. Địa chỉ lệch (Offset): Địa chỉ của các ô nhớ khác nằm trong đoạn được xác định bằng địa chỉ lệch (0000h-FFFFh)
  4. Địa chỉ logic: Mỗi lần CPU muốn truy cập bộ nhớ, nó phải cung cấp một địa chỉ logic (logical address) gồm 2 phần: một phần là Segment và một phần là Offset. Segment xác định đoạn mà CPU muốn truy cập, còn Offset xác định vị trí cụ thể trong đoạn đó
  5. Địa chỉ vật lý: Để chuyển đổi từ địa chỉ logic sang địa chỉ vật lý (physical address), CPU 8086 sử dụng công thức sau: Physical Address = Segment * 16 + Offset

  1. Phân đoạn bộ nhớ giúp quản lý bộ nhớ một cách hiệu quả hơn, đặc biệt khi làm việc với các chương trình lớn. Mỗi chương trình hoặc phần của chương trình có thể được lưu trữ trong một đoạn bộ nhớ riêng biệt, giúp cô lập nó từ các chương trình khác và giảm thiểu khả năng xảy ra lỗi. Vì vậy, khi một chương trình được nạp vào bộ nhớ và bắt đầu chạy, nó sẽ thiết lập giá trị cho các thanh ghi đoạn để chỉ định các đoạn bộ nhớ mà nó sẽ sử dụng↩︎