SlideShare une entreprise Scribd logo
1  sur  108
Télécharger pour lire hors ligne
Gi¸o tr×nh vi xö lý


1.1. TỔNG QUAN VỀ CÁC BỘ VI XỬ LÝ CỦA INTEL
Một hệ vi xử lý được gọi là một hệ thống trong đó bao gồm:
      - Đơn vị nhập xuất: Được sử dụng để nhập và xuất số liệu, dữ liệu.
      - Đơn vị xử lý: Xử lý các dữ liệu nhập vào, sau đó xuất ra các thiết bị ra.
      - Bộ nhớ: Lưu trữ thông tin, dữ liệu trong quá trình xử lý
Tất cả các thiết bị có các chức năng như vậy đều có thể được gọi là một hệ vi xử
lý. Máy vi tính là một hệ thống vi xử lý. Một thành phần quan trọng trong hệ
thống máy vi tính, đó là bộ vi xử lý.
Trên thự tế, có rất nhiều hãng chế tạo bộ vi xử lý cho các máy vi tính như: IBM,
Intel, Cyrix, AMD, Motorola.... Nhưng thông dụng nhất vẫn là bộ vi xử lý của
Intel.
Các bộ vi xử lý của Intel được phát triển qua các thời kỳ như sau:
  Năm 1971, Intel đưa ra bộ vi xử lý 4004 với 4 bit dữ liệu, 12 bit địa chỉ; 0,8MHz
  Năm 1972, bộ vi xử lý Intel 8080 ra đời với 8bit dữ liệu, 12 bit địa chỉ; tốc độ
  xử lý 0,8-5MHz
  Năm 1974, bộ vi xử lý Intel 8085 ra đời với 8bit dữ liệu, 16 bit địa chỉ; tốc độ
  xử lý 5MHz
  Năm 1978, bộ vi xử lý Intel 8086 ra đời với 16bit dữ liệu, 20 bit địa chỉ; tốc
  độ xử lý 10MHz
  Năm 1979, bộ vi xử lý Intel 8088 ra đời nhằm mục đích giảm giá bộ vi xử lý
  và tương thích với hệ thống 8086 cũ
  Năm 1982 bộ vi xử lý 80286 ra đời với 16bit dữ liệu, 20 bit địa chỉ, tốc độ xư
  lý là 20MHz có thể định địa chỉ ở chế độ bảo vệ và chế độ thực.
  Năm 1985-1988, bộ vi xử lý 80386 ra đời với 32 bit dữ liệu và 32 bit địa chỉ
  tốc độ xử lý 33-40MHz
  Năm 1989, bộ vi xử lý 80486 ra đời với 32 bit dữ liệu và 32 bit địa chỉ tốc độ
  xử lý 50-60MHz
  Năm 1993, bộ vi xử lý Pentium ra đời với 64 bit dữ liệu, tốc độ xử lý 100MHz
Sau đó là các bộ vi xử lý Pentium Pro,Pentium II, Pentium III, Celeron, Pentium
4



Khoa CNTT                          Trang 1                                  KTMT
Gi¸o tr×nh vi xö lý


1.2. CẤU TRÚC BỘ VI XỬ LÝ 8086
1.2.1. Sơ đồ khối

           E.U (execution unit)                                           B.I.U
                                           Bus địa chỉ (20
                                                                                 Bus
                                  Accumulatbit)                   ∑              dữ liệu
   Các thanh                      or                                              (8 bit)
                                  Base
   ghi đa
   năng               Count
                                                                                  Bus
     A BXC D S B S D Data
     AXB CXDXSPBPSIDI                          Code                      Các      trong
                      Stack                    segment                   than     của
                                               Data segment              h ghi
   Các thanh          pointer                                                     CPU
   ghi con
                      Base                     Stack segment DSS E đoạn
                                                                C D SSES
                                                                CS
                                                                                  8 bit
                      pointer
                      Source                                       I
                                                                   IP    và       dữ
   trỏ và chỉ                                  Extra
                      index                                              con      liệu
   số                 Destination              segment
                                                Intruction pointer       trỏ      20
                                  index
                                                                         lệnh     bit
                                                                                  địa
                                                                                  chỉ



                    Bus dữ liệu
                ALU (16 bit)

                                                                         Logic              Bus
           Các thanh ghi tạm                                             điều               ngo
                                                                         khiển
           thời                                                                             ài


                                               Khối
                                               điều
                                               khiển
                        ALU                   của EU
                                                         Đệm lệnh (hàng đợi
                                                         lệnh)
                                                            (6 byte cho 8086)
                    Thanh ghi
                    cờ


                       Hình 1.1: Sơ đồ cấu trúc bên trong bộ vi xử lý
                       8086/8088
1.2.2. Giải thích các thành phần trong sơ đồ


Khoa CNTT                                 Trang 2                                  KTMT
Gi¸o tr×nh vi xö lý

           Khối phối ghép Bus (Bus Interface Unit - BIU)
           Khối thực hiện lệnh (Execution Unit - EU)
       • Đơn vị EU
       Đơn vị EU của 8086 và 8088 là giống nhau nó bao gồm ALU, các thanh ghi cờ,
thanh ghi đệm và các thanh ghi đa năng. Các kênh truyền dữ liệu bên trong EU đều là 16
bit.
        EU không nối trực tiếp với thế giới bên ngoài, nó lấy lệnh từ hàng đợi lệnh của
BIU. Nếu lệnh cần truy xuất bộ nhớ hoặc cổng vào/ra (là nơi liên hệ với thiết bị ngoại
vi ) thì EU yêu cầu BIU nhận hoặc gửi dữ liệu. Tất cả các địa chỉ mà BIU thao tác đều
là 16 bit, khi gửi sang cho BIU sẽ sắp đặt lại để tạo thành địa chỉ vật lý 20 bit phát ra
các chân ra địa chỉ của chip.
       •   Đơn vị BIU
       Đơn vị BIU thực hiện tất cả các thao tác với Bus mà BIU yêu cầu, ngoài ra khi
BIU đang thực hiện một lệnh, thì BIU có thể lấy lệnh từ bộ nhớ về đặt trong hàng đợi
lệnh. Hàng đợi lệnh của 8086 dài 6 byte, của 8088 dài 4 byte. Việc lấy lệnh về của
BIU và việc thực hiện lệnh của BIU thực hiện song song với nhau (trừ một số trường
hợp ngoại lệ) làm cho hiệu năng của vi xử lý tăng lên.
1.2.3. Một số khái niệm cơ bản
* Pipelining: Là một phương pháp xử lý lệnh trên một đường ống lệnh, có thể xử lý
nhiều lệnh đồng thời trong cùng một khoảng thời gian. Trong khi lệnh này đang được
xử lý thì lệnh tiếp sau nó đã được nhận vào...
Chúng ta có thể so sánh phương pháp xử lý bằng pipeline và phương pháp xử lý
dòng lệnh tuần tự như hai hình dưới đây:




a)




b)




Khoa CNTT                            Trang 3                                     KTMT
Gi¸o tr×nh vi xö lý

                       Hình 1.2. So sánh pipeline và tuần tự
                     a) Xử lý bằng Pipeline       b) Xử lý tuần tự
* CISC, RISC và VLIW
      CISC – Complex Instruction Set Computer (Máy tính với tập lệnh đầy đủ)
      RISC – Reduced Instruction Set Computer (Máy tính với tập lệnh rút gọn)
      VLIW – Very Long Instruction Word (Máy tính với từ lệnh cực dài)
Về cơ bản, công nghệ hiện nay vẫn dựa trên cơ sở bộ vi xử lý CISC và RISC.
Chúng ta có thể so sánh sơ bộ về hai công nghệ này:


                    RISC                                  CISC
        C Cấu thành từ một vài lệnh
                                              l   Đầy đủ với độ phân cấp
          đơn
                                              Đ Các lệnh được thực thi
        đ Các lệnh được thực thi bằng
                                                bằng các vi chương trình
          phần cứng
                                              b Kích thước và thời gian
        p Kích thước của một lệnh và
                                                thực hiện của các lệnh
          thời gian thực thi của mỗi
                                                khác nhau.
          lệnh gần như nhau

1.3. TẬP THANH GHI CỦA BỘ VI XỬ LÝ 8086
1.3.1. Các thanh ghi dữ liệu
       Mặc dù bộ vi xử lý có thể thao tác với dữ liệu bộ nhớ nhưng một lệnh như vậy
sẽ được thực hiện nhanh hơn (cần ít chu kỳ đồng hồ hơn), nếu dữ liệu được lưu trong
các thanh ghi. Đó cũng là nguyên nhân tại sao ngày nay các bộ vi xử lý được sản xuất
với xu hướng có nhiều thanh ghi hơn.
       Với các thanh ghi dữ liệu các byte thấp và byte cao có thể được truy nhập một
cách riêng biệt, sử dụng từng 8 bit một cách rieng rẽ. Byte cao của thanh ghi AX được
gọi là AH và các byte thấp được gọi là AL. Tương tự cho các thanh ghi BX, CX, DX
có BH, BL, CH, CL, DH, DL.
      Chức năng chuyên biệt của từng thanh ghi dữ liệu:
1. Thanh ghi AX (thanh ghi chứa- Accumulator register)




Khoa CNTT                           Trang 4                                  KTMT
Gi¸o tr×nh vi xö lý

    AX là thanh ghi được sử dụng nhiều nhất trong các lệnh số học, logic, và chuyển dữ
liệu bởi vì việc sử dụng chúng tạo ra mã máy ngắn nhất.
   Trong các phép toán nhân chia một trong các số hạng tham gia phải được chứa trong
thanh ghi AX (nếu là 16 bit) và AL (nếu là 8 bit). Các thao tác vào ra cũng sử dụng
thanh ghi AX hoặc AL.
2. Thanh ghi BX (thanh ghi cơ sở- Base register)
   Thanh ghi này ngoài việc thao tác dữ liệu nó thường chứa địa chỉ cơ sở của một
bảng dùng cho lệnh XLAT.(dịch AL thành 1 giá trị trong bảng BX)
3. Thanh ghi CX (thanh ghi đếm- Count register)
   Việc xây dựng một chương trình lặp được thực hiện dễ dàng bằng cách
sử dụng thanh ghi CX, trong đó CX đóng vai trò bộ đếm số vòng lặp (REP, LOOP).
CL được dùng làm bộ đếm trong các lệnh dịch và quay bit.
4. Thanh ghi DX (thanh ghi dữ liệu - Data register)
   DX và AX cùng được sử dụng trong các thao tác của phép nhân hoặc
chia các số 16 bit. DX còn được sử dụng để chứa địa chỉ của các cổng trong các
lệnh vào ra dữ liệu trực tiếp (In/Out).
1.3.2. Các thanh ghi đoạn: CS, DS, ES, SS
       Khối BIU đưa ra trên Bus địa chỉ 20 bit địa chỉ, như vậy 8088 có khả năng phân
biệt được 220= 1. 048. 576 = 1 Mbyte ô nhớ. Nói cách khác không gian địa chỉ của
8088 là 1 Mbyte. Trong không gian 1 Mbyte bộ nhớ này cần chia thành nhiều đoạn
khác nhau:
       Đoạn chứa chương trình
       Đoạn chứa dữ liệu và kết quả trung gian của chương trình
       Tạo ra vùng nhớ đặc biệt gọi là ngăn xếp
Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của
các đoạn trên và chúng được gọi là các thanh ghi đoạn (Segment Registers): CS, DS,
SS, ES.
      Các thanh ghi đoạn này chỉ ra địa chỉ đàu của 4 đoạn trong bộ nhớ dung lượng
lớn nhất của 4 đoạn này là 64 Kbyte. Các đoạn có thể nằm cách nhau hoặc trùm lên
nhau
      Nội dung của thanh ghi sẽ xác định địa chỉ của ô nhớ đầu tiên của đoạn, địa chỉ
này gọi là địa chỉ cơ sở. Địa chỉ của các ô nhớ khác trong cùng đoạn được tính bằng
cách cộng thêm vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch (offset)


Khoa CNTT                                 Trang 5                                KTMT
Gi¸o tr×nh vi xö lý

Địa chỉ vật lý (20 bit) của một ô nhớ được xác định như sau:
      Điạ chỉ vật lý = Điạ chỉ đoạn *10 h+ thanh ghi lệch (hay offset)
và điạ chỉ logic trong máy tính luôn được biểu diễn dưới dạng: Segment:Offset
       Tại mọi thời điểm thì chỉ những ô nhớ được định địa chỉ bởi 4 đoạn trên mới
được truy cập.
1.3.3. Các thanh ghi con trỏ và chỉ số:   SI, DI, SP, BP
       Trong 8088 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 bit. Các thanh ghi
này (trừ IP), đều có thể được dùng như các thanh ghi đa năng, nhưng ứng dụng chính
của mỗi thanh ghi là chúng được gầm định như là thanh ghi lệch cho các đoạn tương
ứng. Cụ thể như sau:
1. Thanh ghi BP: (con trỏ cơ sở - Base Pointer)
   BP luôn trỏ vào một dữ liệu nằm trong đoạn ngăn xếp SS. Địa chỉ cụ thể SS:BP
được xác định như trên.
2. Thanh ghi SP(con trỏ ngăn xếp - Stack Pointer)
   Được sử dụng kết hợp với SS để truy nhập vào đoạn ngăn xếp. SP luôn trỏ vào đỉnh
hiện thời của ngăn xếp trong đoạn ngăn xếp SS. Địa chỉ cụ thể SS:SP
3. Thanh ghi SI(chỉ số nguồn - Source Index).
      SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:SI.
Bằng cách tăng nội dung của SI chúng ta có thể truy nhập dễ dàng đến các ô nhớ liên
tiếp.
4. Thanh ghi DI (chỉ số đích - Destination Index).
   SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:DI.
Có một số lệnh gọi là các thao tác chuỗi sử dụng DI để truy nhập đến các ô nhớ được
định địa chỉ bởi ES.
1.3.4. Thanh ghi con trỏ lệnh:      IP
       Các thanh ghi bộ nhớ chúng ta vừa trình bày dùng để truy cập dữ liệu, để truy
nhập đến các lệnh, 8088 sử dụng các thanh ghi CS và IP. Thanh ghi CS chứa điạ chỉ
của lệnh tiếp theo còn IP chứa địa chỉ offset của lệnh đó. Thanh ghi IP được cập nhập
mỗi khi có một lệnh được thực hiện.
1.3.5. Thanh ghi cờ




Khoa CNTT                            Trang 6                                 KTMT
Gi¸o tr×nh vi xö lý

      Đây là thanh ghi 16 bit, mỗi bit được sử dụng để thể hiện một trạng thái của bộ vi
xử lý tại một thời điểm nhất định trong quá trình thực hiện chương trình. Mới chỉ có 9
bit được sử dụng và người ta gọi mỗi bit là một cờ.
 x    x     x    x    OF    DF     IF    TF   SF    ZF    X     AF    x    PF        x   CF
* Các cờ trạng thái
   CF (Carry Flag): được thiết lập khi phép toán thực hiện có nhớ hoặc có vay
mượn
       PF(Parity Flag): được thiết lập khi kết quả của phép toán có tổng số bit có giá trị
1 là một số chẵn (ở phần thấp của kết quả).
      AF (Auxiliary Flag): được thiết lập khi có nhớ từ "bit có trọng số lớn nhất ở
phần thấp" sang "bit có trọng số thấp nhất ở phần cao".
       ZF (Zero Flag): Được thiết lập khi tất cả các bit của kết quả có giá trị 0.
       SF ( Sign Flag): được thiết lập khi bit MSB của kết quả có giá trị 1.
       OF (Overflow Flag): được thiết lập khi kết quả nằm ngoài giới hạn cho phép.
*Các cờ điều khiển
      TF (Trace Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép thực hiện từng
bước chương trình
      IF (Interrupt Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép các ngắt
cứng có thể thực hiện.
       DF (Direction Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép duyệt
chuỗi từ phải sang trái hoặc từ địa chỉ cao đến địa chỉ thấp.

1.4. TẬP LỆNH CỦA BỘ VI XỬ LÝ
1.4.1. Sơ lược về tập lệnh của bộ vi xử lý
     Tập lệnh của bộ vi xử lý là thành phần cơ bản nhất để máy tính có thể thực hiện
các yêu cầu của người sử dụng. Tất cả các thao tác, các chương trình do người dùng lập
ra đều được bộ vi xử lý thực hiện bằng việc ánh xạ chúng dưới dạng mã máy, mã lệnh
riêng của bộ vi xử lý.
      Thông thường, với các lập trình viên, các lệnh của bộ vi xử lý được hiểu dưới góc
độ là các lệnh gợi nhớ (Mnemonic). Với mã lệnh gợi nhớ thì một lệnh của bộ vi xử lý
bao gồm các thành phần sau:
               [Mã lệnh]    [Các toán hạng]
Trong đó:


Khoa CNTT                               Trang 7                                      KTMT
Gi¸o tr×nh vi xö lý

         Mã lệnh - Cơ bản trường này chứa mã lệnh dưới dạng mã gợi nhớ.
         Các toán hạng - Là các thành phần mà các lệnh sử dụng để thực hiện lệnh.
         Nếu là các lệnh thật thì đây chính là các toán hạng của lệnh. Với bộ vi xử lý
              8086/8088, các toán hạng này có thể là 0,1 hoặc 2.
Ví dụ:
          ADD AL,[BX]
       ADD là lệnh thực hiện phép cộng; AL và [BX] là hai toán hạng với qui định nếu
tên thanh ghi hoặc một giá trị hằng nằm trong dấu [] thì đó là địa chỉ OFFSET của ô
nhớ chứa dữ liệu cần thao tác.


1.4.2. Tập lệnh của CPU
         Trong tập lệnh của vi xử lý 8086 có rất nhiều lệnh, mỗi lệnh thực hiện một
         nhiệm vụ cụ thể nào đó. Song, trong giới hạn nhất định, chúng ta có thể nghiên
         cứu một vài lệnh cơ bản.
         Để dễ hiểu, chúng ta có thể chia chúng các nhóm lệnh sau:
                  1. Nhóm lệnh di chuyển dữ liệu
                  2. Nhóm lệnh số học
                  3. Nhóm lệnh logic
                  4. Nhóm lệnh dịch chuyển và quay
                  5. Nhóm lệnh rẽ nhánh
                  6. Nhóm lệnh vào ra cổng
                  7. Nhóm lệnh điều khiển.
1.4.2.1 Nhóm lệnh di chuyển dữ liệu
    Trong nhóm này ta quan tâm một số lệnh cơ bản sau: MOV, MOVSB,
MOVSW XCHG, PUSH, POP
a) Lệnh MOV: Move a Word or Byte (chuyển 1 từ hay 1 byte)
            MOV đích, nguồn
       Di chuyển nội dung của toán hạng nguồn vào toán hạng đích. Hai toán hạng
phải có cùng độ lớn và không được đồng thời là 2 thanh ghi đoạn hoặc hai ô nhớ. Toán
hạng đích phải là thanh ghi hay ô nhớ. Giá trị của toán hạng nguồn không bị thay đổi,
sau khi thực hiện lệnh.
         Ví dụ:


Khoa CNTT                               Trang 8                                KTMT
Gi¸o tr×nh vi xö lý

      MOV ax,word1
      Trước lệnh Mov      Ax có nội dung       : 0002h
                          Word1                        : 0008h
      Sau lệnh Mov                Ax có nội dung       : 0008h
                          Word1                        : 0008h
      Một số chú ý:
      - Toán hạng đích không thể là một hằng số
      - Không thể chuyển trực tiếp một giá trị byte vào một toán hạng đích là một từ
và ngược lại. Nếu cần, có thể sử dụng các toán tử PTR BYTE hoặc PTR WORD
      - Không thể chuyển trực tiếp một hằng số vào một thanh ghi đoạn. Trong trường
hợp cần thiết, có thể chuyển tạm thời qua một thanh ghi khác
      Ví dụ: Muốn chuyển giá trị 100 vào thanh ghi DS, ta có thể sử dụng hai lệnh sau
             MOV      AX,100
             MOV      DS,AX
      MOVSB/MOVSW chuỗi đích, chuỗi nguồn
là hai lệnh dùng để chuyển các phần tử của một chuỗi nguồn sang một chuỗi đích.
      MOVSB: MOVe String Byte
      MOVSW: MOVe String Word
b) XCHG: eXCHanGe 2 operands ( tráo đổi nội dung của hai toán hạng)
   XCHG đích, nguồn
   Tráo đổi nội dung của toán hạng đích và toán hạng nguồn cho nhau.
   Ví dụ:   XCHG      AX,BX
      Trước lệnh XCHG AX có nội dung           : 153Eh
                          BX                   : 28FCh
      Sau lệnh Mov                AX có nội dung       : 28FCh
                          BX                   : 153Eh
      Một số chú ý:
             - Cả hai toán hạng không thể là hằng số
             - Không thể tráo đổi hai toán hạng khác kiểu. Nếu cần, có thể sử dụng
      các toán tử PTR BYTE hoặc PTR WORD.
             - Không được phép là 2 thanh ghi đoạn
                - Không được phép là hai ô nhớ.


Khoa CNTT                           Trang 9                                  KTMT
Gi¸o tr×nh vi xö lý

c) PUSH: PUSH Word On the Stack (Đẩy vào ngăn xếp)
   PUSH toánhạng
   Đẩy nội dung của toán hạng vào ngăn xếp, nội dung của toán hạng không bị thay
đổi. (copy nội dung)
   Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088)
Ví dụ:
         PUSH      AX
Đẩy nội dung của thanh ghi AX vào ngăn xếp
d) POP: POP Word from Top of Stack (lấy ra từ đỉnh ngăn xếp).
   POP đích
   Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088), trừ thanh ghi CS


1.4.2.2. Nhóm lệnh số học
   Trong nhóm này ta quam tâm đến các lệnh cơ bản sau: ADD, ADC, INC, SUB,
SBB, DEC MUL(IMUL), DIV(IDIV)
a) ADD:Addition (cộng hai toán hạng)
   ADD đích, nguồn
   Cộng toán hạng đích với toán hạng nguồn. Kết quả được chứa trong toán hạng đích
                  đích=đích+nguồn
   Điều kiện: hai toán hạng phải cùng độ dài, không được là hai thanh ghi đoạn
         ADD ax,word1
         Ax= ax+word1
b) SUB: Subtraction (trừ)
         Sub đích,nguồn
      Trừ nội dung của toán hạng đích cho toán hạng nguồn, kết quả chứa trong toán
hạng đích.
         Ví dụ:         MOV BX, F0h
                        SUB BX,50h
                        BX=F0h-50h=A0h
c) MUL: Multiplexing - Multiply Unsigned Byte or Word (nhân số không dấu)
   Nhân toán hạng với nội dung chứa trong thanh ghi AX. Tức là nhân hai toán hạng
   với nhau nhưng 1 toán hạng phải được chứa trong AX. Hoặc là trong DX và AX


Khoa CNTT                             Trang 10                                    KTMT
Gi¸o tr×nh vi xö lý

   MUL gốc
   Tuỳ vào độ dài của toán hạng gốc mà xác định kết quả:
      -     gốc: 8 bit thì số bị nhân trong AL -> kết quả trong AX
      -     gốc: 16 bit thì số bị nhân trong AX -> kết quả trong DX:AX
   Ví dụ:
            MOV AL,10h
            MOV BL,5h
            MUL BL
Vì toán hạng nguồn là thanh ghi BL, nên kết quả sẽ được lấy ra trong AX. AX=50h
Trong trường hợp muốn nhân số có dấu, ta có thể sử dụng lệnh IMUL có dạng lệnh
như lệnh MUL.
d) DIV: Unsigned Divide (chia hai số không dấu)
   DIV nguồn
      -     nguồn là số 8 bit: AX/nguồn số bị chia phải là số không dấu 16 bit trong AX
            sau khi chia AL chứa thương còn AH chứa số dư.
      -     nguồn là số 16 bit: DX:AX/nguồn số bị chia phải là số không dấu và đặt
            trong cặp DX:AX sau khi chia; AX chứa thương còn DX chứa số dư.
      nguồn =0 (chia cho 0) hoặc kết quả lớn hơn FFH, FFFFh thì gọi ngắt INT 0
Trong trường hợp muốn chia số có dấu, ta có thể sử dụng lệnh IDIV có dạng lệnh như
lệnh DIV.
1.4.2.3. Nhóm lệnh logic
      Trong nhóm này ta quan tâm đến các lệnh sau: AND, OR, XOR, NOT
a) AND: và hai toán hạng
AND đích,nguồn
      Đích, nguồn phải có điều kiện:
      -     cùng độ dài
      -     không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn.
      thường dùng để che đi hay giữ lại một vài bit nào đó của toán hạng đích
               ví dụ:       AND AX,0Fh
b) OR          : hoặc hai toán hạng
      OR đích,nguồn
      Đích, nguồn phải có điều kiện:


Khoa CNTT                             Trang 11                                  KTMT
Gi¸o tr×nh vi xö lý

      -   cùng độ dài
      -   không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn.
      thường dùng để lập một vai bit nào đó của toán hạng đích= cách cộng logic toán
hạng đó với toán hạng tức thời mà các bit 1 có vị trí tương ứng với bit cần lập.
      Ví dụ:              OR AL,BL
                          OR AL,0Fh
c) NOT: lấy phủ định - đảo bit NOT toánhạng
   Dùng để đảo bit của một toán hạng (lấy bù 1)
d) XOR: hoặc loại trừ toán hạng
   Dùng để xoá về 0 một thanh ghi nào đó
          Ví dụ: XOR AX,AX                         ; Xoá thanh ghi AX về 0
1.4.2.4 Nhóm lệnh dịch chuyển và quay
      Các lệnh cần quan tâm: SHL, SHR, ROL, ROR
a) SHL: Shift Left - dịch trái
   SHL đích,1
   SHL đích,CL
   Dịch các bit của toán hạng đích sang trái một vị trí hoặc CL vị trí. Một giá trị 0
   được đưa vào bên phải của toán hạng đích, còn bit MSB được đưa vào CF.


                                                                             0
     CF

                                  LỆNH SHL
   Thực hiện phép nhân bằng cách dịch trái.
b) SHR: Shift Right ; Dịch phải
   SHR đích,CL
   Dịch các bit của toán hạng đích sang phải 1 hoặc CL vị trí.
   Giá trị 0 được đưa vào bit MSB còn gía trị của bit LSB được chuyển vào cờ CF.


      0
      Dùng lệnh dịch phải thực hiện phép chia.
               15                                                  0         CF

                                 LỆNH SHR
Khoa CNTT                           Trang 12                                     KTMT
Gi¸o tr×nh vi xö lý



c) ROL:Rotation Left- quay trái
   ROL đích,CL
   Dịch các bit sang bên trái. bit MSB được đưa vào LSB và cờ CF. muốn quay nhiều
   lần thì chứa trong CL



          MSB                                                           MSB

          CF

                             LỆNH ROL
d) ROR:Rotation Right- quay phải
   ROR đích,CL
   Dịch các bit sang bên phải. Bit LSB được đưa vào MSB và cờ CF. muốn quay
   nhiều lần thì chứa trong CL



           LSB                                                            LSB
           15                                                     0       CF

                              LỆNH ROR
* Các lệnh quay qua cờ nhớ: RCL, RCR.
* Các ví dụ đưa ra và yêu cầu tìm giá trị của đích và CF sau CL lần dịch, quay.
1.4.2.5. Nhóm lệnh điều khiển rẽ nhánh
a) Nhảy có đìêu kiện
   Jxxx    nhãn_đích
   Nếu điều kiện nhảy được thoả thì sẽ nhảy đến nhãn_đích và thi lệnh này. nhãn có
   thể trước hoặc sau. Trước không quá 126 byte, sau không quá 127 byte.
   Bảng các lệnh nhảy
   Nhảy có dấu
   Kí hiệu          Chức năng                                         Điều kiện nhảy
   Jg/jnle          Nhảy nếu lớn hơn                                  Zf=0, sf=of


Khoa CNTT                           Trang 13                                      KTMT
Gi¸o tr×nh vi xö lý


                    Nhảy nếu không nhỏ hơn hay bằng
   Jge/jnl          Nhảy nếu lớn hơn hay bằng                        Sf=0f
                    Nhảy nếu không nhỏ hơn
   Jl/jnge          Nhảy nếu nhỏ hơn                                 Sf<>of
                    Nhảy nếu không lớn hơn hay bằng
   Jle/jng          Nhảy nêu nhỏ hơn hay bằng                        Zf=1 hay sf=of
                    Nhảy nếu không lớn hơn
   Nhảy không dấu
   Ja/jnbe        Nhảy nếu lớn hơn                                   Cf=0 và zf=0
                    Nhảy nếu không nhỏ hơn hay bằng
   Jae/jnb          Nhảy nếu lớn hơn hay bằng                        Cf=0
                    Nhảy nếu không nhỏ hơn
   Jb/jnae          Nhảy nếu nhỏ hơn                                 Cf=1
                   Nhảy nếu không lớn hơn hay bằng
   Nhảy điều kiện đơn
   Je/jz           Nhảy nếu bằng                                     Zf=1
                    Nhảy nếu bằng 0
   Jne/jnz          Nhảy nếu không bằng                              Zf=0
                  Nhảy nếu không bằng 0
b) Nhảy không điều kiện
   JMP nhãn_đích
   Nhãn đích nằm trong cùng đoạn với JMP, vượt xa 126 byte đối với các lệnh nhảy
   có điều kiện.
1.4.2.6. Nhóm lệnh vào ra cổng
a) IN: nhập vào từ cổng 1 byte hay 1 word
   IN thanhchứa, cổng
   Nếu thanh chứa là AL thì dữ liệu 8 bit được đưa vào có giá trị là điạ chỉ cổng
   Nếu thanh chứa là AX thì dữ liệu 16 được đưa vào từ cổng có giá trị là điạ chỉ cổng
   +1
   Điạ chỉ cổng trong khoảng 00h - FFh
b) OUT:xuất ra cổng 1 byte hay 1 word
OUT điạchỉcổng,Acc


Khoa CNTT                           Trang 14                                    KTMT
Gi¸o tr×nh vi xö lý

1.4.2.7. Nhóm lệnh điều khiển
a) CALL chương_trình_con
   Gọi một chương trình con có tên gọi: chương_trình_con
b) INT số_hiệu_ngắt
   Lệnh gọi ngắt với số_hiệu_ngắt
c) HLT Lệnh treo máy dừng chương trình
d) NOP: No Operation không thực hiện lệnh nào cả.

1.5. CHẾ ĐỘ ĐỊA CHỈ CỦA BỘ VI XỬ LÝ 8086
1.5.1. Tổng quan
        Các chế độ địa chỉ chính là phương pháp để xác định toán hạng hoặc kiểu toán
hạng trong các câu lệnh. Bộ vi xử lý 8086/8088 có tổng số trên 20 chế độ địa chỉ cho
các thành phần khác nhau như mã lệnh, dữ liệu, ngăn xếp. Nhưng trên thực tế, việc lập
trình, phân tích lệnh, người ta chỉ qua tâm đến việc dữ liệu của lệnh được xử lý ra sao.
Vì vậy, chúng ta cũng chỉ nghiên cứu về các chế độ địa chỉ dữ liệu của lệnh.
     Trong bộ vi xử lý 8086 qui định có 7 chế độ địa chỉ cho toán hạng của lệnh. Cụ
thể bao gồm các chế độ sau:
       -   Chế độ địa chỉ thanh ghi
       -   Chế độ địa chỉ tức thì
       -   Chế độ địa chỉ trực tiếp
       -   Chế độ địa chỉ gián tiếp thanh ghi
       -   Chế độ địa chỉ tương đối cơ sở
       -   Chế độ địa chỉ tương đối chỉ số
       -   Chế độ địa chỉ tương đối chỉ số cơ sở
1.5.2. Các chế độ địa chỉ dữ liệu
1.5.2.1 Chế độ địa chỉ thanh ghi
      Trong chế độ này việc trao đổi thông tin diễn ra trực tiếp giữa các thanh ghi.
Toán tử chỉ hoàn toàn là các thanh ghi. Loại địa chỉ thanh ghi không cần truy nhập bộ
nhớ nên rất nhanh.
                                                                         Tập
                      Mã lệnh           Tên các          Toán
                                                         hạng           các
                                       thanh ghi
                                                                        than
                                                                        h

Khoa CNTT                             Trang 15                                  KTMT
Gi¸o tr×nh vi xö lý




   Ví dụ:    MOV AX, BX ;Sao chép nội dung thanh ghi BX sang thanh ghi AX.
             MOV AL,CL ; Sao chép nội dung thang ghi CL sang thanh ghi AL.
             ADD AL, CL ; Cộng nội dung thanh ghi Clvới thanh ghi AL.
1.5.2.2 Chế độ địa chỉ tức thì
       Trong chế độ này toán hạng đích là một thanh ghi hoặc ô nhớ, còn toán hạng
nguồn là một hằng số. Ta có thể dùng chế độ này để nạp dữ liệu vào bất kỳ thanh ghi
nào, trừ thanh ghi đoạn và thanh ghi cờ.

            Mã lệnh          Tên các                             Hằng
                            thanh ghi                             số

   Ví dụ:    MOV CL, 5Fh; chuyển 5Fh vào thanh ghi CL.
             MOV AX, 0FF0h; Chuyển 0FF0h vào trong thanh ghi AX
             MOV DS, AX; Chuyển nội dung thanh ghi AX vào DS.
             MOV [BX], 10; Chuyển 10 vào ô nhớ tại địa chỉ DS:BXX
1.5.2.3 Chế độ địa chỉ trực tiếp.
       Trong chế độ này, một toán hạng chứa địa chỉ lệch của ô nhớ dùng chứa dữ liệu,
còn toán hạng kia chỉ có thể là thanh ghi.




Khoa CNTT                           Trang 16                                  KTMT
Gi¸o tr×nh vi xö lý



           Mã lệnh       Toán hạng           Toán
                                             hạng           Bộ
                                                            nhớ




  Ví dụ:     MOV Al, [1053] ; Chuyển nội dung ô nhớ địa chỉ DS:1053h vào AL
             MOV [5307h], CX ; Chuyển nội dung CX vào 2 ô nhớ liên tiếp có địa
                                  ; chỉ DS:5307h và DS:5308h
             ADD [5307h], AL ; Cộng nội dung AL vào ô nhớ có địa chỉ DS:5307h
1.5.2.4 Chế độ địa chỉ gián tiếp thanh ghi
       Trong chế độ này, một toán hạng là một thanh ghi được sử dụng để chứa địa chỉ
lệch (Offset) của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi mà
không được là ô nhớ.
                                              Tập
    Mã lệnh        [Thanh ghi]
                                              các                  Bộ
                                              thanh                nhớ
                                              ghi



 Ví dụ:      MOV AL, [BX] ; Chuyển nội dung ô nhớ có đ/c DS:BX vào AL
             MOV [SI], CL ; Chuyển nội dung CL vào ô nhớ có đ/c DS:SI
             MOV [DI], AX ; Chuyển nội dung AX vào 2 ô nhớ liên tiếp có
                               ; địa chỉ DS:DI và DS:DI+1
1.5.2.5 Chế độ địa chỉ tương đối cơ sở (Base Relative Addressing)
        Trong chế độ này, các thanh ghi cơ sở BX và BP là các hằng số biểu diễn các
giá trị dịch chuyển (Displacement Values), kết hợp với DS và SS để tính địa chỉ hiệu
dụng của toán hạng các vùng nhớ. Sự có mặt của các giá trị dịch chuyển xác định tính
tương đối (so với cơ sở) của địa chỉ.



      Mã lệnh           Địa chỉ            Giá trị cụ thể
                      thanh ghi
                                     Tập
                                     các
                                                                    Bộ
                                     thanh
                                                                    nhớ
                                     ghi
Khoa CNTT                          Trang 17                                   KTMT
Gi¸o tr×nh vi xö lý




  Ví dụ 1:    MOV CX, [BX]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
              MOV CX, [BX+10] ; DS:(BX+10) và DS:(BX+11) vào CX
              MOV CX,10[BX] ;
              MOV CL, [BP]+5 ; Chuyển nội dung ô nhớ SS:(BP+5) vào AL
Chú ý: Trong các ví dụ trên, các giá trị 10 và3 được gọi là các giá trị dịch chuyển
       - (BX+10) hoặc (BP+5) gọi là địac chỉ hiệu dụng (Effective Address – EA)
       -   DS:(BX+10) hoặc SS:(BP+5) chính là địa chỉ logic tương ứng với 1 PA
1.5.2.6 Chế độ địa chỉ tương đối chỉ số (Indexed Relative Addressing)
       Trong chế độ này, các thanh ghi chỉ số DI và SI và các hằng số biểu diễn giá trị
dịch chuyển, được dùng để tính địa chỉ của toán hạng trong vùng nhớ DS.
     Mã lệnh            Địa chỉ                Giá trị cụ thể
                      thanh ghi
                                      Tập các
                                      thanh
                                      ghi                              Bộ
                                                                       nhớ


                                      DI, SI

  Ví dụ:      MOV AX,[SI]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
                                    ; DS:(SI+10) và DS:(SI+11) vào AX
              MOV AX,[SI+10] ; Tương tự như trên.
              MOV AL, [DI+5]; chuyển nội dung ô nhớ DS:(DI+5) vào CL.
1.5.2.7 Chế độ địa chỉ tương đối chỉ số cơ sở (Based Indexed Relative)
      Là sự kết hợp của 2 chế độ địa chỉ, đó là chế độ địa chỉ tương đối chỉ số và chế độ
địa chỉ tương đối cơ sở. Trong chế độ này dùng cả 2 thanh ghi cơ sở và 2 thanh ghi chỉ
số để tính địa chỉ của toán hạng. Chế độ này rất phù hợp với việc địa chỉ hoá các mảng 2
chiều.




Khoa CNTT                            Trang 18                                     KTMT
Gi¸o tr×nh vi xö lý


       Mã lệnh          Thanh          Thanh            Giá trị cụ thể
                         ghi            ghi
                               Tập                Tập
                               các                các
                                                                                Bộ
                               thanh              thanh                         nhớ
                               ghi
                                                  ghi



  Ví dụ:         MOV AX, [BX]+[SI]+8       ;chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ
                 MOV AX, [BX+SI] + 8       ; DS:(BX+SI+8) và DS:(BX+SI+9) vào AX
                 MOV AX, [BX + SI + 8] ;
                 MOV CL, [BP][DI]+5        ; chuyển nội dung ô nhớ có địa chỉ
                                           ; DS:(BP+DI+5) vào CL
     • Chú ý: Trong các chế độ địa chỉ trên, các thanh ghi đoạn và các thanh ghi lệch
        được ngầm định đi kèm với nhau. Muốn loại bỏ sự ngầm định đó thì ta có thể
        viết tường minh địa chỉ của đoạn.
        Ví dụ:         MOV AL, [BX]        ; ngầm định là DS:BX
                 Muốn bỏ ngầm định là DS ta phải viết
                       MOV AL, SS:[BX]; chuyển thành SS:BX
1.5.2.8 Bảng tóm tắt các chế độ địa chỉ
STT          Chế độ địa chỉ                         Toán hạng           Đoạn ngầm định
 1  Thanh ghi                                Reg
 2  Tức thì                                  Data
 3  Trực tiếp                                [Offset]                 DS
                                             [BX]                     DS
 4      Gián tiếp thanh ghi                  [SI]                     DS
                                             [DI]                     DS
                                             [BX] + Disp              DS
 5      Tương đối cơ sở
                                             [BP] + Disp              SS
                                             [DI] + Disp              DS
 6      Tương đối chỉ số
                                             [SI] + Disp              SS
 7      Tương đối chỉ số cơ sở               [BX] + [DI] + Disp       DS
                                             [BX] + [SI] + Disp       DS
                                             [BP] + [DI] + Disp       SS


Khoa CNTT                              Trang 19                                  KTMT
Gi¸o tr×nh vi xö lý

                                              [BP] + [SI] + Disp                 SS
   • Các cặp thanh ghi đoạn và thanh ghi lệch ngầm định
Thanh ghi đoạn           CS                   DS                            ES                   SS
Thanh ghi lệch           IP               SI, DI, BX                        DI                 SP, BP

1.6. PHÂN TÍCH MÃ LỆNH MÃ MÁY
1.6.1. Khuôn dạng lệnh
      Mã lệnh dành cho vi xử lý được viết dưới dạng nhị phân. Nhưng để người lập
trình có thể hiểu và lập trình được thì các lệnh của vi xử lý được biểu diễn dưới dạng
mã lệnh gợi nhớ (Mnemonic). Song, về cơ bản chúng ta cũng cầm phải biết về mã lệnh
mã máy của bộ vi xử lý để có thể hiểu rằng một lệnh được bộ vi xử lý thực hiện ra sao
và cấu trúc của các lệnh đó như thế nào.
      Vấn đề ta cần phải hiểu là một lệnh của bộ vi xử lý 8086 có độ dài lệnh tối đa là 6
byte. Cấu trúc chung của một mã lệnh đó bao gồm:

                                                   Disp              Disp             Disp              Disp
    Opcode       D W mode      reg      M/R

        Byte 1                 Byte 2                     Byte 3,4                           Byte 5,6


Trong đó:
      - Opcode (Operation Code) - Phân biệt lệnh đó là lệnh gì. Ví dụ, lệnh
MOV=100010
      - D (Direction) chỉ hướng hành động của lệnh. D=0 từ thanh ghi, D=1 tới thanh
ghi.
      - W (Word) chỉ độ dài của toán hạng. W=1 toán hạng 2 byte, W=0 toán hạng 1
byte
      - mode chỉ chế độ địa chỉ của toán hạng. Ví dụ, chế độ thanh ghi mode=11.
      - reg (Register) chỉ mã của thanh ghi trong lệnh (nếu lệnh có toán hạng là thanh
ghi).
      - M/R (Memory/Register) Chỉ mã của thanh ghi hoặc ô nhớ theo chế độ địa chỉ
      - Disp (Displacement) đoạn dịch chuyển hoặc là toán hạng tức thì
Bảng xác định chế độ địa chỉ toán hạng bằng các trường MOD và R/M
    MOD = 11                                       Tính địa chỉ
R/M W=0 W=1            R/M         MOD=00              MOD=01                       MOD=10
000 AL      AX         000        (BX)+(SI)          (BX)+(SI)+d8                 (BX)+(SI)+d16
001   CL     CX        001        (BX)+(DI)          (BX)+(DI)+d8                 (BX)+(DI)+d16


Khoa CNTT                            Trang 20                                                    KTMT
Gi¸o tr×nh vi xö lý

010 DL       DX     010       (BP)+(SI)     (BP)+(SI)+d8            (BP)+(SI)+d16
011   BL     BX     011       (BP)+(DI)     (BP)+(DI)+d8            (BP)+(DI)+d16
100 AH       SP     100          (SI)          (SI)+d8                 (SI)+d16
101 CH       BP     101         (DI)          (DI)+d8                  (DI)+d16
110 DH       SI     110 Địa chỉ trực tiếp     (BP)+d8                 (BP)+d16
111 BH       DI     111         (BX)          (BX)+d8                 (BX)+d16
Bảng Mã hoá các thanh ghi
            REG            W=0          W=1
            000            AL           AX
            001            CL           CX
            010            DL           DX
            011            BL           BX
            100            AH           SP
            101            CH           BP
            110            DH           SI
            111            BH           DI
Bảng mã hoá các thanh ghi đoạn
            REG            W=0
            00             ES
            01             CS
            10             SS
            11             DS
1.6.2. Một số mã lệnh mã máy
a/ Lệnh MOV
    Từ thanh ghi đến ô nhớ: 1010001w addr_low addr_high
    Từ ô nhớ đến thanh ghi: 1010000w addr_low addr_high
    Từ ô nhớ hay thanh ghi đến thanh ghi đoạn: 10001110 mod 0 seg r/m
    Từ thanh ghi đoạn đến ô nhớ hay thanh ghi: 10001110 mod 0 seg r/m
    Từ ô nhớ hay thanh ghi đến thanh ghi/ từ thanh ghi vào ô nhớ:
    100010d1 mod seg r/m (addr_low addr_high)
    Từ dữ liệu trực tiếp vào thanh ghi: 1011w reg data (data_High)
    Từ dữ liệu trực tiếp vào thanh ghi hay ô nhớ:
    1100011w mod 000 r/m data (data_High)
b/ Lệnh PUSH
    Toán hạng nguồn là thanh ghi công dụng chung: 01010 reg


Khoa CNTT                          Trang 21                                KTMT
Gi¸o tr×nh vi xö lý

     Thanh ghi đoạn: 000 seg 110
     Ô nhớ hoặc thanh ghi: 11111111 mod 110 r/m
c/ Lệnh POP
     Toán hạng đích là thanh ghi công dụng chung: 01011 reg
     Thanh ghi đoạn: 000 seg 111
     Ô nhớ hoặc thanh ghi: 10001111 mod 000 r/m


d/ Lệnh ADD
     Cộng ô nhớ hay thanh ghi đến thanh ghi: 000000dw mod reg r/m
     Cộng trực tiếp số hạng vào thanh ghi: 0000010w data
     Cộng trực tiếp ô nhớ hay thanh ghi cho toán hạng trực tiếp:
     100000sw mod 000 r/m data
  (Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi
16bit)
e/ Lệnh SUB
     Trừ ô nhớ hay thanh ghi vào thanh ghi: 100010dw mode reg r/m
     Trừ thanh ghi cho toán hạng trực tiếp: 0010110w data
     Trừ ô nhớ hay thanh ghi cho toán hạng trực tiếp: 100000sw mod 101 r/m data
  (Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi
16bit)
f/ Lệnh AND
     Và ô nhớ hay thanh ghi với thanh ghi: 001000dw mod reg r/m
     Và trực tiếp với thanh ghi: 0010010w data
     Và trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 100 r/m data
g/ Lệnh OR
     Hoặc ô nhớ hay thanh ghi với thanh ghi: 000010dw mod reg r/m
     Hoặc dữ liệu trực tiếp với thanh ghi: 0000110w data
     Hoặc trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 001 r/m data
h/ Lệnh XOR
     XOR ô nhớ hay thanh ghi với thanh ghi: 001100dw mod reg r/m
     XOR toán hạng trực tiếp với thanh ghi: 0011010w data



Khoa CNTT                           Trang 22                                  KTMT
Gi¸o tr×nh vi xö lý

       XOR toán hạng trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 110 r/m
data
1.6.3. Một số ví dụ minh hoạ:
       Phân tích mã lệnh mã máy của các lệnh sau:
- MOV SP,BX ; sao chép nội dung trong thanh ghi BX sang thanh ghi SP
       opcode=100010
       D=1 gửi tới thanh ghi
       w=1 chuyển một từ
       MOD=11 thanh ghi tới thanh ghi
       REG=100 thanh ghi SP
       R/M=011 thanh ghi BX
       ==> Mã lệnh mã máy của lệnh này là: 1000101111100011b = 8BE3h
- MOV CL,[BX] ; sao chép nội dung từ ô nhớ DS:BX sang thanh ghi CL
       Opcode=100010
       D=1 tới thanh ghi
       W=0 toán hạng 8 bit
       MOD=00 ô nhớ không dịch chuyển
       REG=001 thanh ghi CL
       R/M = 111 toán hạng là ô nhớ DS:BX
       ==> Mã lệnh mã máy của lệnh này là: 1000101000001111b = 8A0Fh
- MOV 43h[SI], DH; chuyển nội dung thanh ghi DH sang ô nhớ DS:(SI+43h)
       Opcode=100010
       D=0 từ thanh ghi
       W=0 chuyển Byte
       MOD=01 ô nhớ, dịch chuyển 1 byte
       REG=110 thanh ghi DH
       R/M=100 ô nhớ DS:SI
       disp=01000011 độ dịch chuyển là 43h
==> Mã lệnh mã máy của lệnh này là: 100010000111010001000011b = 887443h

1.7. LẬP TRÌNH VÀ GỠ RỐI BẰNG DEBUG



Khoa CNTT                           Trang 23                             KTMT
Gi¸o tr×nh vi xö lý

     Máy tính trước đây là các máy có kích thước tương đối lớn, được chế tạo từ các
đèn điện tử chân không, vì vậy, các con rệp (BUGS) có thể chui vào đó và làm hỏng
máy móc, dẫn đến việc máy móc có thể xử lý sai. Trước tình thế đó, người ta đưa ra
một yêu cầu bắt các con rệp phá hoại này và được gọi là DEBUG (Bắt rệp).
     Từ đó đến nay, công việc xử lý làm cho chương trình máy tính được thực hiện
chính xác, tránh gây ra lỗi được gọi là DEBUG. Các chương trình thực hiện nhiệm vụ
này được gọi là các trình gỡ rối.
     Hiện nay, có rất nhiều trình gỡ rối được sử dụng để sửa lỗi cho các trình ứng
dụng như: DEBUG.EXE (trong DOS), Debugging (trong WINDOWS).
     Để thực hiện được trình DEBUG trong môi trường DOS, ta có thể thực hiện theo
cú pháp sau:
     DEBUG {ENTER}
     DEBUG <tên tệp cần gỡ rối> {ENTER}
1.7.1. Giới thiệu về lệnh của DEBUG
     Sau khi chạy trình DEBUG, dấu nhắc lệnh của DEBUG sẽ hiện lên với dấu (-).
Tại đây ta có thể gõ vào các lệnh của DEBUG. Cụ thể:
A - Assemble - Hợp ngữ: được sử dụng để sửa các lệnh của chương trình
     Cú pháp: A <địa chỉ offset của lệnh cần sửa>
     Ví dụ:     A 0153
      Có thể được sử dụng để lập một chương trình *.COM. Nếu lập trình thì địa chỉ
offset sẽ phải bắt đầu từ 0100h.
D - Dump - Hiển thị nội dung một vùng nhớ lên màn hình.
     Cú pháp: D [Address]
     In nội dung một vùng nhớ 128 byte bắt đầu từ địa chỉ Address
     hoặc       D [range] - In nội dung vùng nhớ trong dải range ra màn hình
     Ví dụ: -    D 100 In nội dung của 128 byte nhớ bắt đầu từ địa chỉ DS:100
     D CS:200 220 In nội dung vùng nhớ từ CS:200 đến CS:220
     D 0A00:0100 L10 In nội dung 16 byte nhớ từ địa chỉ 0A00:0100
G - Go - Thực hiện hay chạy cả chương trình nạp trong bộ nhớ
     Cú pháp: G [=address] [điểm dừng]
     thực hiện đoạn chương trình bắt đầu từ địa chỉ address đến địa chỉ điểm dừng
     Ví dụ: - G =100 Thực hiện chương trình từ địa chỉ 100 đến hết chương trình


Khoa CNTT                           Trang 24                                    KTMT
Gi¸o tr×nh vi xö lý

     G =100 200 Thực hiện chương trình từ địa chỉ CS:100 đến CS:200
H - Hexadecimal - Thực hiện các phép cộng, trừ các số thập lục phân
     Cú pháp: H <số thứ nhất> <số thứ hai> cộng, trừ số thứ nhất với số thứ hai
     Ví dụ: H 035F 01E5
     Kết quả sẽ hiện lên trên màn hình là: 0544 017A
I - Input - Nhập một Byte dữ liệu từ cổng và hiển thị trên màn hình
     Cú pháp: I <#cổng> Nhập một byte từ cổng có địa chỉ là #cổng
     Ví dụ: I 2F8 đọc giá trị từ cổng 2F8 và hiển thị
N - Name - Đặt tên cho tệp để chuẩn bị ghi dữ liệu lên.
     Cú pháp: N <Tên tệp> Đặt tên và phần mở rộng cho tệp
     Ví dụ: N vanban.txt
      N ctrinh.com
O - Output - Xuất dữ liệu 8 bit ra một cổng
     Cú pháp: O <#cổng>
     Ví dụ:    O 70 đưa dữ liệu 8 bit ra cổng có địa chỉ là 70h
Q - Quit - Thoát khỏi DEBUG
R - Register - Hiển thị và sửa nội dung một thanh ghi
     Cú pháp: R <tên thanh ghi>
     Ví dụ: Nạp giá trị 43h vào thanh ghi CX
     R CX
     :43
U - Unassemble - Dịch ngược lệnh của CPU
     Cú pháp: U [range]
     Trong đó range có thể là: - Địa chỉ bắt đầu của đoạn lệnh
     - Địa chỉ đầu và chiều dài đoạn lệnh
    Ví dụ: U 100          Xem nội dung các lệnh của đoạn chương trình từ địa chỉ
CS:0100h
      U CS:100 110 Xem đoạn lệnh từ địa chỉ CS:100 đến CS:110
      U 200 L20 Xem đoạn lệnh 32 byte bắt đầu từ địa chỉ CS:0200h
W - Write - Ghi nội dung đoạn lệnh bắt đầu từ địa chỉ CS:0100h với độ dài phụ thuộc
vào giá trị của thanh ghi CX vào một tệp đã được đặt tên bởi lệnh N
? - Help - Hiển thị đầy đủ các lệnh, cú pháp lệnh của DEBUG.


Khoa CNTT                           Trang 25                                 KTMT
Gi¸o tr×nh vi xö lý

1.7.2. Lập trình bằng DEBUG
     DEBUG là một trình gỡ rối có thể được sử dụng để lập trình các chương trình
đơn giản có phần mở rộng là *.COM. Vì vậy, trong phần này chúng ta sẽ nghiên cứu
về cách viết một chương trình bằng DEBUG thông qua các bước sau.
Bước 1: Chạy trình DEBUG. Tại dấu nhắc lệnh của DOS ta gõ: DEBUG {ENTER}
Bước 2: Tại dấu nhắc của DEBUG gõ lệnh
     -A 100 Địa chỉ bắt đầu của một chương trình được bắt đầu từ CS:100h
Bước 3: Gõ vào các lệnh của chương trình với qui định
     + Các lệnh này phải là các lệnh của vi xử lý (lệnh thật) dưới dạng mã lệnh gợi nhớ
      + Các số liệu đưa vào là các số ở dạng thập lục phân và không được có chữ h ở
cuối số đó. Riêng lệnh INT vẫn được chấp nhận tồn tại chữ h. Ví dụ: số 65d sẽ phải đưa
vào là 41
      + Các lệnh nhảy, lệnh lặp, lệnh gọi chương trình con thì các toán hạng lệnh phải
là địa chỉ bộ nhớ tại vị trí của lệnh đầu tiên.
     Ví dụ: JMP 120 Nhảy tới địa chỉ CS:120h
     + Trong tất cả các lệnh chỉ tồn tại hai trường là: mã lệnh và toán hạng. Không
được có lời chú thích.
     Ví dụ: MOV AH,1 ;gán cho AH giá trị 1
     Đây được coi là một lệnh sai vì lời giải thích này không được DEBUG chấp nhận
     + Một chương chương phải được kết thúc bằng một lệnh INT 20 hoặc INT 20h
     + Sau lệnh INT 20, ta không đưa lệnh khác nữa thì tại địa chỉ của lệnh tiếp theo ta
nhấn ENTER. Địa chỉ này cũng chính là địa chỉ cuối của chương trình.
Bước 4: Xác định số byte của chương trình.
     độ dài chương trình = địa chỉ cuối - 100
     Sau đó gõ lệnh: R CX
     và nạp vào độ dài của chương trình cho CX.
Bước 5: Đặt tên cho File chứa chương trình bằng lệnh N
     Ví dụ: N vidu1.com
Bước 6: gõ lệnh W để ghi nội dung chương trình vào tệp đã đặt tên ở bước 5
      Sau khi tạo xong một chương trình, ta có thể thoát về DOS để chạy thử hoặc có
thể sử dụng lệnh G để chạy trực tiếp từ DEBUG




Khoa CNTT                            Trang 26                                     KTMT
Gi¸o tr×nh vi xö lý

     Ví dụ: Viết một chương trình thực hiện nhập vào một chữ cái thường, sau đó đổi
nó sang thành chữ cái hoa (Với giả thiết không kiểm tra dữ liệu nhập vào)
     Sau khi viết xong chương trình, ta có thể chạy nó để kiểm tra kết quả bằng cách.
      Như vậy, với chương trình đơn giản trên đây, ta thấy: Nếu lập trình bằng DEBUG
thì kích thước của tệp rất nhỏ. Chương trình vừa viết có kích thước là 0Eh=14byte.
1.7.3. Gỡ rối chương trình bằng DEBUG
     Để gỡ rối cho một chương trình, ta có thể thực hiện qua các bước sau:
Bước 1: Khởi động DEBUG và gọi tệp cần sửa bằng lệnh
     DEBUG <Tên tệp cần sửa> {ENTER}
      Bước 2: Xác định lệnh gây ra lỗi (lỗi do thuật toán) bằng lệnh U. Các lệnh chỉ
hiển thị trong khoảng 32 byte. Nếu muốn xem tiếp lệnh ở vị trí sau 32 byte đó thì ta có
thể gõ tiếp lệnh U. Và cứ như vậy cho đến khi kết thúc chương trình (gặp lệnh INT 20)
Bước 3: Sử dụng lệnh A <địa chỉ offset của lệnh sai> để bắt đầu sửa
Bước 4: Gõ lệnh cần thay thế.
     + Nếu lệnh thay thế có kích thước bằng lệnh đang sửa thì tại vị trí của lệnh sau
lệnh vừa gõ ta nhấn ENTER.
      + Nếu lệnh thay thế có kích thước khác lệnh đang sửa thì ta phải gõ lại toàn bộ
đoạn chương trình từ vị trí sửa đến hết chương trình. Vì, các lệnh gõ vào sau sẽ đè lên
các lệnh trước đó. Nếu lệnh sau khi sửa lớn hơn lệnh trước khi sửa thì lệnh tiếp theo
của nó sẽ bị mất đi một số bit. Khi đó, cấu trúc chương trình sẽ bị sai lệch hoàn toàn.
      Bước 5: Nếu kích thước chương trình khác với kích thước ban đầu thì ta cần phải
sử dụng lệnh R để thay đổi thanh ghi CX sao cho CX chứa giá trị độ lớn của chương
trình sau khi sửa. Sau đó, ta sử dụng lệnh W để ghi lại nội dung của chương trình mới
vào tệp.




Khoa CNTT                           Trang 27                                   KTMT
Gi¸o tr×nh vi xö lý


                                                   Cần phải gõ lệnh DEBUG với
                                                   thamđoạn chương trình có
                                                   Xem số
                                                   lỗi không

                                                   Lệnh gây lỗi

                                                   Địa chỉ của lệnh sai


                                                   Cần phải sửa lại
                                                   Sau đó ghi lại


   Ví dụ: Chương trình trên bị lỗi tại vị trí lệnh SUB. Ta cần sửa lại như sau:




Khoa CNTT                          Trang 28                                       KTMT
Gi¸o tr×nh vi xö lý


     CHƯƠNG 2: CÁC BỘ VI XỬ LÝ TIÊN TIẾN CỦA INTEL
2.1. BỘ VI XỬ LÝ 80286
Về cơ bản, bộ vi xử lý 80286 có cấu trúc giống như 8086, nhưng có một số đặc
điểm khác biệt như sau:
2.1.1. Các thanh ghi
Bộ vi xử lý 80286 có thêm một số thanh ghi
- Thanh ghi từ trạng thái (MSW - Machine Status Word)
             15                     4 3   2    1   0
                                   TS EM MP PE
             TS - Task Switch: chuyển nhiệm vụ
      EM - Emulation: cho phép mô phỏng bộ đồng xử lý
      MP - Math Present: Cho biết có bộ đồng xử lý
      PE - Protection Enable: Cho phép chế độ bảo vệ
- Thanh ghi nhiệm vụ (TR - Task Register)
- Thanh ghi bảng mô tả cục bộ (LDTR - Local Descriptor Table Register)
- Thanh ghi bảng mô tả toàn cục (GDTR - Global Descriptor Table Register)
- Thanh ghi bảng mô tả ngắt (IDTR - Interrupt Descriptor Table Register)
15    Bộ chọn     0 23    Địa chỉ cơ sở        0 15    Độ dài   0
                                                                     TR
                                                                    LDTR

                                                                    IDTR
                                                                    GDTR
- Các thanh ghi đoạn: bao gồm 2 phần
Phần hở: gồm 16 bit có thể nạp được bằng chương trình gọi là bộ chọn
Phần kín: gồm 48bit do CPU tự nạp
      + 8bit quyền truy nhập (Access Right)
      + 24bit địa chỉ cơ sở (Base Address)
      + 16bit độ dài đoạn (Limit)


Khoa CNTT                           Trang 29                               KTMT
Gi¸o tr×nh vi xö lý

        Phần hở                                    Phần kín
                                   Quyền
        Bộ chọn                                    Địa chỉ cơ sở      Độ dài đoạn
                                 truy nhập
          CS
          DS
          SS
          ES
          FS
          GS
2.1.2. Tập lệnh
80286 có thêm một số lệnh đặc quyền
- LGDT: Nạp thanh ghi GDTR, địa chỉ cơ sở 24bit, độ dài 16bit
- LIDT: Nạp thanh ghi IDTR, địa chỉ cơ sở 24bit, độ dài 16bit
- LLDT: Nạp phần chọn của thanh ghi LDTR, độ dài 16bit
- LTR: Nạp phần chọn của thanh ghi TR, độ dài 16bit
- LMSW: Nạp từ trạng thái máy
- CLTS: xoá bit TS (task Switch)
- HALT: Dừng hoạt động của CPU

2.2. BỘ VI XỬ LÝ 80386
2.2.1. Sơ đồ khối của 80386
                                     Đơn vị quản lý     Đơn vị quản lý
               Đơn vị thực           theo đoạn nhớ      theo bộ nhớ
                  Các thanh            Các thanh           Bộ đệm
                     ghi                ghi đoạn         chuyển hoá
                                                              riêng
                                          Bộ                              Đơn vị BUS
                                                              Bộ
                    ALU

                                                                           Bộ ghép
                                                                           nối BUS
                           Bộ giải mã                 Hàng
                              lệnh                 nhận lệnh


                          Hàng                Bộ nhận
Khoa CNTT                           Trang 30 Đơn vị nhận
                       Đơn vị giải mã                                               KTMT
Gi¸o tr×nh vi xö lý



2.2.2. Các thanh ghi
a/ Các thanh ghi đa năng, thanh ghi cờ và con trỏ lệnh
Các thanh ghi của bộ vi xử lý 80386 có độ dài 32 bit, song vẫn giữ nguyên phần
16bit đầu được truy nhập tương tự như các thanh ghi tương tự trong 8086.
                              31              16      15        8    7        0
                       EAX                                 AH            AL
                       EBX                                 BH            BL
                       ECX                                 CH            CL
                       EDX                                 DH            DL
                        ESI                                         SI
                        EDI                                         DI
                       EBP                                          BP
                        ESP                                         SP

                        EIP                                         IP

                    EFlags                                       Flags
b/ Các thanh ghi đoạn
Bao gồm 2 phần
Phần hở: gồm 16 bit có thể nạp được bằng chương trình gọi là bộ chọn
Phần kín: gồm 64 bit do CPU tự nạp
      + 12 bit quyền truy nhập (Access Right)
      + 32 bit địa chỉ cơ sở (Base Address)
      + 20 bit độ dài đoạn (Limit)
        Phần hở                                    Phần kín
                                                                           Quyền
         Bộ chọn                   Địa chỉ cơ sở           Độ dài đoạn
                                                                         truy nhập
           CS
           DS
           SS
           ES


Khoa CNTT                          Trang 31                                          KTMT
Gi¸o tr×nh vi xö lý

             FS
             GS
        15        0                         32bit                 20bit          12bit
c/ Các thanh ghi điều khiển
Có 4 thanh ghi điều khiển 32 bit được đặt là: CR0, CR1, CR2, CR3
             31                                                                   0
             PG                                       r      TS     EM MP PE
                                             Dự trữ
                                Địa chỉ tuyến tính trang có lỗi
                 Địa chỉ cơ sở của thư mục trang             12 bit dự trữ
PG - Paging (Trang)
r - reversed (dự trữ)
TS - Task Switch: chuyển nhiệm vụ
EM - Emulation: cho phép mô phỏng bộ đồng xử lý
MP - Math Present: Cho biết có bộ đồng xử lý
PE - Protection Enable: Cho phép chế độ bảo vệ
d/ Các thanh ghi hệ thống
- Thanh ghi nhiệm vụ (TR - Task Register)
- Thanh ghi bảng mô tả cục bộ (LDTR - Local Descriptor Table Register)
- Thanh ghi bảng mô tả toàn cục (GDTR - Global Descriptor Table Register)
- Thanh ghi bảng mô tả ngắt (IDTR - Interrupt Descriptor Table Register)
  15   Bộ chọn    0 31    Địa chỉ cơ sở        0 15 Độ dài          0
                                                                          TR
                                                                          LDTR

                                                                          IDTR
                                                                          GDTR

GDTR và IDTR chứa 32 bit địa chỉ cơ sở tuyến tính và 16 bit giới hạn độ dài của
các đoạn GDT và IDT.
LDTR và TR có hai phần: phần chọn đoạn hệ thống (thanh ghi chọn đoạn hệ
thống) và phần chứa bộ mô tả quy chiếu đoạn này (thanh ghi mô tả đoạn hệ

Khoa CNTT                                 Trang 32                                       KTMT
Gi¸o tr×nh vi xö lý

thống). LDTR chứa bộ chọn 16 bit trỏ đến bộ mô tả của LDT và TSS sẽ được
sao sang phần kín của các thanh ghi LDTR và TR. Mỗi một nhiệm vụ có một
LDT và TSS riêng.
e/ Các thanh ghi kiểm tra và gỡ rối
                        31                                 0
            DR0         Địa chỉ tuyến tính của điểm dừng 0
            DR1         Địa chỉ tuyến tính của điểm dừng 1
            DR2         Địa chỉ tuyến tính của điểm dừng 2     Các thanh
            DR3         Địa chỉ tuyến tính của điểm dừng 3     ghi gỡ rối
            DR6          Từ trạng thái của các điểm dừng
            DR7          Từ điều khiển của các điểm dừng


            TR6               Từ điều khiển kiểm tra           Các thanh
            TR7               Từ trạng thái kiểm tra           ghi kiểm tra


2.2.3. Quản lý bộ nhớ
2.2.3.1 Không gian nhớ và nhiệm vụ nhớ
Không gian nhớ và nhiệm vụ nhớ của 80386 cũng giống 80286, có điều khác là
80386 hoạt động với môt trường với 32 bit. Do vậy bộ nhớ trong hệ thống 80386
có thể được tổ chức theo byte (8 bit), theo từ (16 bit) hay từ kép
(32 bit). Từ được xếp như 2 byte liên tiếp, byte thấp có địa chỉ thấp, byte có địa
chỉ cao, địa chỉ của từ là địa chỉ của byte thấp. Từ kép cũng được lưu trữ 4 byte
theo cách như vậy.
Ngoài quản lí bộ nhớ theo đoạn (đoạn có thể có độ dài khác nhau và có thể trao
đổi với bộ nhớ ngoài hay phân chia giữa các chương trình) 80386 còn có thể
quản lí bộ nhớ theo trang (page) có độ dài 4 Kbyte mỗi trang.
2.2.3.2. Các đia chỉ lôgic, tuyến tính, vật lí và quản lí bộ nhớ theo trang.
Trong 80386 có 3 loại địa chỉ cần được phân biệt: địa chỉ lôgic, tuyến tính, vật lí
và quản lí bộ nhớ theo trang.
                              14
Mỗi nhiệm vụ có nhiều nhất 2 = 16k bộ chọn, offset có thể là 2 32 = 4 Gbyte, như
vậy một nhiệm vụ có cực đại 2 64 = 64 tetrabyte. Nói cách khác, không gian địa
chỉ lôgic là 2 64 = 64 tetrabyte, trong khi không gian địa chỉ vật lí chỉ rông 4


Khoa CNTT                          Trang 33                                   KTMT
Gi¸o tr×nh vi xö lý

Gbyet vì 80386 có 32 dây địa chỉ. Tổ hợp của các địa chỉ cơ sở đoạn và offset
bên trong các đoạn đó tạo nên thang địa chỉ tuyến tính, có nghĩa rằng ta có thể
tìm thấy các địa chỉ tuyến tính lớn hơn chỉ tới một đoạn lôgic nằm ở vùng địa chỉ
thấp. Địa chỉ tuyến tính 32 bit bằng 32 bit địa chỉ cơ sở cộng với 32 bit offset.
Việc sử dụng địa chỉ đoạn lôgic có vài đièu bất tiện (ví dụ như trong việc trao
đổi, swapping, các đoạn nhớ với đĩa từ) nên 80386 được tran bị thêm cách quản
lí bộ nhớ theo trang sẽ được trình bày trong các phần sau.
 1. Định địa chỉ ở chế độ thực.
Sau khi bật nguồn hay reset, 80386 ở chế độ thực. Cơ chế địa chỉ hoá và kích
thước bộ nhớ 80286 ( Kích thước cực đại là Mbyte ), vì vậy chỉ có các dây địa
chỉ A2-A19 và BE0 -BE3 là tích cực. ở chế độ này bộ nhớ theo trang không được
phép, do vậy địa chỉ tuyến tính cũng giống địa chỉ vật lí. Cách tính địa chỉ vật lí
giống như ở 80386.
2. Định địa chỉ ở chế độ bảo vệ.
Lúc này địa chỉ lôgic được xác định bởi hai phần:
- Bộ chọn là nội dung các thanh ghi chọn đoạn 16Bit trong đó chỉ số để xác định
địa chỉ cỏ sở 32 Bit của bộ mô tả đoạn.
- Offset đựoc tạo nên bởi 3 thành phần: Địa chỉ có cơ sở đoạn nhớ(base), chỉ
số(index) và đọ dịch chuyển (displacement).
Việc chuyển từ chế độ thực sang chế độ bảo vệ được thực hiện bằng cách đặt bit
PE trong thanh ghi CR0 bằng 1 và được nghi lại từ chế độ bảo vệ chế độ thực
bằng cách xoá bit PE bằng 0.




   Cách tính địa chỉ hiệu
              Chỉ
   dụng offset
   Địa chỉ cơ sở  Độ dịch

                                   Địa chỉ                  Bộ nhớ
                 offse              tuyến           Địa chỉ vật lý
                 t      Đơn vị quản tính Đơn vị quản vật lý
  Bộ chọn
                 32bit lý theo đoạn        lý theo
                Chỉ số                      trang
Thanh ghi       tới bộ
chọn đoạn       mô tả
Khoa CNTT                         Trang 34                                 KTMT
Gi¸o tr×nh vi xö lý




Đơn vị quản lí đoạn sẽ chuyển địa chỉ lôgic thành địa chỉ tuyến tính 32 bit. Nếu
đơn vị quản lí trang không được phép làm việc thì 32bit địa chỉ tuyến tính sẽ
tương ứng với các địa chỉ vật lí.
3. Khởi động và chuyển sang chế độ bảo vệ
Ngay sau khi khởi động, 80386 làm việc ở chế độ thực. Để chuyển sang chế độ
bảo vệ phải đặt bit PE của thanh ghi điều khiển CR0 bằng lệnh move CR0, R/M.
Sau khi chuyển sang chế độ bảo vệ, lệnh nhảy giữa các đoạn sẽ được thực hiện
để xếp lại hàng nhận lệnh trước PQ. Tiếp theo các đoạn số liệu được nạp vào
bằng các bộ chọn với giá trị khởi đầu.
Một cách khác để chuyển vào chế độ bảo vệ trong các hệ điều hành đa nhiệm là sử
dụng phép chuyển nhiệm vụ đã nạp các thanh ghi. Lúc này trong GDTM ngoài
các bộ mô tả đoạn số liệu và đoạn lệnh còn có hai bộ mô tả TSS. Lệnh JMP đầu
tiên trong chế độ bảo vệ sẽ gây ra phép chuyển nhiệm vụ và nạp tất cả các thanh
ghi các giá trị chứa trong TSS. Thanh ghi TR được khởi động để trỏ tới một bộ
mô tả TSS, vì khi chuyển nhiệm vụ, thạng thái của nhiệm vụ đang thực hiện sẽ
được cất vào TSS.

2.3. BỘ VI XỬ LÝ 80486
2.3.1. Các phần tử xử lí CISC và RISC
Họ 80x86 của Intel thường hoạt động theo nguyên tắc dùng vi xử lí có tập lệnh
phức tạp CISC (Complex Instruction Set Computer). Đặc điểm là nó có số lượng
lệnh lớn (thường hơn 300 lệnh), có khả năng định địa chỉ phức tạp, các lệnh
được vi lệnh hoá có nghĩa là CPU hoạt động bằng vi chương trình.
Nghiên cứu điều tra thống kê đã chỉ ra những kết luận sau:
- Trong nhiều chương trình điển hình được xử lí bằng bộ vi xử lí CISC như nói
trên thì đến 80% thời gian chạy chương trình được thực hiện bởi 20% số lệnh
trong tập lệnh.
- Có những trường hợp, để đạt được cùng một kết quả thì việc chạy một chuỗi
lệnh đơn giản sẽ nhanh hơ là chạy một lệnh phức tạp.



Khoa CNTT                         Trang 35                               KTMT
Gi¸o tr×nh vi xö lý

Những kết luận này là tiền đề để một loại vi xử lí khác ra đời; nó hoạt động theo
phương pháp sử dụng tập lệnh ngắn gọn RISC (Reduced Instruction Set
computer), thí dụ như i860 của Intel. Tập lệnh ở đây được hạn chế vào các lệnh
chính yếu cần thiết trong số 20% lệnh nói trên và phần cứng được thiết kế sao cho
phần tử RISC này hiểu ngay được lệnh máy do trương trình cung cấp. Do đó các
lệnh loại này không cần chuyển cho bộ giải mã vi lệnh nữa mà được thực hiện
ngay. Như bên phải hình 59, các lệnh máy trong hàng nhận lệnh trước PQ được
trực tiếp chạy ngay mà không cần phải được giải mã thành một chuỗi các vi lệnh.
Rõ ràng thời gian để thực hiện một lệnh ở đây được rút ngắn đi nhiều so với
trường hợp ở bộ vi xử lí CISC.
2.3.2. vi xử lí 80486
2.3.2.1. Đặc điểm chung
Chip i486 có mật độ tích hợp rất cao gồm bên trong một vi xử lí i386 đã cải tiến,
một bộ đồng xử lí toán 80387, một bộ điều khiển cache và một bộ nhớ cache 8
kbyte (Cache là một loại bộ nhớ RAM tĩnh có dung lượng nhỏ nhưng tốc độ truy
cập nhanh hơn so với bộ nhớ chính là các RAM động, sẽ được đề cập tới trong
các phàn sau). Giống như i386, bus số liệu và bus địa chỉ ở đây cũng rộng 32 bit,
tốc đọ truyền tải dữ liệu có thể lên tới 160 Mbyte/s.
Đây là thiết kế dựa trên kết quả của việc tích hợp hai loại phần tử xử lí CISC và
RISC trong cùng một chip CPU. Trong i486, các lệnh mac máy thường xuyên
được sử dụng sẽ được cài đặt sẵn và có thể được thực hiện ngay, trong khi các
lệnh phức tạp nhất và ít được sử dụng sẽ thông qua bộ giải mã vi lệnh. Theo
phương thức này, hầu như tất cả các lệnh có thể được thực hiện gọn trong một chu
kì xung nhịp đồng hồ.
Vi xử lí i486 hoàn toàn tương tích với i386 về tập lệnh và các loại số liệu. Nó
cũng có thể chạy trong các chế đọ thực, bảo vệ cũng như phân loại và phân
trang. Vì đơn vị đồng sử lí toán (đơn vị dấu phảy động) được tích hợp ngay trong
cùng một chip với CPU nên tốc độ trao đổi dữ liệu cũng nhanh hơn so với hệ
i386 và i387 tách rời.
2.3.2.2. cấu trúc bên trong i486




Khoa CNTT                          Trang 36                              KTMT
Gi¸o tr×nh vi xö lý

Bởi vì có đến 3 đơn vị xử lí cùng được tích hợp trong một chip (CPU, bộ đồng
xử lí toán, bộ điều khiển cache và bộ nhớ cache) nên cấu trúc của i486 phức tạp
hơn i386 nhiều. Sơ đồ khối bên trong của nó được chỉ ra trên hình 60.
Các bus số liệu, địa chỉ và số liệu được nối với bên ngoài qua khối ghép nối bus,
khối này được nối trực tiếp với bộ nhớ cache bên trong vi xử lí (được gọi là
cache cấp một, để phân biệt với bộ nhớ cache cấp hai nằm trên bản mạch chính ở
bên ngoài vi xử lí). Bộ nhớ cache nội 8 byte này được dùng làm bộ đệm cho số
liệu và lệnh đến từ bộ nhớ chính trước khi chúng được chuyển tới các thanh ghi,
ALU, bộ đồng xử lí toán hoặc hàng nhận lệnh trước PQ dài 32 byte.




Khoa CNTT                        Trang 37                                KTMT
Gi¸o tr×nh vi xö lý


                                     BUS dữ liệu 32 bit
                                BUS địa chỉ 32 bit


                                       Khối        Khối         ALU
                         8             phân        phân         và
                         KB            trang       đoạn         thanh
     D0-D31              Cac                                    ghi

    A0-A31 Khố
           i
    Bus    ghé                                          BUS các
    điều   p                                            lệnh nội bộ
    khiển  nối
                         PQ            Khối        Khối        Bộ
           BU                                                  đồng
           S             32by          giải        điều
                         te            mã          khiển       xử lý
                                                               toán

Khác với chu kì thâm nhập bộ nhớ cache cấp hai phải mất hai nhịp đồng hồ, việc
thâm nhập cache cấp một này chỉ mất một chu kì nhịp đồng hồ. Do vậy, mặc dù
dung lượng nhớ của cache nội chỉ có 8 kbyte nhưng nó vẫn cải thiện đáng kể chỉ
tiêu của hệ thông. Trong trường hợp các số liệu hoặc lệnh từ bộ nhớ chính không
được nạp qua cache thì chúng sẽ được đưa trực tiếp tới các thanh ghi hoặc hàng
nhận lệnh trước PQ qua khối ghép nối bus. Điều này xảy ra khi i486 xử lí các số
liệu rất phân tán hoặc trong trường hợp thực hiện các lệnh nhảy tới một địa chỉ
xa.
Sau bộ nhớ cache, các đường lệnh và số liệu được phân tách ra. Các byte số liệu
được chuyển tới các thanh ghi hoặc bộ đồng xử lí toán. Các byte lệnh được đưa
vào hàng nhận lệnh trước, hàng này dài 32 byte. Đơn vị giải mã sẽ giải mã các
lệnh và truyền chúng tới khối điều khiển để điều khiển các thanh ghi, khối tính
số học và lôgic ALU, khối phân đoạn và bộ đồng xử lí toán. Một số lệnh không
cần giải mã mà có thể chạy ngay lập tức do i486 có tích hợp cả công nghệ RISC.
Nếu các toán hạng tức thời hoặc độ dịch chuyển hiện diện trong dòng lệnh thì
hàng nhận lệnh trước sẽ phân tách chúng và truyền chúng tới ALU hoặc khối
phân đoạn. Các byte số liệu được cấp tới khối phân đoạn, các thanh ghi, ALU
hoặc bộ đồng xử lí toán và được xử lí tại những nới đó. Hai bus dữ liệu 32 bit


Khoa CNTT                        Trang 38                               KTMT
Gi¸o tr×nh vi xö lý

hình thành nên một bus dữ liệu 64 bit dùng cho việc truyền tải dữ liệu giữa CPU
tương ứng với i386 và bộ đồng xử lí toán tương ứng với i387. Khác với tổ hợp
i386/ 1387 thông thường, quá trình trao đổi số liệu và mã lệnh ở đây không cần
chu kì bus vào/ra vì cả hai khối đã được tích hợp cả trên những chip rồi. Hơn
nữa, do bề rộng dữ liệu bên trong chip lại là 64 bit khi sử dụng bộ đồng xử lí
toán nên các lệnh ESC ở đây sẽ chạy nhanh hơn nhiều so với máy tính dùng i386
và 387.
Giống như các vi xử lí họ 80x86, ở đây cũng dùng các thanh ghi đoạn và thanh
ghi offset. Trong khối phân đoạn, nội dung của hai thanh ghi này được kết hợp
lại thành địa chỉ tuyến tính. Trong chế độ bảo vệ, khối phân đoạn sẽ thực hiện
các kiểm tra cần thiết để bảo vệ các nhiệm vụ riêng biệt và bảo vệ hệ thống. Nếu
chế độ trang không được kích hoạt thì địa chỉ tuyến tính này chính là địa chỉ vật
lí. Nếu chế độ trang được kích hoạt thì địa chỉ tuyến tính được chuyển thành địa
chỉ vật lí bởi khối phân trang.
Vì những lí do trên, CPU i486 có hiệu suất cao gấp hai đến ba lần so với các
CPU trước nếu hoạt động ở cùng một tần số. Tần số hoạt động của bộ vi xử lí
cũng chính là tần số của mạch tạo xung nhịp. Để thi hành đa xử lí
(multiprocessing), nhiều lệnh mới đã được trang bị để dễ dàng trao đổi dữ liệu
giữa các bộ vi xử lí.
Với vi xử lí 486 DX2 hoặc DX4, tần số nhịp được cấp cho CPU sẽ được nhân 2
hoặc 3 ở bên trong chip cho phép có thể tăng tốc độ của vi xử lí mà không đòi
hỏi bản mạch chính cũng phải có cùng tốc độ đó. Điều này làm giảm nhẹ việc
thiết kế chế tạo các bản mạch chính phải chạy ở tần số cao, do đó giá thành sản
phẩm cũng được giảm theo. Thí dụ, vi xử lí i486 DX2/50MHz chỉ cần chạy với
bản mạch chính 25 MHz, DX2/66MHz hay DX4/100MHz với bản mạch chính
33MHz. Theo phương án này, nhìn chung máy vi tính phải chịu thiệt về hiệu
suất, vì CPU tiến hành xử lí số liệu nhanh gấp hai hoặc ba lần so với các bộ phận
trên bản mạch chính, do đó có thể phải xen vào một vài chu kì đợi (wait cycle).
Để giải quyết vấn đề này, một bộ nhớ cache ngoài đủ rộng để giữ tạm các lệnh
và dữ liệu mà bộ vi xử lí phải đợi. Nếu được thiết kế hợp lí, hệ thống như vậy có
thể đạt tới hiệu suất 80% so với các hệ thống có tốc độ xung nhịp trên bản mạch
chính bằng tốc độ xung nhịp ở trong CPU.


Khoa CNTT                        Trang 39                                KTMT
Gi¸o tr×nh vi xö lý

Sự khác biệt duy nhất giữa loại 486DX và 486SX chỉ là trong 486SX không có
bộ đồng xử lí toán.

2.4. CÁC BỘ VI XỬ LÝ INTEL PENTIUM
2.4.1. Đặc điểm chung
Bộ vi xử lí pentium ra đời làm cho kĩ thuật của máy PC lại thay đổi. Về phần
mềm, pentium vẫn có tập lệnh, thanh ghi, các chế độ định địa chỉ và các chế độ
hoạt động hoàn toàn tương thích với các CPU trước nó. Nhưng về phần cứng,
pentiumcó những cải tiến đáng kể. Phiên bản đầu tiên ra đời năm 1993 được chế
tạo theo công nghệ 0,8 micron BiCMOS, đó là công nghệ cho phép tạo ra các vi
mạch có những phần tử tích cực trong đó có kích thước nhỏ nhất cỡ 0,8 phần
triệu mét. Với công nghệ này các chip điện tử sẽ có kích thước bé hơn, tiêu thụ
ita năng lượng hơn và cái chính là hiệu suất cao hơn vì các tín hiệu di chuyển
trong nội bộ chip với quãng đường ngắn hơn. Với 3,1 triệu linh kiện bán dẫn
trong cấu trúc gọi là superscalar xây dựng trên hai hay nhiều đường ống
(pipeline), loại pentium có đặc trưng 100MIPS (Million Instruction Per Second),
tức là có thể thực hiện hàng triệu lệnh trong một giây với tốc độ đồng hồ là 66
MHz. Do đó nó hoạt động nhanh gấp hai lần chip 486DX2/66 về các phép tính
số nguyên và ba đến bảy lầnvới các phép tính số học có dấu phảy động. Mặc dù
có bus dữ liệu rộng 64 bit nhưng pentium vẫn được thiết kế để làm việc với bus
dữ liệu ngoài 32 bit tương thích với các thế hệ vi xử lí i386/i486 trước đó.
2.4.2. Cấu trúc và tính năng                  Bộ xử lý
 Vùng đệm                                     dấu phảy
Sơ đồ khối của vi xử lí pentium có thể được trình bày như sau:
   đích rẽ                                    động
   nhánh

                                                    Đường
                                                  ống U của
                                                     ALU
                               Hàng               Các thanh           Cache
Cache lệnh                                        ghi
                             nhận lệnh                                dữ liệu
8KB                            trước                                   8KB
                                                    Đường
                                                  ống V của
                   Bus dữ liệu 64bit                 ALU



Khoa CNTT                              Trang 40                         KTMT
                                       Đơn vị
         Bus địa chỉ 32bit              BUS
Gi¸o tr×nh vi xö lý




- Pentium có hai bộ nhớ cache 8 kbyte riêng biệt, một dành cho lệnh một dành
cho số liệu.
- Có hai hàng nhận lệnh trước 32 bit và hai bộ tính số học và lôgic ALU được
cung cấp lệnh và dữ liệu trên hai đường ống song song U và V (superscalr) cho
phép thi hành hai lệnh máy trong một chu kì.
- Bộ xử lí vẫn làm việc với các thanh ghi 32 bit và bus địa chỉ 32 bit nhưng có
thể nối với bus số liệu ngoài là 64 bit.
- Bus nội bộ là 64 bit và 128 bit, bus từ bộ nhớ cache nội nối với các vùng đệm
của các ALU rộng 256 bit. Điều này cho phép tăng tốc độ trao đổi dữ liệu trong
nội bộ vi xử lí lên rất cao.
- Có một vùng nhớ gọi là vùng đêm đích rẽ nhánh BTB (branch target buffer)
của lệnh đối với 256 lệnh rẽ mới đây nhất.
- Có một bộ đọc xử lí với hiệu xuất cao hơn nhiều lần các thế hệ trước nhờ các
giải thuật (algorthm) nhanh hơn, cách xắp sếp bố trí lệnh cũng như có thể thực
hiện đồng thời hai lệnh.
Một vài đặc trưng khác làm cho pentium phân biệt được với các vi xử lí trước là:
- Kích thước trang của bộ nhớ trong chế độ bảo vệ và ảo không chỉ hạn chế ở 4
kbyte mà có thể lên đến 2 Mbyte hay 4Mbyte.
- Khả năng tự tìm kiếm các lỗi phức tạp và gỡ rối (debugging) bằng các mạch
phần cứng lắp thêm.
- Có thể tự đánh giá được hiệu suất thi hành chương trình.



Khoa CNTT                        Trang 41                                KTMT
Gi¸o tr×nh vi xö lý

Mặc dù một số vi xử lí được xây dựng trên nguyên tắc CISC nhưng pentium đã
ứng dụng nhiều công nghệ mới giống như các loại vi xử lí RISC tốc độ cao, thí
dụ như việc sử dụng các cấu trúc đường ống, cấu trúc superscalar và dự đoán rẽ
nhánh. Điều này làm cho nó có hiệu suất cao như các vi xử lí RISC thực sự. Các
lệnh chạy trong pentium được thực hiện trên cấu trúc superscalar với hai đường
ống song song U và V, các cache nội bộ và vùng đệm đích rẽ nhánh BTB. Xét
qua các cấu trúc này sẽ cho phép giải thích tại sao pentium lại có hiệu suất cao
hơn so với các vi xử lí trước đó:
Cấu trúc superscalar với hai đường ống song song.
Việc thi hành lệnh trong các vi xử lí 80x86 và pentium được diễn ra qua 5 công
đoạn:
      1. Nhận lệnh trước từ bộ nhớ (Prefetch): lện máy được lấy từ bộ nhớ
      chuyển vào CPU.
      2. Giải mã lệnh 1 (Decode 1): giải mã, phân tích để xác định loại lệnh.
      3. Giải mã lệnh 2 (Decode 2): xác định địa chỉ ô nhớ cần truy nhập.
      4. Thực hiện lệnh (Execute)
      5. Viết các kết quả dữ liệu vào các thanh ghi và bộ nhớ (Writeback).
Nếu như mỗi công đoạn đòi hỏi tối thiểu một chu kì nhịp đồng hồ thì khi thi
hành tuần tự các công đoạn này cho mỗi lệnh, thông thường phải mất tổng cộng
năm chu kì nhịp. Nhưng với một cấu trúc đường ống có thể thực hiện đồng thời
song song những công đoạn trên, pentium tạo ra một phương thức làm việc như
sau: khi lệnh thứ (n) vừa chuyển sang công đoạn thứ hai thì một lệnh mới thứ
(n+1) được đưa ngay vào công đoạn thứ nhất v.v… Nhờ đó cả thảy có 5 lệnh sẽ
cùng được xử lí đồng thời trên một đường ống và có thể coi mỗi lệnh chỉ được
xử lí trong một chu kì nhịp đông hồ.
Hơn thế nữa, Pentium lại có đến hai đường ống gọi tên là U và V được chế tạo
hoạt động song song với nhau. Về mặt lí thuyết, nó sẽ có khả năng thi hành cùng
một lúc hai lệnh. Tuy nhiên, thực tế không phải lúc nào cũng thực hiện được
điều đó vì hai lệnh kế tiếp nhau thường phụ thuộc vào nhau và lúc này chỉ có thể
xử lí chúgn một cách tuần tự. Một mạch đặc biệt sẽ kiểm tra tính phụ thuộc dữ
liệu đó xem chúng có yêu cầu phải liên kết trong quá trình xử lí hay không. Nếu



Khoa CNTT                        Trang 42                                   KTMT
Gi¸o tr×nh vi xö lý

không phụ thuộc, hai lệnh sẽ được gửi tới hai đường ống theo đúng thứ tự. Quá
trình có thể dẫn giải như sau:trong công đoạn
một, lệnh hiện tại sẽ đưa vaod đơn vị giải mã của đường ống U, lệnh kế tiếp vào
đơn vị giải mã của đường ống V. Nếu trong công đoạn hai, mạch đặc biệt nói
trên xác định có thể thực hiện đồng thời hai lệnh thì mỗi lệnh sẽ trải qua các
công đoạn còn lại trong mỗi đường ống của nó, ngược lại thì lệnh trong ống U sẽ
trải qua công đoạn kế tiếp như bình thường còn lệnh kế tiếp trong ống V sẽ được
chuyển qua thi hành trong ống U như là lệnh theo sau lệnh hiện tại.
Bộ nhớ cache nội bộ 16 kbyte (cache cấp một)
Pentium có hai bộ nhớ cache rieng biệt, một dành cho số liệu và một dành cho
lệnh. Do tốc độ nhanh lại được tích hợp ngay trong chip vi xử lí nên các lệnh và
dữ liệu ở đây có thể được truy cập rất nhanh. Mỗi cache có dung lượng 8kbyete
gồm hai tuyến, 128 hàng cache, mỗi hàng dài 32byte. Cả hai cache này có thể
được truy xuất đồng thời từ hai đường ống U và V nhờ vào cấu trúc đan xen gấp
tám (trang).
Pentium có thể hoạt động nhịp nhàng với các vi xử lí khác trong chế độ đa xử lí
(mỗi vi xử lí có một cache nội riêng) nhờ được cấp một giao thức đặc biệt gọi là
MESI (Modified, Exclusive, Shared, Invalid). Nó cho phép việc hỗ trợ việc đồng
bộ hoá giữa các cache trong một hệ thống đa xử lí. Giao thức có chứa thủ tục bus
snooping cho phép một bộ xử lí thăm dò và xử lí các thông tin được trữ trong các
bộ nhớ cache của các bộ xử lí khác trong hệ thống.
Vùng đệm đích rẽ nhánh BTB.
Xét trường hợp khi CPU thực hiện một lệnh nhảy (JUMP). Lúc này, thay vì tiếp
tục với lệnh kế tiếp trong bộ nhớ thì việc thi hành chương trình lại được tiếp tục
với một lệnh hoàn toàn khác tại địa chỉ đích của lệnh nhảy. Điều đó dẫn tới việc
phải "tống" lệnh kế tiếp trên, vốn đã nằm sẵn trong đường ống, ra ngoài và phải
nạp một lệnh mới vào đường ống. Kết quả là hiệu suất của bộ xử lí sẽ bị giảm
xuống vì phải mất đi một vài chu kì nhịp đồng hồ cho quá trình trên. Để khắc
phục tình trạng này, petium có một vùng nhớ đệm gọi là vùng đệm đích rẽ nhánh
BTB (nghĩa là vùng đệm dành cho các lệnh nhảy- IF/THEN). Nó được sử dụng
trong công đoạn giải mã lệnh 1 (Decode 1) của tất cả các lệnh nhảy gần (NEAR
JUMP). Nếu lệnh nhảy được thi hành, CPUsẽ cất cả địa chỉ lệnh nhảy và địa chỉ


Khoa CNTT                         Trang 43                                KTMT
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)
Giao Trinh Vi Xu Ly (20 12 2008)

Contenu connexe

Tendances

Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2Vuong Sói
 
Ngân hàng câu hỏi trắc nghiệm kiến trúc máy tính
Ngân hàng câu hỏi trắc nghiệm kiến trúc máy tínhNgân hàng câu hỏi trắc nghiệm kiến trúc máy tính
Ngân hàng câu hỏi trắc nghiệm kiến trúc máy tínhkakalaxaxa
 
Kiến trúc máy tính
Kiến trúc máy tínhKiến trúc máy tính
Kiến trúc máy tínhLE The Vinh
 
Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Ngananh Saodem
 
Ngân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhNgân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhCao Toa
 
7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assemblyLy hai
 
Bài tập kiến trúc máy tính
Bài tập kiến trúc máy tínhBài tập kiến trúc máy tính
Bài tập kiến trúc máy tínhHa Nguyen
 
On tap ctmt 8086
On tap ctmt 8086On tap ctmt 8086
On tap ctmt 8086phuong thuy
 
KTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng QuátKTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng QuátDavid Nguyen
 
2 kien truc phan mem
2 kien truc phan mem2 kien truc phan mem
2 kien truc phan memLy hai
 
BGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tínhBGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tínhCao Toa
 

Tendances (20)

Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2Trac nghiem kt vi su ly 2
Trac nghiem kt vi su ly 2
 
Ngân hàng câu hỏi trắc nghiệm kiến trúc máy tính
Ngân hàng câu hỏi trắc nghiệm kiến trúc máy tínhNgân hàng câu hỏi trắc nghiệm kiến trúc máy tính
Ngân hàng câu hỏi trắc nghiệm kiến trúc máy tính
 
Ktmt chuong 1
Ktmt chuong 1Ktmt chuong 1
Ktmt chuong 1
 
Ktmt chuong 6
Ktmt chuong 6Ktmt chuong 6
Ktmt chuong 6
 
Chuong6 hoạt động ngắt
Chuong6 hoạt động ngắtChuong6 hoạt động ngắt
Chuong6 hoạt động ngắt
 
Ktmt chuong 5
Ktmt chuong 5Ktmt chuong 5
Ktmt chuong 5
 
Ktmt chuong 3
Ktmt chuong 3Ktmt chuong 3
Ktmt chuong 3
 
Kiến trúc máy tính
Kiến trúc máy tínhKiến trúc máy tính
Kiến trúc máy tính
 
Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951Tổng quan Vi điều khiển - Chức năng các chân 8951
Tổng quan Vi điều khiển - Chức năng các chân 8951
 
Ngân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhNgân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tính
 
Chuong2
Chuong2Chuong2
Chuong2
 
7 can ban assembly
7 can ban assembly7 can ban assembly
7 can ban assembly
 
Cau truc may tinh
Cau truc may tinhCau truc may tinh
Cau truc may tinh
 
Bài tập kiến trúc máy tính
Bài tập kiến trúc máy tínhBài tập kiến trúc máy tính
Bài tập kiến trúc máy tính
 
Chuong1 tổng quan 8051
Chuong1 tổng quan 8051Chuong1 tổng quan 8051
Chuong1 tổng quan 8051
 
Ktmt chuong 4
Ktmt chuong 4Ktmt chuong 4
Ktmt chuong 4
 
On tap ctmt 8086
On tap ctmt 8086On tap ctmt 8086
On tap ctmt 8086
 
KTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng QuátKTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng Quát
 
2 kien truc phan mem
2 kien truc phan mem2 kien truc phan mem
2 kien truc phan mem
 
BGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tínhBGKTMT Ch2 tổ chức hệ thống máy tính
BGKTMT Ch2 tổ chức hệ thống máy tính
 

En vedette

[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử líHong Phuoc Nguyen
 
Bài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITBài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITNgô Doãn Tình
 
Docx taplenh as_mthuongdung8051
Docx taplenh as_mthuongdung8051Docx taplenh as_mthuongdung8051
Docx taplenh as_mthuongdung8051dmt182
 
03 lap trinh hop ngu voi 8086
03 lap trinh hop ngu voi 808603 lap trinh hop ngu voi 8086
03 lap trinh hop ngu voi 8086onlylove511
 
Optimalizace sortimentu
Optimalizace sortimentuOptimalizace sortimentu
Optimalizace sortimentuJan Bízik
 
Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Hòn Đá To
 
Microprocessor final ver1_part2
Microprocessor final ver1_part2Microprocessor final ver1_part2
Microprocessor final ver1_part2Mit Rin
 
Mạng máy tính
Mạng máy tínhMạng máy tính
Mạng máy tínhMai Điệp
 
đề Cương ôn tập
đề Cương ôn tậpđề Cương ôn tập
đề Cương ôn tậphuynguyenvan19
 
Ky.thuat.vi.xu.ly uds
Ky.thuat.vi.xu.ly udsKy.thuat.vi.xu.ly uds
Ky.thuat.vi.xu.ly udsna
 
Nguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loiNguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loikiencuongk
 
Link asm in another language
Link asm in another languageLink asm in another language
Link asm in another languageMy Đá
 
Giao trinh mang_may_tinh
Giao trinh mang_may_tinhGiao trinh mang_may_tinh
Giao trinh mang_may_tinhHai Nguyen
 
Ktmt c61 hop ngu assembly
Ktmt c61 hop ngu assemblyKtmt c61 hop ngu assembly
Ktmt c61 hop ngu assemblytramhienkhcb
 
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTBÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTMasterCode.vn
 
Chuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop nguChuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop ngumituan
 

En vedette (20)

[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí[Cntt] bài giảng kĩ thuật vi xử lí
[Cntt] bài giảng kĩ thuật vi xử lí
 
Bài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITBài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PIT
 
Bài giảng Assembly
Bài giảng AssemblyBài giảng Assembly
Bài giảng Assembly
 
Ch assembly
Ch assemblyCh assembly
Ch assembly
 
Docx taplenh as_mthuongdung8051
Docx taplenh as_mthuongdung8051Docx taplenh as_mthuongdung8051
Docx taplenh as_mthuongdung8051
 
03 lap trinh hop ngu voi 8086
03 lap trinh hop ngu voi 808603 lap trinh hop ngu voi 8086
03 lap trinh hop ngu voi 8086
 
Optimalizace sortimentu
Optimalizace sortimentuOptimalizace sortimentu
Optimalizace sortimentu
 
Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Bai giang-ktvxl-2012
Bai giang-ktvxl-2012
 
Microprocessor final ver1_part2
Microprocessor final ver1_part2Microprocessor final ver1_part2
Microprocessor final ver1_part2
 
Vixuly1
Vixuly1Vixuly1
Vixuly1
 
Mạng máy tính
Mạng máy tínhMạng máy tính
Mạng máy tính
 
đề Cương ôn tập
đề Cương ôn tậpđề Cương ôn tập
đề Cương ôn tập
 
Ky.thuat.vi.xu.ly uds
Ky.thuat.vi.xu.ly udsKy.thuat.vi.xu.ly uds
Ky.thuat.vi.xu.ly uds
 
Chuong4
Chuong4Chuong4
Chuong4
 
Nguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loiNguyen van chinh tran duc thang vy duc loi
Nguyen van chinh tran duc thang vy duc loi
 
Link asm in another language
Link asm in another languageLink asm in another language
Link asm in another language
 
Giao trinh mang_may_tinh
Giao trinh mang_may_tinhGiao trinh mang_may_tinh
Giao trinh mang_may_tinh
 
Ktmt c61 hop ngu assembly
Ktmt c61 hop ngu assemblyKtmt c61 hop ngu assembly
Ktmt c61 hop ngu assembly
 
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPTBÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
BÀI 6: Thủ tục (SUB) và hàm (FUNCTION) - Giáo trình FPT
 
Chuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop nguChuong 4. lap trinh hop ngu
Chuong 4. lap trinh hop ngu
 

Similaire à Giao Trinh Vi Xu Ly (20 12 2008)

Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaViết thuê trọn gói ZALO 0934573149
 
Tìm hiểu cách dùng pic để chạy motor bước
Tìm hiểu cách dùng pic để chạy motor bướcTìm hiểu cách dùng pic để chạy motor bước
Tìm hiểu cách dùng pic để chạy motor bướcDan Vu
 
2. Phan cung may tinh.ppt
2. Phan cung may tinh.ppt2. Phan cung may tinh.ppt
2. Phan cung may tinh.ppthangdong15
 
vxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongvxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongLong Tran Huy
 
Vxl ch03-8051-3.1 3.2-v03
Vxl ch03-8051-3.1 3.2-v03Vxl ch03-8051-3.1 3.2-v03
Vxl ch03-8051-3.1 3.2-v03Huynh MVT
 
chappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfchappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfngtloc2017
 
Chuong 2 gioi thieu ve cau truc ho vdk 8051
Chuong 2 gioi thieu ve cau truc ho vdk 8051Chuong 2 gioi thieu ve cau truc ho vdk 8051
Chuong 2 gioi thieu ve cau truc ho vdk 8051Bút Chì
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thuTrần Đức Anh
 
datasheet.pdf
datasheet.pdfdatasheet.pdf
datasheet.pdfDuyL84058
 
Gioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picGioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picCu Bi
 
De cuong btht (cdcq)
De cuong btht (cdcq)De cuong btht (cdcq)
De cuong btht (cdcq)Đinh Luận
 

Similaire à Giao Trinh Vi Xu Ly (20 12 2008) (20)

Vi si ly
Vi si lyVi si ly
Vi si ly
 
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
 
Tìm hiểu cách dùng pic để chạy motor bước
Tìm hiểu cách dùng pic để chạy motor bướcTìm hiểu cách dùng pic để chạy motor bước
Tìm hiểu cách dùng pic để chạy motor bước
 
ghsx.pdf
ghsx.pdfghsx.pdf
ghsx.pdf
 
2. Phan cung may tinh.ppt
2. Phan cung may tinh.ppt2. Phan cung may tinh.ppt
2. Phan cung may tinh.ppt
 
câu 1.docx
câu 1.docxcâu 1.docx
câu 1.docx
 
Ch01
Ch01Ch01
Ch01
 
vxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongvxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhong
 
Atmel avr
Atmel avrAtmel avr
Atmel avr
 
Ceec
CeecCeec
Ceec
 
Bao cao vdk_va_pic
Bao cao vdk_va_picBao cao vdk_va_pic
Bao cao vdk_va_pic
 
Vxl ch03-8051-3.1 3.2-v03
Vxl ch03-8051-3.1 3.2-v03Vxl ch03-8051-3.1 3.2-v03
Vxl ch03-8051-3.1 3.2-v03
 
chappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdfchappter 1- Advanced Microprocessor presentation.pdf
chappter 1- Advanced Microprocessor presentation.pdf
 
Chuong 2 gioi thieu ve cau truc ho vdk 8051
Chuong 2 gioi thieu ve cau truc ho vdk 8051Chuong 2 gioi thieu ve cau truc ho vdk 8051
Chuong 2 gioi thieu ve cau truc ho vdk 8051
 
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thuTailieu.vncty.com   thiet-ke-dong-ho-thoi-gian-thu
Tailieu.vncty.com thiet-ke-dong-ho-thoi-gian-thu
 
Chuong2 cấu trúc phần cứng 8051
Chuong2 cấu trúc phần cứng 8051Chuong2 cấu trúc phần cứng 8051
Chuong2 cấu trúc phần cứng 8051
 
datasheet.pdf
datasheet.pdfdatasheet.pdf
datasheet.pdf
 
Vi dieu khien_pic
Vi dieu khien_picVi dieu khien_pic
Vi dieu khien_pic
 
Gioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-picGioi thieu-ve-vi-dieu-khien-pic
Gioi thieu-ve-vi-dieu-khien-pic
 
De cuong btht (cdcq)
De cuong btht (cdcq)De cuong btht (cdcq)
De cuong btht (cdcq)
 

Plus de Nguyen Chien

Evolutionary inaccuracy of pairwise structural alignments (slide)
Evolutionary inaccuracy of pairwise structural alignments (slide)Evolutionary inaccuracy of pairwise structural alignments (slide)
Evolutionary inaccuracy of pairwise structural alignments (slide)Nguyen Chien
 
Vxl Dahl 2009 05 08
Vxl Dahl 2009 05 08Vxl Dahl 2009 05 08
Vxl Dahl 2009 05 08Nguyen Chien
 
Ham Giai Phuong Trinh Bac 2
Ham Giai Phuong Trinh Bac 2Ham Giai Phuong Trinh Bac 2
Ham Giai Phuong Trinh Bac 2Nguyen Chien
 
Quy Che Quyet Dinh 14
Quy Che Quyet Dinh 14Quy Che Quyet Dinh 14
Quy Che Quyet Dinh 14Nguyen Chien
 
Discrete And Continuous Simulation
Discrete And Continuous SimulationDiscrete And Continuous Simulation
Discrete And Continuous SimulationNguyen Chien
 

Plus de Nguyen Chien (9)

Evolutionary inaccuracy of pairwise structural alignments (slide)
Evolutionary inaccuracy of pairwise structural alignments (slide)Evolutionary inaccuracy of pairwise structural alignments (slide)
Evolutionary inaccuracy of pairwise structural alignments (slide)
 
P0126557 report
P0126557 reportP0126557 report
P0126557 report
 
P0126557 slides
P0126557 slidesP0126557 slides
P0126557 slides
 
Vxl Dahl 2009 05 08
Vxl Dahl 2009 05 08Vxl Dahl 2009 05 08
Vxl Dahl 2009 05 08
 
Mips Assembly
Mips AssemblyMips Assembly
Mips Assembly
 
Risc
RiscRisc
Risc
 
Ham Giai Phuong Trinh Bac 2
Ham Giai Phuong Trinh Bac 2Ham Giai Phuong Trinh Bac 2
Ham Giai Phuong Trinh Bac 2
 
Quy Che Quyet Dinh 14
Quy Che Quyet Dinh 14Quy Che Quyet Dinh 14
Quy Che Quyet Dinh 14
 
Discrete And Continuous Simulation
Discrete And Continuous SimulationDiscrete And Continuous Simulation
Discrete And Continuous Simulation
 

Giao Trinh Vi Xu Ly (20 12 2008)

  • 1. Gi¸o tr×nh vi xö lý 1.1. TỔNG QUAN VỀ CÁC BỘ VI XỬ LÝ CỦA INTEL Một hệ vi xử lý được gọi là một hệ thống trong đó bao gồm: - Đơn vị nhập xuất: Được sử dụng để nhập và xuất số liệu, dữ liệu. - Đơn vị xử lý: Xử lý các dữ liệu nhập vào, sau đó xuất ra các thiết bị ra. - Bộ nhớ: Lưu trữ thông tin, dữ liệu trong quá trình xử lý Tất cả các thiết bị có các chức năng như vậy đều có thể được gọi là một hệ vi xử lý. Máy vi tính là một hệ thống vi xử lý. Một thành phần quan trọng trong hệ thống máy vi tính, đó là bộ vi xử lý. Trên thự tế, có rất nhiều hãng chế tạo bộ vi xử lý cho các máy vi tính như: IBM, Intel, Cyrix, AMD, Motorola.... Nhưng thông dụng nhất vẫn là bộ vi xử lý của Intel. Các bộ vi xử lý của Intel được phát triển qua các thời kỳ như sau: Năm 1971, Intel đưa ra bộ vi xử lý 4004 với 4 bit dữ liệu, 12 bit địa chỉ; 0,8MHz Năm 1972, bộ vi xử lý Intel 8080 ra đời với 8bit dữ liệu, 12 bit địa chỉ; tốc độ xử lý 0,8-5MHz Năm 1974, bộ vi xử lý Intel 8085 ra đời với 8bit dữ liệu, 16 bit địa chỉ; tốc độ xử lý 5MHz Năm 1978, bộ vi xử lý Intel 8086 ra đời với 16bit dữ liệu, 20 bit địa chỉ; tốc độ xử lý 10MHz Năm 1979, bộ vi xử lý Intel 8088 ra đời nhằm mục đích giảm giá bộ vi xử lý và tương thích với hệ thống 8086 cũ Năm 1982 bộ vi xử lý 80286 ra đời với 16bit dữ liệu, 20 bit địa chỉ, tốc độ xư lý là 20MHz có thể định địa chỉ ở chế độ bảo vệ và chế độ thực. Năm 1985-1988, bộ vi xử lý 80386 ra đời với 32 bit dữ liệu và 32 bit địa chỉ tốc độ xử lý 33-40MHz Năm 1989, bộ vi xử lý 80486 ra đời với 32 bit dữ liệu và 32 bit địa chỉ tốc độ xử lý 50-60MHz Năm 1993, bộ vi xử lý Pentium ra đời với 64 bit dữ liệu, tốc độ xử lý 100MHz Sau đó là các bộ vi xử lý Pentium Pro,Pentium II, Pentium III, Celeron, Pentium 4 Khoa CNTT Trang 1 KTMT
  • 2. Gi¸o tr×nh vi xö lý 1.2. CẤU TRÚC BỘ VI XỬ LÝ 8086 1.2.1. Sơ đồ khối E.U (execution unit) B.I.U Bus địa chỉ (20 Bus Accumulatbit) ∑ dữ liệu Các thanh or (8 bit) Base ghi đa năng Count Bus A BXC D S B S D Data AXB CXDXSPBPSIDI Code Các trong Stack segment than của Data segment h ghi Các thanh pointer CPU ghi con Base Stack segment DSS E đoạn C D SSES CS 8 bit pointer Source I IP và dữ trỏ và chỉ Extra index con liệu số Destination segment Intruction pointer trỏ 20 index lệnh bit địa chỉ Bus dữ liệu ALU (16 bit) Logic Bus Các thanh ghi tạm điều ngo khiển thời ài Khối điều khiển ALU của EU Đệm lệnh (hàng đợi lệnh) (6 byte cho 8086) Thanh ghi cờ Hình 1.1: Sơ đồ cấu trúc bên trong bộ vi xử lý 8086/8088 1.2.2. Giải thích các thành phần trong sơ đồ Khoa CNTT Trang 2 KTMT
  • 3. Gi¸o tr×nh vi xö lý Khối phối ghép Bus (Bus Interface Unit - BIU) Khối thực hiện lệnh (Execution Unit - EU) • Đơn vị EU Đơn vị EU của 8086 và 8088 là giống nhau nó bao gồm ALU, các thanh ghi cờ, thanh ghi đệm và các thanh ghi đa năng. Các kênh truyền dữ liệu bên trong EU đều là 16 bit. EU không nối trực tiếp với thế giới bên ngoài, nó lấy lệnh từ hàng đợi lệnh của BIU. Nếu lệnh cần truy xuất bộ nhớ hoặc cổng vào/ra (là nơi liên hệ với thiết bị ngoại vi ) thì EU yêu cầu BIU nhận hoặc gửi dữ liệu. Tất cả các địa chỉ mà BIU thao tác đều là 16 bit, khi gửi sang cho BIU sẽ sắp đặt lại để tạo thành địa chỉ vật lý 20 bit phát ra các chân ra địa chỉ của chip. • Đơn vị BIU Đơn vị BIU thực hiện tất cả các thao tác với Bus mà BIU yêu cầu, ngoài ra khi BIU đang thực hiện một lệnh, thì BIU có thể lấy lệnh từ bộ nhớ về đặt trong hàng đợi lệnh. Hàng đợi lệnh của 8086 dài 6 byte, của 8088 dài 4 byte. Việc lấy lệnh về của BIU và việc thực hiện lệnh của BIU thực hiện song song với nhau (trừ một số trường hợp ngoại lệ) làm cho hiệu năng của vi xử lý tăng lên. 1.2.3. Một số khái niệm cơ bản * Pipelining: Là một phương pháp xử lý lệnh trên một đường ống lệnh, có thể xử lý nhiều lệnh đồng thời trong cùng một khoảng thời gian. Trong khi lệnh này đang được xử lý thì lệnh tiếp sau nó đã được nhận vào... Chúng ta có thể so sánh phương pháp xử lý bằng pipeline và phương pháp xử lý dòng lệnh tuần tự như hai hình dưới đây: a) b) Khoa CNTT Trang 3 KTMT
  • 4. Gi¸o tr×nh vi xö lý Hình 1.2. So sánh pipeline và tuần tự a) Xử lý bằng Pipeline b) Xử lý tuần tự * CISC, RISC và VLIW CISC – Complex Instruction Set Computer (Máy tính với tập lệnh đầy đủ) RISC – Reduced Instruction Set Computer (Máy tính với tập lệnh rút gọn) VLIW – Very Long Instruction Word (Máy tính với từ lệnh cực dài) Về cơ bản, công nghệ hiện nay vẫn dựa trên cơ sở bộ vi xử lý CISC và RISC. Chúng ta có thể so sánh sơ bộ về hai công nghệ này: RISC CISC C Cấu thành từ một vài lệnh l Đầy đủ với độ phân cấp đơn Đ Các lệnh được thực thi đ Các lệnh được thực thi bằng bằng các vi chương trình phần cứng b Kích thước và thời gian p Kích thước của một lệnh và thực hiện của các lệnh thời gian thực thi của mỗi khác nhau. lệnh gần như nhau 1.3. TẬP THANH GHI CỦA BỘ VI XỬ LÝ 8086 1.3.1. Các thanh ghi dữ liệu Mặc dù bộ vi xử lý có thể thao tác với dữ liệu bộ nhớ nhưng một lệnh như vậy sẽ được thực hiện nhanh hơn (cần ít chu kỳ đồng hồ hơn), nếu dữ liệu được lưu trong các thanh ghi. Đó cũng là nguyên nhân tại sao ngày nay các bộ vi xử lý được sản xuất với xu hướng có nhiều thanh ghi hơn. Với các thanh ghi dữ liệu các byte thấp và byte cao có thể được truy nhập một cách riêng biệt, sử dụng từng 8 bit một cách rieng rẽ. Byte cao của thanh ghi AX được gọi là AH và các byte thấp được gọi là AL. Tương tự cho các thanh ghi BX, CX, DX có BH, BL, CH, CL, DH, DL. Chức năng chuyên biệt của từng thanh ghi dữ liệu: 1. Thanh ghi AX (thanh ghi chứa- Accumulator register) Khoa CNTT Trang 4 KTMT
  • 5. Gi¸o tr×nh vi xö lý AX là thanh ghi được sử dụng nhiều nhất trong các lệnh số học, logic, và chuyển dữ liệu bởi vì việc sử dụng chúng tạo ra mã máy ngắn nhất. Trong các phép toán nhân chia một trong các số hạng tham gia phải được chứa trong thanh ghi AX (nếu là 16 bit) và AL (nếu là 8 bit). Các thao tác vào ra cũng sử dụng thanh ghi AX hoặc AL. 2. Thanh ghi BX (thanh ghi cơ sở- Base register) Thanh ghi này ngoài việc thao tác dữ liệu nó thường chứa địa chỉ cơ sở của một bảng dùng cho lệnh XLAT.(dịch AL thành 1 giá trị trong bảng BX) 3. Thanh ghi CX (thanh ghi đếm- Count register) Việc xây dựng một chương trình lặp được thực hiện dễ dàng bằng cách sử dụng thanh ghi CX, trong đó CX đóng vai trò bộ đếm số vòng lặp (REP, LOOP). CL được dùng làm bộ đếm trong các lệnh dịch và quay bit. 4. Thanh ghi DX (thanh ghi dữ liệu - Data register) DX và AX cùng được sử dụng trong các thao tác của phép nhân hoặc chia các số 16 bit. DX còn được sử dụng để chứa địa chỉ của các cổng trong các lệnh vào ra dữ liệu trực tiếp (In/Out). 1.3.2. Các thanh ghi đoạn: CS, DS, ES, SS Khối BIU đưa ra trên Bus địa chỉ 20 bit địa chỉ, như vậy 8088 có khả năng phân biệt được 220= 1. 048. 576 = 1 Mbyte ô nhớ. Nói cách khác không gian địa chỉ của 8088 là 1 Mbyte. Trong không gian 1 Mbyte bộ nhớ này cần chia thành nhiều đoạn khác nhau: Đoạn chứa chương trình Đoạn chứa dữ liệu và kết quả trung gian của chương trình Tạo ra vùng nhớ đặc biệt gọi là ngăn xếp Trong thực tế bộ vi xử lý 8088 có các thanh ghi 16 bit liên quan đến địa chỉ đầu của các đoạn trên và chúng được gọi là các thanh ghi đoạn (Segment Registers): CS, DS, SS, ES. Các thanh ghi đoạn này chỉ ra địa chỉ đàu của 4 đoạn trong bộ nhớ dung lượng lớn nhất của 4 đoạn này là 64 Kbyte. Các đoạn có thể nằm cách nhau hoặc trùm lên nhau Nội dung của thanh ghi sẽ xác định địa chỉ của ô nhớ đầu tiên của đoạn, địa chỉ này gọi là địa chỉ cơ sở. Địa chỉ của các ô nhớ khác trong cùng đoạn được tính bằng cách cộng thêm vào địa chỉ cơ sở một giá trị gọi là địa chỉ lệch hay độ lệch (offset) Khoa CNTT Trang 5 KTMT
  • 6. Gi¸o tr×nh vi xö lý Địa chỉ vật lý (20 bit) của một ô nhớ được xác định như sau: Điạ chỉ vật lý = Điạ chỉ đoạn *10 h+ thanh ghi lệch (hay offset) và điạ chỉ logic trong máy tính luôn được biểu diễn dưới dạng: Segment:Offset Tại mọi thời điểm thì chỉ những ô nhớ được định địa chỉ bởi 4 đoạn trên mới được truy cập. 1.3.3. Các thanh ghi con trỏ và chỉ số: SI, DI, SP, BP Trong 8088 có 3 thanh ghi con trỏ và 2 thanh ghi chỉ số 16 bit. Các thanh ghi này (trừ IP), đều có thể được dùng như các thanh ghi đa năng, nhưng ứng dụng chính của mỗi thanh ghi là chúng được gầm định như là thanh ghi lệch cho các đoạn tương ứng. Cụ thể như sau: 1. Thanh ghi BP: (con trỏ cơ sở - Base Pointer) BP luôn trỏ vào một dữ liệu nằm trong đoạn ngăn xếp SS. Địa chỉ cụ thể SS:BP được xác định như trên. 2. Thanh ghi SP(con trỏ ngăn xếp - Stack Pointer) Được sử dụng kết hợp với SS để truy nhập vào đoạn ngăn xếp. SP luôn trỏ vào đỉnh hiện thời của ngăn xếp trong đoạn ngăn xếp SS. Địa chỉ cụ thể SS:SP 3. Thanh ghi SI(chỉ số nguồn - Source Index). SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:SI. Bằng cách tăng nội dung của SI chúng ta có thể truy nhập dễ dàng đến các ô nhớ liên tiếp. 4. Thanh ghi DI (chỉ số đích - Destination Index). SI chỉ vào dữ liệu trong đoạn dữ liệu DS mà địa chỉ cụ thể tương ứng với DS:DI. Có một số lệnh gọi là các thao tác chuỗi sử dụng DI để truy nhập đến các ô nhớ được định địa chỉ bởi ES. 1.3.4. Thanh ghi con trỏ lệnh: IP Các thanh ghi bộ nhớ chúng ta vừa trình bày dùng để truy cập dữ liệu, để truy nhập đến các lệnh, 8088 sử dụng các thanh ghi CS và IP. Thanh ghi CS chứa điạ chỉ của lệnh tiếp theo còn IP chứa địa chỉ offset của lệnh đó. Thanh ghi IP được cập nhập mỗi khi có một lệnh được thực hiện. 1.3.5. Thanh ghi cờ Khoa CNTT Trang 6 KTMT
  • 7. Gi¸o tr×nh vi xö lý Đây là thanh ghi 16 bit, mỗi bit được sử dụng để thể hiện một trạng thái của bộ vi xử lý tại một thời điểm nhất định trong quá trình thực hiện chương trình. Mới chỉ có 9 bit được sử dụng và người ta gọi mỗi bit là một cờ. x x x x OF DF IF TF SF ZF X AF x PF x CF * Các cờ trạng thái CF (Carry Flag): được thiết lập khi phép toán thực hiện có nhớ hoặc có vay mượn PF(Parity Flag): được thiết lập khi kết quả của phép toán có tổng số bit có giá trị 1 là một số chẵn (ở phần thấp của kết quả). AF (Auxiliary Flag): được thiết lập khi có nhớ từ "bit có trọng số lớn nhất ở phần thấp" sang "bit có trọng số thấp nhất ở phần cao". ZF (Zero Flag): Được thiết lập khi tất cả các bit của kết quả có giá trị 0. SF ( Sign Flag): được thiết lập khi bit MSB của kết quả có giá trị 1. OF (Overflow Flag): được thiết lập khi kết quả nằm ngoài giới hạn cho phép. *Các cờ điều khiển TF (Trace Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép thực hiện từng bước chương trình IF (Interrupt Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép các ngắt cứng có thể thực hiện. DF (Direction Flag): Nếu bit này có giá trị 1 thì bộ vi xử lý cho phép duyệt chuỗi từ phải sang trái hoặc từ địa chỉ cao đến địa chỉ thấp. 1.4. TẬP LỆNH CỦA BỘ VI XỬ LÝ 1.4.1. Sơ lược về tập lệnh của bộ vi xử lý Tập lệnh của bộ vi xử lý là thành phần cơ bản nhất để máy tính có thể thực hiện các yêu cầu của người sử dụng. Tất cả các thao tác, các chương trình do người dùng lập ra đều được bộ vi xử lý thực hiện bằng việc ánh xạ chúng dưới dạng mã máy, mã lệnh riêng của bộ vi xử lý. Thông thường, với các lập trình viên, các lệnh của bộ vi xử lý được hiểu dưới góc độ là các lệnh gợi nhớ (Mnemonic). Với mã lệnh gợi nhớ thì một lệnh của bộ vi xử lý bao gồm các thành phần sau: [Mã lệnh] [Các toán hạng] Trong đó: Khoa CNTT Trang 7 KTMT
  • 8. Gi¸o tr×nh vi xö lý Mã lệnh - Cơ bản trường này chứa mã lệnh dưới dạng mã gợi nhớ. Các toán hạng - Là các thành phần mà các lệnh sử dụng để thực hiện lệnh. Nếu là các lệnh thật thì đây chính là các toán hạng của lệnh. Với bộ vi xử lý 8086/8088, các toán hạng này có thể là 0,1 hoặc 2. Ví dụ: ADD AL,[BX] ADD là lệnh thực hiện phép cộng; AL và [BX] là hai toán hạng với qui định nếu tên thanh ghi hoặc một giá trị hằng nằm trong dấu [] thì đó là địa chỉ OFFSET của ô nhớ chứa dữ liệu cần thao tác. 1.4.2. Tập lệnh của CPU Trong tập lệnh của vi xử lý 8086 có rất nhiều lệnh, mỗi lệnh thực hiện một nhiệm vụ cụ thể nào đó. Song, trong giới hạn nhất định, chúng ta có thể nghiên cứu một vài lệnh cơ bản. Để dễ hiểu, chúng ta có thể chia chúng các nhóm lệnh sau: 1. Nhóm lệnh di chuyển dữ liệu 2. Nhóm lệnh số học 3. Nhóm lệnh logic 4. Nhóm lệnh dịch chuyển và quay 5. Nhóm lệnh rẽ nhánh 6. Nhóm lệnh vào ra cổng 7. Nhóm lệnh điều khiển. 1.4.2.1 Nhóm lệnh di chuyển dữ liệu Trong nhóm này ta quan tâm một số lệnh cơ bản sau: MOV, MOVSB, MOVSW XCHG, PUSH, POP a) Lệnh MOV: Move a Word or Byte (chuyển 1 từ hay 1 byte) MOV đích, nguồn Di chuyển nội dung của toán hạng nguồn vào toán hạng đích. Hai toán hạng phải có cùng độ lớn và không được đồng thời là 2 thanh ghi đoạn hoặc hai ô nhớ. Toán hạng đích phải là thanh ghi hay ô nhớ. Giá trị của toán hạng nguồn không bị thay đổi, sau khi thực hiện lệnh. Ví dụ: Khoa CNTT Trang 8 KTMT
  • 9. Gi¸o tr×nh vi xö lý MOV ax,word1 Trước lệnh Mov Ax có nội dung : 0002h Word1 : 0008h Sau lệnh Mov Ax có nội dung : 0008h Word1 : 0008h Một số chú ý: - Toán hạng đích không thể là một hằng số - Không thể chuyển trực tiếp một giá trị byte vào một toán hạng đích là một từ và ngược lại. Nếu cần, có thể sử dụng các toán tử PTR BYTE hoặc PTR WORD - Không thể chuyển trực tiếp một hằng số vào một thanh ghi đoạn. Trong trường hợp cần thiết, có thể chuyển tạm thời qua một thanh ghi khác Ví dụ: Muốn chuyển giá trị 100 vào thanh ghi DS, ta có thể sử dụng hai lệnh sau MOV AX,100 MOV DS,AX MOVSB/MOVSW chuỗi đích, chuỗi nguồn là hai lệnh dùng để chuyển các phần tử của một chuỗi nguồn sang một chuỗi đích. MOVSB: MOVe String Byte MOVSW: MOVe String Word b) XCHG: eXCHanGe 2 operands ( tráo đổi nội dung của hai toán hạng) XCHG đích, nguồn Tráo đổi nội dung của toán hạng đích và toán hạng nguồn cho nhau. Ví dụ: XCHG AX,BX Trước lệnh XCHG AX có nội dung : 153Eh BX : 28FCh Sau lệnh Mov AX có nội dung : 28FCh BX : 153Eh Một số chú ý: - Cả hai toán hạng không thể là hằng số - Không thể tráo đổi hai toán hạng khác kiểu. Nếu cần, có thể sử dụng các toán tử PTR BYTE hoặc PTR WORD. - Không được phép là 2 thanh ghi đoạn - Không được phép là hai ô nhớ. Khoa CNTT Trang 9 KTMT
  • 10. Gi¸o tr×nh vi xö lý c) PUSH: PUSH Word On the Stack (Đẩy vào ngăn xếp) PUSH toánhạng Đẩy nội dung của toán hạng vào ngăn xếp, nội dung của toán hạng không bị thay đổi. (copy nội dung) Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088) Ví dụ: PUSH AX Đẩy nội dung của thanh ghi AX vào ngăn xếp d) POP: POP Word from Top of Stack (lấy ra từ đỉnh ngăn xếp). POP đích Toán hạng nhất thiết phải là thanh ghi (đối với 8086/8088), trừ thanh ghi CS 1.4.2.2. Nhóm lệnh số học Trong nhóm này ta quam tâm đến các lệnh cơ bản sau: ADD, ADC, INC, SUB, SBB, DEC MUL(IMUL), DIV(IDIV) a) ADD:Addition (cộng hai toán hạng) ADD đích, nguồn Cộng toán hạng đích với toán hạng nguồn. Kết quả được chứa trong toán hạng đích đích=đích+nguồn Điều kiện: hai toán hạng phải cùng độ dài, không được là hai thanh ghi đoạn ADD ax,word1 Ax= ax+word1 b) SUB: Subtraction (trừ) Sub đích,nguồn Trừ nội dung của toán hạng đích cho toán hạng nguồn, kết quả chứa trong toán hạng đích. Ví dụ: MOV BX, F0h SUB BX,50h BX=F0h-50h=A0h c) MUL: Multiplexing - Multiply Unsigned Byte or Word (nhân số không dấu) Nhân toán hạng với nội dung chứa trong thanh ghi AX. Tức là nhân hai toán hạng với nhau nhưng 1 toán hạng phải được chứa trong AX. Hoặc là trong DX và AX Khoa CNTT Trang 10 KTMT
  • 11. Gi¸o tr×nh vi xö lý MUL gốc Tuỳ vào độ dài của toán hạng gốc mà xác định kết quả: - gốc: 8 bit thì số bị nhân trong AL -> kết quả trong AX - gốc: 16 bit thì số bị nhân trong AX -> kết quả trong DX:AX Ví dụ: MOV AL,10h MOV BL,5h MUL BL Vì toán hạng nguồn là thanh ghi BL, nên kết quả sẽ được lấy ra trong AX. AX=50h Trong trường hợp muốn nhân số có dấu, ta có thể sử dụng lệnh IMUL có dạng lệnh như lệnh MUL. d) DIV: Unsigned Divide (chia hai số không dấu) DIV nguồn - nguồn là số 8 bit: AX/nguồn số bị chia phải là số không dấu 16 bit trong AX sau khi chia AL chứa thương còn AH chứa số dư. - nguồn là số 16 bit: DX:AX/nguồn số bị chia phải là số không dấu và đặt trong cặp DX:AX sau khi chia; AX chứa thương còn DX chứa số dư. nguồn =0 (chia cho 0) hoặc kết quả lớn hơn FFH, FFFFh thì gọi ngắt INT 0 Trong trường hợp muốn chia số có dấu, ta có thể sử dụng lệnh IDIV có dạng lệnh như lệnh DIV. 1.4.2.3. Nhóm lệnh logic Trong nhóm này ta quan tâm đến các lệnh sau: AND, OR, XOR, NOT a) AND: và hai toán hạng AND đích,nguồn Đích, nguồn phải có điều kiện: - cùng độ dài - không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn. thường dùng để che đi hay giữ lại một vài bit nào đó của toán hạng đích ví dụ: AND AX,0Fh b) OR : hoặc hai toán hạng OR đích,nguồn Đích, nguồn phải có điều kiện: Khoa CNTT Trang 11 KTMT
  • 12. Gi¸o tr×nh vi xö lý - cùng độ dài - không phải đồng là 2 ô nhớ, 2 thanh ghi đoạn. thường dùng để lập một vai bit nào đó của toán hạng đích= cách cộng logic toán hạng đó với toán hạng tức thời mà các bit 1 có vị trí tương ứng với bit cần lập. Ví dụ: OR AL,BL OR AL,0Fh c) NOT: lấy phủ định - đảo bit NOT toánhạng Dùng để đảo bit của một toán hạng (lấy bù 1) d) XOR: hoặc loại trừ toán hạng Dùng để xoá về 0 một thanh ghi nào đó Ví dụ: XOR AX,AX ; Xoá thanh ghi AX về 0 1.4.2.4 Nhóm lệnh dịch chuyển và quay Các lệnh cần quan tâm: SHL, SHR, ROL, ROR a) SHL: Shift Left - dịch trái SHL đích,1 SHL đích,CL Dịch các bit của toán hạng đích sang trái một vị trí hoặc CL vị trí. Một giá trị 0 được đưa vào bên phải của toán hạng đích, còn bit MSB được đưa vào CF. 0 CF LỆNH SHL Thực hiện phép nhân bằng cách dịch trái. b) SHR: Shift Right ; Dịch phải SHR đích,CL Dịch các bit của toán hạng đích sang phải 1 hoặc CL vị trí. Giá trị 0 được đưa vào bit MSB còn gía trị của bit LSB được chuyển vào cờ CF. 0 Dùng lệnh dịch phải thực hiện phép chia. 15 0 CF LỆNH SHR Khoa CNTT Trang 12 KTMT
  • 13. Gi¸o tr×nh vi xö lý c) ROL:Rotation Left- quay trái ROL đích,CL Dịch các bit sang bên trái. bit MSB được đưa vào LSB và cờ CF. muốn quay nhiều lần thì chứa trong CL MSB MSB CF LỆNH ROL d) ROR:Rotation Right- quay phải ROR đích,CL Dịch các bit sang bên phải. Bit LSB được đưa vào MSB và cờ CF. muốn quay nhiều lần thì chứa trong CL LSB LSB 15 0 CF LỆNH ROR * Các lệnh quay qua cờ nhớ: RCL, RCR. * Các ví dụ đưa ra và yêu cầu tìm giá trị của đích và CF sau CL lần dịch, quay. 1.4.2.5. Nhóm lệnh điều khiển rẽ nhánh a) Nhảy có đìêu kiện Jxxx nhãn_đích Nếu điều kiện nhảy được thoả thì sẽ nhảy đến nhãn_đích và thi lệnh này. nhãn có thể trước hoặc sau. Trước không quá 126 byte, sau không quá 127 byte. Bảng các lệnh nhảy Nhảy có dấu Kí hiệu Chức năng Điều kiện nhảy Jg/jnle Nhảy nếu lớn hơn Zf=0, sf=of Khoa CNTT Trang 13 KTMT
  • 14. Gi¸o tr×nh vi xö lý Nhảy nếu không nhỏ hơn hay bằng Jge/jnl Nhảy nếu lớn hơn hay bằng Sf=0f Nhảy nếu không nhỏ hơn Jl/jnge Nhảy nếu nhỏ hơn Sf<>of Nhảy nếu không lớn hơn hay bằng Jle/jng Nhảy nêu nhỏ hơn hay bằng Zf=1 hay sf=of Nhảy nếu không lớn hơn Nhảy không dấu Ja/jnbe Nhảy nếu lớn hơn Cf=0 và zf=0 Nhảy nếu không nhỏ hơn hay bằng Jae/jnb Nhảy nếu lớn hơn hay bằng Cf=0 Nhảy nếu không nhỏ hơn Jb/jnae Nhảy nếu nhỏ hơn Cf=1 Nhảy nếu không lớn hơn hay bằng Nhảy điều kiện đơn Je/jz Nhảy nếu bằng Zf=1 Nhảy nếu bằng 0 Jne/jnz Nhảy nếu không bằng Zf=0 Nhảy nếu không bằng 0 b) Nhảy không điều kiện JMP nhãn_đích Nhãn đích nằm trong cùng đoạn với JMP, vượt xa 126 byte đối với các lệnh nhảy có điều kiện. 1.4.2.6. Nhóm lệnh vào ra cổng a) IN: nhập vào từ cổng 1 byte hay 1 word IN thanhchứa, cổng Nếu thanh chứa là AL thì dữ liệu 8 bit được đưa vào có giá trị là điạ chỉ cổng Nếu thanh chứa là AX thì dữ liệu 16 được đưa vào từ cổng có giá trị là điạ chỉ cổng +1 Điạ chỉ cổng trong khoảng 00h - FFh b) OUT:xuất ra cổng 1 byte hay 1 word OUT điạchỉcổng,Acc Khoa CNTT Trang 14 KTMT
  • 15. Gi¸o tr×nh vi xö lý 1.4.2.7. Nhóm lệnh điều khiển a) CALL chương_trình_con Gọi một chương trình con có tên gọi: chương_trình_con b) INT số_hiệu_ngắt Lệnh gọi ngắt với số_hiệu_ngắt c) HLT Lệnh treo máy dừng chương trình d) NOP: No Operation không thực hiện lệnh nào cả. 1.5. CHẾ ĐỘ ĐỊA CHỈ CỦA BỘ VI XỬ LÝ 8086 1.5.1. Tổng quan Các chế độ địa chỉ chính là phương pháp để xác định toán hạng hoặc kiểu toán hạng trong các câu lệnh. Bộ vi xử lý 8086/8088 có tổng số trên 20 chế độ địa chỉ cho các thành phần khác nhau như mã lệnh, dữ liệu, ngăn xếp. Nhưng trên thực tế, việc lập trình, phân tích lệnh, người ta chỉ qua tâm đến việc dữ liệu của lệnh được xử lý ra sao. Vì vậy, chúng ta cũng chỉ nghiên cứu về các chế độ địa chỉ dữ liệu của lệnh. Trong bộ vi xử lý 8086 qui định có 7 chế độ địa chỉ cho toán hạng của lệnh. Cụ thể bao gồm các chế độ sau: - Chế độ địa chỉ thanh ghi - Chế độ địa chỉ tức thì - Chế độ địa chỉ trực tiếp - Chế độ địa chỉ gián tiếp thanh ghi - Chế độ địa chỉ tương đối cơ sở - Chế độ địa chỉ tương đối chỉ số - Chế độ địa chỉ tương đối chỉ số cơ sở 1.5.2. Các chế độ địa chỉ dữ liệu 1.5.2.1 Chế độ địa chỉ thanh ghi Trong chế độ này việc trao đổi thông tin diễn ra trực tiếp giữa các thanh ghi. Toán tử chỉ hoàn toàn là các thanh ghi. Loại địa chỉ thanh ghi không cần truy nhập bộ nhớ nên rất nhanh. Tập Mã lệnh Tên các Toán hạng các thanh ghi than h Khoa CNTT Trang 15 KTMT
  • 16. Gi¸o tr×nh vi xö lý Ví dụ: MOV AX, BX ;Sao chép nội dung thanh ghi BX sang thanh ghi AX. MOV AL,CL ; Sao chép nội dung thang ghi CL sang thanh ghi AL. ADD AL, CL ; Cộng nội dung thanh ghi Clvới thanh ghi AL. 1.5.2.2 Chế độ địa chỉ tức thì Trong chế độ này toán hạng đích là một thanh ghi hoặc ô nhớ, còn toán hạng nguồn là một hằng số. Ta có thể dùng chế độ này để nạp dữ liệu vào bất kỳ thanh ghi nào, trừ thanh ghi đoạn và thanh ghi cờ. Mã lệnh Tên các Hằng thanh ghi số Ví dụ: MOV CL, 5Fh; chuyển 5Fh vào thanh ghi CL. MOV AX, 0FF0h; Chuyển 0FF0h vào trong thanh ghi AX MOV DS, AX; Chuyển nội dung thanh ghi AX vào DS. MOV [BX], 10; Chuyển 10 vào ô nhớ tại địa chỉ DS:BXX 1.5.2.3 Chế độ địa chỉ trực tiếp. Trong chế độ này, một toán hạng chứa địa chỉ lệch của ô nhớ dùng chứa dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi. Khoa CNTT Trang 16 KTMT
  • 17. Gi¸o tr×nh vi xö lý Mã lệnh Toán hạng Toán hạng Bộ nhớ Ví dụ: MOV Al, [1053] ; Chuyển nội dung ô nhớ địa chỉ DS:1053h vào AL MOV [5307h], CX ; Chuyển nội dung CX vào 2 ô nhớ liên tiếp có địa ; chỉ DS:5307h và DS:5308h ADD [5307h], AL ; Cộng nội dung AL vào ô nhớ có địa chỉ DS:5307h 1.5.2.4 Chế độ địa chỉ gián tiếp thanh ghi Trong chế độ này, một toán hạng là một thanh ghi được sử dụng để chứa địa chỉ lệch (Offset) của ô nhớ chứa dữ liệu, còn toán hạng kia chỉ có thể là thanh ghi mà không được là ô nhớ. Tập Mã lệnh [Thanh ghi] các Bộ thanh nhớ ghi Ví dụ: MOV AL, [BX] ; Chuyển nội dung ô nhớ có đ/c DS:BX vào AL MOV [SI], CL ; Chuyển nội dung CL vào ô nhớ có đ/c DS:SI MOV [DI], AX ; Chuyển nội dung AX vào 2 ô nhớ liên tiếp có ; địa chỉ DS:DI và DS:DI+1 1.5.2.5 Chế độ địa chỉ tương đối cơ sở (Base Relative Addressing) Trong chế độ này, các thanh ghi cơ sở BX và BP là các hằng số biểu diễn các giá trị dịch chuyển (Displacement Values), kết hợp với DS và SS để tính địa chỉ hiệu dụng của toán hạng các vùng nhớ. Sự có mặt của các giá trị dịch chuyển xác định tính tương đối (so với cơ sở) của địa chỉ. Mã lệnh Địa chỉ Giá trị cụ thể thanh ghi Tập các Bộ thanh nhớ ghi Khoa CNTT Trang 17 KTMT
  • 18. Gi¸o tr×nh vi xö lý Ví dụ 1: MOV CX, [BX]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ MOV CX, [BX+10] ; DS:(BX+10) và DS:(BX+11) vào CX MOV CX,10[BX] ; MOV CL, [BP]+5 ; Chuyển nội dung ô nhớ SS:(BP+5) vào AL Chú ý: Trong các ví dụ trên, các giá trị 10 và3 được gọi là các giá trị dịch chuyển - (BX+10) hoặc (BP+5) gọi là địac chỉ hiệu dụng (Effective Address – EA) - DS:(BX+10) hoặc SS:(BP+5) chính là địa chỉ logic tương ứng với 1 PA 1.5.2.6 Chế độ địa chỉ tương đối chỉ số (Indexed Relative Addressing) Trong chế độ này, các thanh ghi chỉ số DI và SI và các hằng số biểu diễn giá trị dịch chuyển, được dùng để tính địa chỉ của toán hạng trong vùng nhớ DS. Mã lệnh Địa chỉ Giá trị cụ thể thanh ghi Tập các thanh ghi Bộ nhớ DI, SI Ví dụ: MOV AX,[SI]+10 ; Chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ ; DS:(SI+10) và DS:(SI+11) vào AX MOV AX,[SI+10] ; Tương tự như trên. MOV AL, [DI+5]; chuyển nội dung ô nhớ DS:(DI+5) vào CL. 1.5.2.7 Chế độ địa chỉ tương đối chỉ số cơ sở (Based Indexed Relative) Là sự kết hợp của 2 chế độ địa chỉ, đó là chế độ địa chỉ tương đối chỉ số và chế độ địa chỉ tương đối cơ sở. Trong chế độ này dùng cả 2 thanh ghi cơ sở và 2 thanh ghi chỉ số để tính địa chỉ của toán hạng. Chế độ này rất phù hợp với việc địa chỉ hoá các mảng 2 chiều. Khoa CNTT Trang 18 KTMT
  • 19. Gi¸o tr×nh vi xö lý Mã lệnh Thanh Thanh Giá trị cụ thể ghi ghi Tập Tập các các Bộ thanh thanh nhớ ghi ghi Ví dụ: MOV AX, [BX]+[SI]+8 ;chuyển nội dung 2 ô nhớ liên tiếp có địa chỉ MOV AX, [BX+SI] + 8 ; DS:(BX+SI+8) và DS:(BX+SI+9) vào AX MOV AX, [BX + SI + 8] ; MOV CL, [BP][DI]+5 ; chuyển nội dung ô nhớ có địa chỉ ; DS:(BP+DI+5) vào CL • Chú ý: Trong các chế độ địa chỉ trên, các thanh ghi đoạn và các thanh ghi lệch được ngầm định đi kèm với nhau. Muốn loại bỏ sự ngầm định đó thì ta có thể viết tường minh địa chỉ của đoạn. Ví dụ: MOV AL, [BX] ; ngầm định là DS:BX Muốn bỏ ngầm định là DS ta phải viết MOV AL, SS:[BX]; chuyển thành SS:BX 1.5.2.8 Bảng tóm tắt các chế độ địa chỉ STT Chế độ địa chỉ Toán hạng Đoạn ngầm định 1 Thanh ghi Reg 2 Tức thì Data 3 Trực tiếp [Offset] DS [BX] DS 4 Gián tiếp thanh ghi [SI] DS [DI] DS [BX] + Disp DS 5 Tương đối cơ sở [BP] + Disp SS [DI] + Disp DS 6 Tương đối chỉ số [SI] + Disp SS 7 Tương đối chỉ số cơ sở [BX] + [DI] + Disp DS [BX] + [SI] + Disp DS [BP] + [DI] + Disp SS Khoa CNTT Trang 19 KTMT
  • 20. Gi¸o tr×nh vi xö lý [BP] + [SI] + Disp SS • Các cặp thanh ghi đoạn và thanh ghi lệch ngầm định Thanh ghi đoạn CS DS ES SS Thanh ghi lệch IP SI, DI, BX DI SP, BP 1.6. PHÂN TÍCH MÃ LỆNH MÃ MÁY 1.6.1. Khuôn dạng lệnh Mã lệnh dành cho vi xử lý được viết dưới dạng nhị phân. Nhưng để người lập trình có thể hiểu và lập trình được thì các lệnh của vi xử lý được biểu diễn dưới dạng mã lệnh gợi nhớ (Mnemonic). Song, về cơ bản chúng ta cũng cầm phải biết về mã lệnh mã máy của bộ vi xử lý để có thể hiểu rằng một lệnh được bộ vi xử lý thực hiện ra sao và cấu trúc của các lệnh đó như thế nào. Vấn đề ta cần phải hiểu là một lệnh của bộ vi xử lý 8086 có độ dài lệnh tối đa là 6 byte. Cấu trúc chung của một mã lệnh đó bao gồm: Disp Disp Disp Disp Opcode D W mode reg M/R Byte 1 Byte 2 Byte 3,4 Byte 5,6 Trong đó: - Opcode (Operation Code) - Phân biệt lệnh đó là lệnh gì. Ví dụ, lệnh MOV=100010 - D (Direction) chỉ hướng hành động của lệnh. D=0 từ thanh ghi, D=1 tới thanh ghi. - W (Word) chỉ độ dài của toán hạng. W=1 toán hạng 2 byte, W=0 toán hạng 1 byte - mode chỉ chế độ địa chỉ của toán hạng. Ví dụ, chế độ thanh ghi mode=11. - reg (Register) chỉ mã của thanh ghi trong lệnh (nếu lệnh có toán hạng là thanh ghi). - M/R (Memory/Register) Chỉ mã của thanh ghi hoặc ô nhớ theo chế độ địa chỉ - Disp (Displacement) đoạn dịch chuyển hoặc là toán hạng tức thì Bảng xác định chế độ địa chỉ toán hạng bằng các trường MOD và R/M MOD = 11 Tính địa chỉ R/M W=0 W=1 R/M MOD=00 MOD=01 MOD=10 000 AL AX 000 (BX)+(SI) (BX)+(SI)+d8 (BX)+(SI)+d16 001 CL CX 001 (BX)+(DI) (BX)+(DI)+d8 (BX)+(DI)+d16 Khoa CNTT Trang 20 KTMT
  • 21. Gi¸o tr×nh vi xö lý 010 DL DX 010 (BP)+(SI) (BP)+(SI)+d8 (BP)+(SI)+d16 011 BL BX 011 (BP)+(DI) (BP)+(DI)+d8 (BP)+(DI)+d16 100 AH SP 100 (SI) (SI)+d8 (SI)+d16 101 CH BP 101 (DI) (DI)+d8 (DI)+d16 110 DH SI 110 Địa chỉ trực tiếp (BP)+d8 (BP)+d16 111 BH DI 111 (BX) (BX)+d8 (BX)+d16 Bảng Mã hoá các thanh ghi REG W=0 W=1 000 AL AX 001 CL CX 010 DL DX 011 BL BX 100 AH SP 101 CH BP 110 DH SI 111 BH DI Bảng mã hoá các thanh ghi đoạn REG W=0 00 ES 01 CS 10 SS 11 DS 1.6.2. Một số mã lệnh mã máy a/ Lệnh MOV Từ thanh ghi đến ô nhớ: 1010001w addr_low addr_high Từ ô nhớ đến thanh ghi: 1010000w addr_low addr_high Từ ô nhớ hay thanh ghi đến thanh ghi đoạn: 10001110 mod 0 seg r/m Từ thanh ghi đoạn đến ô nhớ hay thanh ghi: 10001110 mod 0 seg r/m Từ ô nhớ hay thanh ghi đến thanh ghi/ từ thanh ghi vào ô nhớ: 100010d1 mod seg r/m (addr_low addr_high) Từ dữ liệu trực tiếp vào thanh ghi: 1011w reg data (data_High) Từ dữ liệu trực tiếp vào thanh ghi hay ô nhớ: 1100011w mod 000 r/m data (data_High) b/ Lệnh PUSH Toán hạng nguồn là thanh ghi công dụng chung: 01010 reg Khoa CNTT Trang 21 KTMT
  • 22. Gi¸o tr×nh vi xö lý Thanh ghi đoạn: 000 seg 110 Ô nhớ hoặc thanh ghi: 11111111 mod 110 r/m c/ Lệnh POP Toán hạng đích là thanh ghi công dụng chung: 01011 reg Thanh ghi đoạn: 000 seg 111 Ô nhớ hoặc thanh ghi: 10001111 mod 000 r/m d/ Lệnh ADD Cộng ô nhớ hay thanh ghi đến thanh ghi: 000000dw mod reg r/m Cộng trực tiếp số hạng vào thanh ghi: 0000010w data Cộng trực tiếp ô nhớ hay thanh ghi cho toán hạng trực tiếp: 100000sw mod 000 r/m data (Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi 16bit) e/ Lệnh SUB Trừ ô nhớ hay thanh ghi vào thanh ghi: 100010dw mode reg r/m Trừ thanh ghi cho toán hạng trực tiếp: 0010110w data Trừ ô nhớ hay thanh ghi cho toán hạng trực tiếp: 100000sw mod 101 r/m data (Trong đó s được thiết lập nếu 1 byte số liệu được cộng vào ô nhớ hay thanh ghi 16bit) f/ Lệnh AND Và ô nhớ hay thanh ghi với thanh ghi: 001000dw mod reg r/m Và trực tiếp với thanh ghi: 0010010w data Và trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 100 r/m data g/ Lệnh OR Hoặc ô nhớ hay thanh ghi với thanh ghi: 000010dw mod reg r/m Hoặc dữ liệu trực tiếp với thanh ghi: 0000110w data Hoặc trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 001 r/m data h/ Lệnh XOR XOR ô nhớ hay thanh ghi với thanh ghi: 001100dw mod reg r/m XOR toán hạng trực tiếp với thanh ghi: 0011010w data Khoa CNTT Trang 22 KTMT
  • 23. Gi¸o tr×nh vi xö lý XOR toán hạng trực tiếp với ô nhớ hay thanh ghi: 1000000w mod 110 r/m data 1.6.3. Một số ví dụ minh hoạ: Phân tích mã lệnh mã máy của các lệnh sau: - MOV SP,BX ; sao chép nội dung trong thanh ghi BX sang thanh ghi SP opcode=100010 D=1 gửi tới thanh ghi w=1 chuyển một từ MOD=11 thanh ghi tới thanh ghi REG=100 thanh ghi SP R/M=011 thanh ghi BX ==> Mã lệnh mã máy của lệnh này là: 1000101111100011b = 8BE3h - MOV CL,[BX] ; sao chép nội dung từ ô nhớ DS:BX sang thanh ghi CL Opcode=100010 D=1 tới thanh ghi W=0 toán hạng 8 bit MOD=00 ô nhớ không dịch chuyển REG=001 thanh ghi CL R/M = 111 toán hạng là ô nhớ DS:BX ==> Mã lệnh mã máy của lệnh này là: 1000101000001111b = 8A0Fh - MOV 43h[SI], DH; chuyển nội dung thanh ghi DH sang ô nhớ DS:(SI+43h) Opcode=100010 D=0 từ thanh ghi W=0 chuyển Byte MOD=01 ô nhớ, dịch chuyển 1 byte REG=110 thanh ghi DH R/M=100 ô nhớ DS:SI disp=01000011 độ dịch chuyển là 43h ==> Mã lệnh mã máy của lệnh này là: 100010000111010001000011b = 887443h 1.7. LẬP TRÌNH VÀ GỠ RỐI BẰNG DEBUG Khoa CNTT Trang 23 KTMT
  • 24. Gi¸o tr×nh vi xö lý Máy tính trước đây là các máy có kích thước tương đối lớn, được chế tạo từ các đèn điện tử chân không, vì vậy, các con rệp (BUGS) có thể chui vào đó và làm hỏng máy móc, dẫn đến việc máy móc có thể xử lý sai. Trước tình thế đó, người ta đưa ra một yêu cầu bắt các con rệp phá hoại này và được gọi là DEBUG (Bắt rệp). Từ đó đến nay, công việc xử lý làm cho chương trình máy tính được thực hiện chính xác, tránh gây ra lỗi được gọi là DEBUG. Các chương trình thực hiện nhiệm vụ này được gọi là các trình gỡ rối. Hiện nay, có rất nhiều trình gỡ rối được sử dụng để sửa lỗi cho các trình ứng dụng như: DEBUG.EXE (trong DOS), Debugging (trong WINDOWS). Để thực hiện được trình DEBUG trong môi trường DOS, ta có thể thực hiện theo cú pháp sau: DEBUG {ENTER} DEBUG <tên tệp cần gỡ rối> {ENTER} 1.7.1. Giới thiệu về lệnh của DEBUG Sau khi chạy trình DEBUG, dấu nhắc lệnh của DEBUG sẽ hiện lên với dấu (-). Tại đây ta có thể gõ vào các lệnh của DEBUG. Cụ thể: A - Assemble - Hợp ngữ: được sử dụng để sửa các lệnh của chương trình Cú pháp: A <địa chỉ offset của lệnh cần sửa> Ví dụ: A 0153 Có thể được sử dụng để lập một chương trình *.COM. Nếu lập trình thì địa chỉ offset sẽ phải bắt đầu từ 0100h. D - Dump - Hiển thị nội dung một vùng nhớ lên màn hình. Cú pháp: D [Address] In nội dung một vùng nhớ 128 byte bắt đầu từ địa chỉ Address hoặc D [range] - In nội dung vùng nhớ trong dải range ra màn hình Ví dụ: - D 100 In nội dung của 128 byte nhớ bắt đầu từ địa chỉ DS:100 D CS:200 220 In nội dung vùng nhớ từ CS:200 đến CS:220 D 0A00:0100 L10 In nội dung 16 byte nhớ từ địa chỉ 0A00:0100 G - Go - Thực hiện hay chạy cả chương trình nạp trong bộ nhớ Cú pháp: G [=address] [điểm dừng] thực hiện đoạn chương trình bắt đầu từ địa chỉ address đến địa chỉ điểm dừng Ví dụ: - G =100 Thực hiện chương trình từ địa chỉ 100 đến hết chương trình Khoa CNTT Trang 24 KTMT
  • 25. Gi¸o tr×nh vi xö lý G =100 200 Thực hiện chương trình từ địa chỉ CS:100 đến CS:200 H - Hexadecimal - Thực hiện các phép cộng, trừ các số thập lục phân Cú pháp: H <số thứ nhất> <số thứ hai> cộng, trừ số thứ nhất với số thứ hai Ví dụ: H 035F 01E5 Kết quả sẽ hiện lên trên màn hình là: 0544 017A I - Input - Nhập một Byte dữ liệu từ cổng và hiển thị trên màn hình Cú pháp: I <#cổng> Nhập một byte từ cổng có địa chỉ là #cổng Ví dụ: I 2F8 đọc giá trị từ cổng 2F8 và hiển thị N - Name - Đặt tên cho tệp để chuẩn bị ghi dữ liệu lên. Cú pháp: N <Tên tệp> Đặt tên và phần mở rộng cho tệp Ví dụ: N vanban.txt N ctrinh.com O - Output - Xuất dữ liệu 8 bit ra một cổng Cú pháp: O <#cổng> Ví dụ: O 70 đưa dữ liệu 8 bit ra cổng có địa chỉ là 70h Q - Quit - Thoát khỏi DEBUG R - Register - Hiển thị và sửa nội dung một thanh ghi Cú pháp: R <tên thanh ghi> Ví dụ: Nạp giá trị 43h vào thanh ghi CX R CX :43 U - Unassemble - Dịch ngược lệnh của CPU Cú pháp: U [range] Trong đó range có thể là: - Địa chỉ bắt đầu của đoạn lệnh - Địa chỉ đầu và chiều dài đoạn lệnh Ví dụ: U 100 Xem nội dung các lệnh của đoạn chương trình từ địa chỉ CS:0100h U CS:100 110 Xem đoạn lệnh từ địa chỉ CS:100 đến CS:110 U 200 L20 Xem đoạn lệnh 32 byte bắt đầu từ địa chỉ CS:0200h W - Write - Ghi nội dung đoạn lệnh bắt đầu từ địa chỉ CS:0100h với độ dài phụ thuộc vào giá trị của thanh ghi CX vào một tệp đã được đặt tên bởi lệnh N ? - Help - Hiển thị đầy đủ các lệnh, cú pháp lệnh của DEBUG. Khoa CNTT Trang 25 KTMT
  • 26. Gi¸o tr×nh vi xö lý 1.7.2. Lập trình bằng DEBUG DEBUG là một trình gỡ rối có thể được sử dụng để lập trình các chương trình đơn giản có phần mở rộng là *.COM. Vì vậy, trong phần này chúng ta sẽ nghiên cứu về cách viết một chương trình bằng DEBUG thông qua các bước sau. Bước 1: Chạy trình DEBUG. Tại dấu nhắc lệnh của DOS ta gõ: DEBUG {ENTER} Bước 2: Tại dấu nhắc của DEBUG gõ lệnh -A 100 Địa chỉ bắt đầu của một chương trình được bắt đầu từ CS:100h Bước 3: Gõ vào các lệnh của chương trình với qui định + Các lệnh này phải là các lệnh của vi xử lý (lệnh thật) dưới dạng mã lệnh gợi nhớ + Các số liệu đưa vào là các số ở dạng thập lục phân và không được có chữ h ở cuối số đó. Riêng lệnh INT vẫn được chấp nhận tồn tại chữ h. Ví dụ: số 65d sẽ phải đưa vào là 41 + Các lệnh nhảy, lệnh lặp, lệnh gọi chương trình con thì các toán hạng lệnh phải là địa chỉ bộ nhớ tại vị trí của lệnh đầu tiên. Ví dụ: JMP 120 Nhảy tới địa chỉ CS:120h + Trong tất cả các lệnh chỉ tồn tại hai trường là: mã lệnh và toán hạng. Không được có lời chú thích. Ví dụ: MOV AH,1 ;gán cho AH giá trị 1 Đây được coi là một lệnh sai vì lời giải thích này không được DEBUG chấp nhận + Một chương chương phải được kết thúc bằng một lệnh INT 20 hoặc INT 20h + Sau lệnh INT 20, ta không đưa lệnh khác nữa thì tại địa chỉ của lệnh tiếp theo ta nhấn ENTER. Địa chỉ này cũng chính là địa chỉ cuối của chương trình. Bước 4: Xác định số byte của chương trình. độ dài chương trình = địa chỉ cuối - 100 Sau đó gõ lệnh: R CX và nạp vào độ dài của chương trình cho CX. Bước 5: Đặt tên cho File chứa chương trình bằng lệnh N Ví dụ: N vidu1.com Bước 6: gõ lệnh W để ghi nội dung chương trình vào tệp đã đặt tên ở bước 5 Sau khi tạo xong một chương trình, ta có thể thoát về DOS để chạy thử hoặc có thể sử dụng lệnh G để chạy trực tiếp từ DEBUG Khoa CNTT Trang 26 KTMT
  • 27. Gi¸o tr×nh vi xö lý Ví dụ: Viết một chương trình thực hiện nhập vào một chữ cái thường, sau đó đổi nó sang thành chữ cái hoa (Với giả thiết không kiểm tra dữ liệu nhập vào) Sau khi viết xong chương trình, ta có thể chạy nó để kiểm tra kết quả bằng cách. Như vậy, với chương trình đơn giản trên đây, ta thấy: Nếu lập trình bằng DEBUG thì kích thước của tệp rất nhỏ. Chương trình vừa viết có kích thước là 0Eh=14byte. 1.7.3. Gỡ rối chương trình bằng DEBUG Để gỡ rối cho một chương trình, ta có thể thực hiện qua các bước sau: Bước 1: Khởi động DEBUG và gọi tệp cần sửa bằng lệnh DEBUG <Tên tệp cần sửa> {ENTER} Bước 2: Xác định lệnh gây ra lỗi (lỗi do thuật toán) bằng lệnh U. Các lệnh chỉ hiển thị trong khoảng 32 byte. Nếu muốn xem tiếp lệnh ở vị trí sau 32 byte đó thì ta có thể gõ tiếp lệnh U. Và cứ như vậy cho đến khi kết thúc chương trình (gặp lệnh INT 20) Bước 3: Sử dụng lệnh A <địa chỉ offset của lệnh sai> để bắt đầu sửa Bước 4: Gõ lệnh cần thay thế. + Nếu lệnh thay thế có kích thước bằng lệnh đang sửa thì tại vị trí của lệnh sau lệnh vừa gõ ta nhấn ENTER. + Nếu lệnh thay thế có kích thước khác lệnh đang sửa thì ta phải gõ lại toàn bộ đoạn chương trình từ vị trí sửa đến hết chương trình. Vì, các lệnh gõ vào sau sẽ đè lên các lệnh trước đó. Nếu lệnh sau khi sửa lớn hơn lệnh trước khi sửa thì lệnh tiếp theo của nó sẽ bị mất đi một số bit. Khi đó, cấu trúc chương trình sẽ bị sai lệch hoàn toàn. Bước 5: Nếu kích thước chương trình khác với kích thước ban đầu thì ta cần phải sử dụng lệnh R để thay đổi thanh ghi CX sao cho CX chứa giá trị độ lớn của chương trình sau khi sửa. Sau đó, ta sử dụng lệnh W để ghi lại nội dung của chương trình mới vào tệp. Khoa CNTT Trang 27 KTMT
  • 28. Gi¸o tr×nh vi xö lý Cần phải gõ lệnh DEBUG với thamđoạn chương trình có Xem số lỗi không Lệnh gây lỗi Địa chỉ của lệnh sai Cần phải sửa lại Sau đó ghi lại Ví dụ: Chương trình trên bị lỗi tại vị trí lệnh SUB. Ta cần sửa lại như sau: Khoa CNTT Trang 28 KTMT
  • 29. Gi¸o tr×nh vi xö lý CHƯƠNG 2: CÁC BỘ VI XỬ LÝ TIÊN TIẾN CỦA INTEL 2.1. BỘ VI XỬ LÝ 80286 Về cơ bản, bộ vi xử lý 80286 có cấu trúc giống như 8086, nhưng có một số đặc điểm khác biệt như sau: 2.1.1. Các thanh ghi Bộ vi xử lý 80286 có thêm một số thanh ghi - Thanh ghi từ trạng thái (MSW - Machine Status Word) 15 4 3 2 1 0 TS EM MP PE TS - Task Switch: chuyển nhiệm vụ EM - Emulation: cho phép mô phỏng bộ đồng xử lý MP - Math Present: Cho biết có bộ đồng xử lý PE - Protection Enable: Cho phép chế độ bảo vệ - Thanh ghi nhiệm vụ (TR - Task Register) - Thanh ghi bảng mô tả cục bộ (LDTR - Local Descriptor Table Register) - Thanh ghi bảng mô tả toàn cục (GDTR - Global Descriptor Table Register) - Thanh ghi bảng mô tả ngắt (IDTR - Interrupt Descriptor Table Register) 15 Bộ chọn 0 23 Địa chỉ cơ sở 0 15 Độ dài 0 TR LDTR IDTR GDTR - Các thanh ghi đoạn: bao gồm 2 phần Phần hở: gồm 16 bit có thể nạp được bằng chương trình gọi là bộ chọn Phần kín: gồm 48bit do CPU tự nạp + 8bit quyền truy nhập (Access Right) + 24bit địa chỉ cơ sở (Base Address) + 16bit độ dài đoạn (Limit) Khoa CNTT Trang 29 KTMT
  • 30. Gi¸o tr×nh vi xö lý Phần hở Phần kín Quyền Bộ chọn Địa chỉ cơ sở Độ dài đoạn truy nhập CS DS SS ES FS GS 2.1.2. Tập lệnh 80286 có thêm một số lệnh đặc quyền - LGDT: Nạp thanh ghi GDTR, địa chỉ cơ sở 24bit, độ dài 16bit - LIDT: Nạp thanh ghi IDTR, địa chỉ cơ sở 24bit, độ dài 16bit - LLDT: Nạp phần chọn của thanh ghi LDTR, độ dài 16bit - LTR: Nạp phần chọn của thanh ghi TR, độ dài 16bit - LMSW: Nạp từ trạng thái máy - CLTS: xoá bit TS (task Switch) - HALT: Dừng hoạt động của CPU 2.2. BỘ VI XỬ LÝ 80386 2.2.1. Sơ đồ khối của 80386 Đơn vị quản lý Đơn vị quản lý Đơn vị thực theo đoạn nhớ theo bộ nhớ Các thanh Các thanh Bộ đệm ghi ghi đoạn chuyển hoá riêng Bộ Đơn vị BUS Bộ ALU Bộ ghép nối BUS Bộ giải mã Hàng lệnh nhận lệnh Hàng Bộ nhận Khoa CNTT Trang 30 Đơn vị nhận Đơn vị giải mã KTMT
  • 31. Gi¸o tr×nh vi xö lý 2.2.2. Các thanh ghi a/ Các thanh ghi đa năng, thanh ghi cờ và con trỏ lệnh Các thanh ghi của bộ vi xử lý 80386 có độ dài 32 bit, song vẫn giữ nguyên phần 16bit đầu được truy nhập tương tự như các thanh ghi tương tự trong 8086. 31 16 15 8 7 0 EAX AH AL EBX BH BL ECX CH CL EDX DH DL ESI SI EDI DI EBP BP ESP SP EIP IP EFlags Flags b/ Các thanh ghi đoạn Bao gồm 2 phần Phần hở: gồm 16 bit có thể nạp được bằng chương trình gọi là bộ chọn Phần kín: gồm 64 bit do CPU tự nạp + 12 bit quyền truy nhập (Access Right) + 32 bit địa chỉ cơ sở (Base Address) + 20 bit độ dài đoạn (Limit) Phần hở Phần kín Quyền Bộ chọn Địa chỉ cơ sở Độ dài đoạn truy nhập CS DS SS ES Khoa CNTT Trang 31 KTMT
  • 32. Gi¸o tr×nh vi xö lý FS GS 15 0 32bit 20bit 12bit c/ Các thanh ghi điều khiển Có 4 thanh ghi điều khiển 32 bit được đặt là: CR0, CR1, CR2, CR3 31 0 PG r TS EM MP PE Dự trữ Địa chỉ tuyến tính trang có lỗi Địa chỉ cơ sở của thư mục trang 12 bit dự trữ PG - Paging (Trang) r - reversed (dự trữ) TS - Task Switch: chuyển nhiệm vụ EM - Emulation: cho phép mô phỏng bộ đồng xử lý MP - Math Present: Cho biết có bộ đồng xử lý PE - Protection Enable: Cho phép chế độ bảo vệ d/ Các thanh ghi hệ thống - Thanh ghi nhiệm vụ (TR - Task Register) - Thanh ghi bảng mô tả cục bộ (LDTR - Local Descriptor Table Register) - Thanh ghi bảng mô tả toàn cục (GDTR - Global Descriptor Table Register) - Thanh ghi bảng mô tả ngắt (IDTR - Interrupt Descriptor Table Register) 15 Bộ chọn 0 31 Địa chỉ cơ sở 0 15 Độ dài 0 TR LDTR IDTR GDTR GDTR và IDTR chứa 32 bit địa chỉ cơ sở tuyến tính và 16 bit giới hạn độ dài của các đoạn GDT và IDT. LDTR và TR có hai phần: phần chọn đoạn hệ thống (thanh ghi chọn đoạn hệ thống) và phần chứa bộ mô tả quy chiếu đoạn này (thanh ghi mô tả đoạn hệ Khoa CNTT Trang 32 KTMT
  • 33. Gi¸o tr×nh vi xö lý thống). LDTR chứa bộ chọn 16 bit trỏ đến bộ mô tả của LDT và TSS sẽ được sao sang phần kín của các thanh ghi LDTR và TR. Mỗi một nhiệm vụ có một LDT và TSS riêng. e/ Các thanh ghi kiểm tra và gỡ rối 31 0 DR0 Địa chỉ tuyến tính của điểm dừng 0 DR1 Địa chỉ tuyến tính của điểm dừng 1 DR2 Địa chỉ tuyến tính của điểm dừng 2 Các thanh DR3 Địa chỉ tuyến tính của điểm dừng 3 ghi gỡ rối DR6 Từ trạng thái của các điểm dừng DR7 Từ điều khiển của các điểm dừng TR6 Từ điều khiển kiểm tra Các thanh TR7 Từ trạng thái kiểm tra ghi kiểm tra 2.2.3. Quản lý bộ nhớ 2.2.3.1 Không gian nhớ và nhiệm vụ nhớ Không gian nhớ và nhiệm vụ nhớ của 80386 cũng giống 80286, có điều khác là 80386 hoạt động với môt trường với 32 bit. Do vậy bộ nhớ trong hệ thống 80386 có thể được tổ chức theo byte (8 bit), theo từ (16 bit) hay từ kép (32 bit). Từ được xếp như 2 byte liên tiếp, byte thấp có địa chỉ thấp, byte có địa chỉ cao, địa chỉ của từ là địa chỉ của byte thấp. Từ kép cũng được lưu trữ 4 byte theo cách như vậy. Ngoài quản lí bộ nhớ theo đoạn (đoạn có thể có độ dài khác nhau và có thể trao đổi với bộ nhớ ngoài hay phân chia giữa các chương trình) 80386 còn có thể quản lí bộ nhớ theo trang (page) có độ dài 4 Kbyte mỗi trang. 2.2.3.2. Các đia chỉ lôgic, tuyến tính, vật lí và quản lí bộ nhớ theo trang. Trong 80386 có 3 loại địa chỉ cần được phân biệt: địa chỉ lôgic, tuyến tính, vật lí và quản lí bộ nhớ theo trang. 14 Mỗi nhiệm vụ có nhiều nhất 2 = 16k bộ chọn, offset có thể là 2 32 = 4 Gbyte, như vậy một nhiệm vụ có cực đại 2 64 = 64 tetrabyte. Nói cách khác, không gian địa chỉ lôgic là 2 64 = 64 tetrabyte, trong khi không gian địa chỉ vật lí chỉ rông 4 Khoa CNTT Trang 33 KTMT
  • 34. Gi¸o tr×nh vi xö lý Gbyet vì 80386 có 32 dây địa chỉ. Tổ hợp của các địa chỉ cơ sở đoạn và offset bên trong các đoạn đó tạo nên thang địa chỉ tuyến tính, có nghĩa rằng ta có thể tìm thấy các địa chỉ tuyến tính lớn hơn chỉ tới một đoạn lôgic nằm ở vùng địa chỉ thấp. Địa chỉ tuyến tính 32 bit bằng 32 bit địa chỉ cơ sở cộng với 32 bit offset. Việc sử dụng địa chỉ đoạn lôgic có vài đièu bất tiện (ví dụ như trong việc trao đổi, swapping, các đoạn nhớ với đĩa từ) nên 80386 được tran bị thêm cách quản lí bộ nhớ theo trang sẽ được trình bày trong các phần sau. 1. Định địa chỉ ở chế độ thực. Sau khi bật nguồn hay reset, 80386 ở chế độ thực. Cơ chế địa chỉ hoá và kích thước bộ nhớ 80286 ( Kích thước cực đại là Mbyte ), vì vậy chỉ có các dây địa chỉ A2-A19 và BE0 -BE3 là tích cực. ở chế độ này bộ nhớ theo trang không được phép, do vậy địa chỉ tuyến tính cũng giống địa chỉ vật lí. Cách tính địa chỉ vật lí giống như ở 80386. 2. Định địa chỉ ở chế độ bảo vệ. Lúc này địa chỉ lôgic được xác định bởi hai phần: - Bộ chọn là nội dung các thanh ghi chọn đoạn 16Bit trong đó chỉ số để xác định địa chỉ cỏ sở 32 Bit của bộ mô tả đoạn. - Offset đựoc tạo nên bởi 3 thành phần: Địa chỉ có cơ sở đoạn nhớ(base), chỉ số(index) và đọ dịch chuyển (displacement). Việc chuyển từ chế độ thực sang chế độ bảo vệ được thực hiện bằng cách đặt bit PE trong thanh ghi CR0 bằng 1 và được nghi lại từ chế độ bảo vệ chế độ thực bằng cách xoá bit PE bằng 0. Cách tính địa chỉ hiệu Chỉ dụng offset Địa chỉ cơ sở Độ dịch Địa chỉ Bộ nhớ offse tuyến Địa chỉ vật lý t Đơn vị quản tính Đơn vị quản vật lý Bộ chọn 32bit lý theo đoạn lý theo Chỉ số trang Thanh ghi tới bộ chọn đoạn mô tả Khoa CNTT Trang 34 KTMT
  • 35. Gi¸o tr×nh vi xö lý Đơn vị quản lí đoạn sẽ chuyển địa chỉ lôgic thành địa chỉ tuyến tính 32 bit. Nếu đơn vị quản lí trang không được phép làm việc thì 32bit địa chỉ tuyến tính sẽ tương ứng với các địa chỉ vật lí. 3. Khởi động và chuyển sang chế độ bảo vệ Ngay sau khi khởi động, 80386 làm việc ở chế độ thực. Để chuyển sang chế độ bảo vệ phải đặt bit PE của thanh ghi điều khiển CR0 bằng lệnh move CR0, R/M. Sau khi chuyển sang chế độ bảo vệ, lệnh nhảy giữa các đoạn sẽ được thực hiện để xếp lại hàng nhận lệnh trước PQ. Tiếp theo các đoạn số liệu được nạp vào bằng các bộ chọn với giá trị khởi đầu. Một cách khác để chuyển vào chế độ bảo vệ trong các hệ điều hành đa nhiệm là sử dụng phép chuyển nhiệm vụ đã nạp các thanh ghi. Lúc này trong GDTM ngoài các bộ mô tả đoạn số liệu và đoạn lệnh còn có hai bộ mô tả TSS. Lệnh JMP đầu tiên trong chế độ bảo vệ sẽ gây ra phép chuyển nhiệm vụ và nạp tất cả các thanh ghi các giá trị chứa trong TSS. Thanh ghi TR được khởi động để trỏ tới một bộ mô tả TSS, vì khi chuyển nhiệm vụ, thạng thái của nhiệm vụ đang thực hiện sẽ được cất vào TSS. 2.3. BỘ VI XỬ LÝ 80486 2.3.1. Các phần tử xử lí CISC và RISC Họ 80x86 của Intel thường hoạt động theo nguyên tắc dùng vi xử lí có tập lệnh phức tạp CISC (Complex Instruction Set Computer). Đặc điểm là nó có số lượng lệnh lớn (thường hơn 300 lệnh), có khả năng định địa chỉ phức tạp, các lệnh được vi lệnh hoá có nghĩa là CPU hoạt động bằng vi chương trình. Nghiên cứu điều tra thống kê đã chỉ ra những kết luận sau: - Trong nhiều chương trình điển hình được xử lí bằng bộ vi xử lí CISC như nói trên thì đến 80% thời gian chạy chương trình được thực hiện bởi 20% số lệnh trong tập lệnh. - Có những trường hợp, để đạt được cùng một kết quả thì việc chạy một chuỗi lệnh đơn giản sẽ nhanh hơ là chạy một lệnh phức tạp. Khoa CNTT Trang 35 KTMT
  • 36. Gi¸o tr×nh vi xö lý Những kết luận này là tiền đề để một loại vi xử lí khác ra đời; nó hoạt động theo phương pháp sử dụng tập lệnh ngắn gọn RISC (Reduced Instruction Set computer), thí dụ như i860 của Intel. Tập lệnh ở đây được hạn chế vào các lệnh chính yếu cần thiết trong số 20% lệnh nói trên và phần cứng được thiết kế sao cho phần tử RISC này hiểu ngay được lệnh máy do trương trình cung cấp. Do đó các lệnh loại này không cần chuyển cho bộ giải mã vi lệnh nữa mà được thực hiện ngay. Như bên phải hình 59, các lệnh máy trong hàng nhận lệnh trước PQ được trực tiếp chạy ngay mà không cần phải được giải mã thành một chuỗi các vi lệnh. Rõ ràng thời gian để thực hiện một lệnh ở đây được rút ngắn đi nhiều so với trường hợp ở bộ vi xử lí CISC. 2.3.2. vi xử lí 80486 2.3.2.1. Đặc điểm chung Chip i486 có mật độ tích hợp rất cao gồm bên trong một vi xử lí i386 đã cải tiến, một bộ đồng xử lí toán 80387, một bộ điều khiển cache và một bộ nhớ cache 8 kbyte (Cache là một loại bộ nhớ RAM tĩnh có dung lượng nhỏ nhưng tốc độ truy cập nhanh hơn so với bộ nhớ chính là các RAM động, sẽ được đề cập tới trong các phàn sau). Giống như i386, bus số liệu và bus địa chỉ ở đây cũng rộng 32 bit, tốc đọ truyền tải dữ liệu có thể lên tới 160 Mbyte/s. Đây là thiết kế dựa trên kết quả của việc tích hợp hai loại phần tử xử lí CISC và RISC trong cùng một chip CPU. Trong i486, các lệnh mac máy thường xuyên được sử dụng sẽ được cài đặt sẵn và có thể được thực hiện ngay, trong khi các lệnh phức tạp nhất và ít được sử dụng sẽ thông qua bộ giải mã vi lệnh. Theo phương thức này, hầu như tất cả các lệnh có thể được thực hiện gọn trong một chu kì xung nhịp đồng hồ. Vi xử lí i486 hoàn toàn tương tích với i386 về tập lệnh và các loại số liệu. Nó cũng có thể chạy trong các chế đọ thực, bảo vệ cũng như phân loại và phân trang. Vì đơn vị đồng sử lí toán (đơn vị dấu phảy động) được tích hợp ngay trong cùng một chip với CPU nên tốc độ trao đổi dữ liệu cũng nhanh hơn so với hệ i386 và i387 tách rời. 2.3.2.2. cấu trúc bên trong i486 Khoa CNTT Trang 36 KTMT
  • 37. Gi¸o tr×nh vi xö lý Bởi vì có đến 3 đơn vị xử lí cùng được tích hợp trong một chip (CPU, bộ đồng xử lí toán, bộ điều khiển cache và bộ nhớ cache) nên cấu trúc của i486 phức tạp hơn i386 nhiều. Sơ đồ khối bên trong của nó được chỉ ra trên hình 60. Các bus số liệu, địa chỉ và số liệu được nối với bên ngoài qua khối ghép nối bus, khối này được nối trực tiếp với bộ nhớ cache bên trong vi xử lí (được gọi là cache cấp một, để phân biệt với bộ nhớ cache cấp hai nằm trên bản mạch chính ở bên ngoài vi xử lí). Bộ nhớ cache nội 8 byte này được dùng làm bộ đệm cho số liệu và lệnh đến từ bộ nhớ chính trước khi chúng được chuyển tới các thanh ghi, ALU, bộ đồng xử lí toán hoặc hàng nhận lệnh trước PQ dài 32 byte. Khoa CNTT Trang 37 KTMT
  • 38. Gi¸o tr×nh vi xö lý BUS dữ liệu 32 bit BUS địa chỉ 32 bit Khối Khối ALU 8 phân phân và KB trang đoạn thanh D0-D31 Cac ghi A0-A31 Khố i Bus ghé BUS các điều p lệnh nội bộ khiển nối PQ Khối Khối Bộ BU đồng S 32by giải điều te mã khiển xử lý toán Khác với chu kì thâm nhập bộ nhớ cache cấp hai phải mất hai nhịp đồng hồ, việc thâm nhập cache cấp một này chỉ mất một chu kì nhịp đồng hồ. Do vậy, mặc dù dung lượng nhớ của cache nội chỉ có 8 kbyte nhưng nó vẫn cải thiện đáng kể chỉ tiêu của hệ thông. Trong trường hợp các số liệu hoặc lệnh từ bộ nhớ chính không được nạp qua cache thì chúng sẽ được đưa trực tiếp tới các thanh ghi hoặc hàng nhận lệnh trước PQ qua khối ghép nối bus. Điều này xảy ra khi i486 xử lí các số liệu rất phân tán hoặc trong trường hợp thực hiện các lệnh nhảy tới một địa chỉ xa. Sau bộ nhớ cache, các đường lệnh và số liệu được phân tách ra. Các byte số liệu được chuyển tới các thanh ghi hoặc bộ đồng xử lí toán. Các byte lệnh được đưa vào hàng nhận lệnh trước, hàng này dài 32 byte. Đơn vị giải mã sẽ giải mã các lệnh và truyền chúng tới khối điều khiển để điều khiển các thanh ghi, khối tính số học và lôgic ALU, khối phân đoạn và bộ đồng xử lí toán. Một số lệnh không cần giải mã mà có thể chạy ngay lập tức do i486 có tích hợp cả công nghệ RISC. Nếu các toán hạng tức thời hoặc độ dịch chuyển hiện diện trong dòng lệnh thì hàng nhận lệnh trước sẽ phân tách chúng và truyền chúng tới ALU hoặc khối phân đoạn. Các byte số liệu được cấp tới khối phân đoạn, các thanh ghi, ALU hoặc bộ đồng xử lí toán và được xử lí tại những nới đó. Hai bus dữ liệu 32 bit Khoa CNTT Trang 38 KTMT
  • 39. Gi¸o tr×nh vi xö lý hình thành nên một bus dữ liệu 64 bit dùng cho việc truyền tải dữ liệu giữa CPU tương ứng với i386 và bộ đồng xử lí toán tương ứng với i387. Khác với tổ hợp i386/ 1387 thông thường, quá trình trao đổi số liệu và mã lệnh ở đây không cần chu kì bus vào/ra vì cả hai khối đã được tích hợp cả trên những chip rồi. Hơn nữa, do bề rộng dữ liệu bên trong chip lại là 64 bit khi sử dụng bộ đồng xử lí toán nên các lệnh ESC ở đây sẽ chạy nhanh hơn nhiều so với máy tính dùng i386 và 387. Giống như các vi xử lí họ 80x86, ở đây cũng dùng các thanh ghi đoạn và thanh ghi offset. Trong khối phân đoạn, nội dung của hai thanh ghi này được kết hợp lại thành địa chỉ tuyến tính. Trong chế độ bảo vệ, khối phân đoạn sẽ thực hiện các kiểm tra cần thiết để bảo vệ các nhiệm vụ riêng biệt và bảo vệ hệ thống. Nếu chế độ trang không được kích hoạt thì địa chỉ tuyến tính này chính là địa chỉ vật lí. Nếu chế độ trang được kích hoạt thì địa chỉ tuyến tính được chuyển thành địa chỉ vật lí bởi khối phân trang. Vì những lí do trên, CPU i486 có hiệu suất cao gấp hai đến ba lần so với các CPU trước nếu hoạt động ở cùng một tần số. Tần số hoạt động của bộ vi xử lí cũng chính là tần số của mạch tạo xung nhịp. Để thi hành đa xử lí (multiprocessing), nhiều lệnh mới đã được trang bị để dễ dàng trao đổi dữ liệu giữa các bộ vi xử lí. Với vi xử lí 486 DX2 hoặc DX4, tần số nhịp được cấp cho CPU sẽ được nhân 2 hoặc 3 ở bên trong chip cho phép có thể tăng tốc độ của vi xử lí mà không đòi hỏi bản mạch chính cũng phải có cùng tốc độ đó. Điều này làm giảm nhẹ việc thiết kế chế tạo các bản mạch chính phải chạy ở tần số cao, do đó giá thành sản phẩm cũng được giảm theo. Thí dụ, vi xử lí i486 DX2/50MHz chỉ cần chạy với bản mạch chính 25 MHz, DX2/66MHz hay DX4/100MHz với bản mạch chính 33MHz. Theo phương án này, nhìn chung máy vi tính phải chịu thiệt về hiệu suất, vì CPU tiến hành xử lí số liệu nhanh gấp hai hoặc ba lần so với các bộ phận trên bản mạch chính, do đó có thể phải xen vào một vài chu kì đợi (wait cycle). Để giải quyết vấn đề này, một bộ nhớ cache ngoài đủ rộng để giữ tạm các lệnh và dữ liệu mà bộ vi xử lí phải đợi. Nếu được thiết kế hợp lí, hệ thống như vậy có thể đạt tới hiệu suất 80% so với các hệ thống có tốc độ xung nhịp trên bản mạch chính bằng tốc độ xung nhịp ở trong CPU. Khoa CNTT Trang 39 KTMT
  • 40. Gi¸o tr×nh vi xö lý Sự khác biệt duy nhất giữa loại 486DX và 486SX chỉ là trong 486SX không có bộ đồng xử lí toán. 2.4. CÁC BỘ VI XỬ LÝ INTEL PENTIUM 2.4.1. Đặc điểm chung Bộ vi xử lí pentium ra đời làm cho kĩ thuật của máy PC lại thay đổi. Về phần mềm, pentium vẫn có tập lệnh, thanh ghi, các chế độ định địa chỉ và các chế độ hoạt động hoàn toàn tương thích với các CPU trước nó. Nhưng về phần cứng, pentiumcó những cải tiến đáng kể. Phiên bản đầu tiên ra đời năm 1993 được chế tạo theo công nghệ 0,8 micron BiCMOS, đó là công nghệ cho phép tạo ra các vi mạch có những phần tử tích cực trong đó có kích thước nhỏ nhất cỡ 0,8 phần triệu mét. Với công nghệ này các chip điện tử sẽ có kích thước bé hơn, tiêu thụ ita năng lượng hơn và cái chính là hiệu suất cao hơn vì các tín hiệu di chuyển trong nội bộ chip với quãng đường ngắn hơn. Với 3,1 triệu linh kiện bán dẫn trong cấu trúc gọi là superscalar xây dựng trên hai hay nhiều đường ống (pipeline), loại pentium có đặc trưng 100MIPS (Million Instruction Per Second), tức là có thể thực hiện hàng triệu lệnh trong một giây với tốc độ đồng hồ là 66 MHz. Do đó nó hoạt động nhanh gấp hai lần chip 486DX2/66 về các phép tính số nguyên và ba đến bảy lầnvới các phép tính số học có dấu phảy động. Mặc dù có bus dữ liệu rộng 64 bit nhưng pentium vẫn được thiết kế để làm việc với bus dữ liệu ngoài 32 bit tương thích với các thế hệ vi xử lí i386/i486 trước đó. 2.4.2. Cấu trúc và tính năng Bộ xử lý Vùng đệm dấu phảy Sơ đồ khối của vi xử lí pentium có thể được trình bày như sau: đích rẽ động nhánh Đường ống U của ALU Hàng Các thanh Cache Cache lệnh ghi nhận lệnh dữ liệu 8KB trước 8KB Đường ống V của Bus dữ liệu 64bit ALU Khoa CNTT Trang 40 KTMT Đơn vị Bus địa chỉ 32bit BUS
  • 41. Gi¸o tr×nh vi xö lý - Pentium có hai bộ nhớ cache 8 kbyte riêng biệt, một dành cho lệnh một dành cho số liệu. - Có hai hàng nhận lệnh trước 32 bit và hai bộ tính số học và lôgic ALU được cung cấp lệnh và dữ liệu trên hai đường ống song song U và V (superscalr) cho phép thi hành hai lệnh máy trong một chu kì. - Bộ xử lí vẫn làm việc với các thanh ghi 32 bit và bus địa chỉ 32 bit nhưng có thể nối với bus số liệu ngoài là 64 bit. - Bus nội bộ là 64 bit và 128 bit, bus từ bộ nhớ cache nội nối với các vùng đệm của các ALU rộng 256 bit. Điều này cho phép tăng tốc độ trao đổi dữ liệu trong nội bộ vi xử lí lên rất cao. - Có một vùng nhớ gọi là vùng đêm đích rẽ nhánh BTB (branch target buffer) của lệnh đối với 256 lệnh rẽ mới đây nhất. - Có một bộ đọc xử lí với hiệu xuất cao hơn nhiều lần các thế hệ trước nhờ các giải thuật (algorthm) nhanh hơn, cách xắp sếp bố trí lệnh cũng như có thể thực hiện đồng thời hai lệnh. Một vài đặc trưng khác làm cho pentium phân biệt được với các vi xử lí trước là: - Kích thước trang của bộ nhớ trong chế độ bảo vệ và ảo không chỉ hạn chế ở 4 kbyte mà có thể lên đến 2 Mbyte hay 4Mbyte. - Khả năng tự tìm kiếm các lỗi phức tạp và gỡ rối (debugging) bằng các mạch phần cứng lắp thêm. - Có thể tự đánh giá được hiệu suất thi hành chương trình. Khoa CNTT Trang 41 KTMT
  • 42. Gi¸o tr×nh vi xö lý Mặc dù một số vi xử lí được xây dựng trên nguyên tắc CISC nhưng pentium đã ứng dụng nhiều công nghệ mới giống như các loại vi xử lí RISC tốc độ cao, thí dụ như việc sử dụng các cấu trúc đường ống, cấu trúc superscalar và dự đoán rẽ nhánh. Điều này làm cho nó có hiệu suất cao như các vi xử lí RISC thực sự. Các lệnh chạy trong pentium được thực hiện trên cấu trúc superscalar với hai đường ống song song U và V, các cache nội bộ và vùng đệm đích rẽ nhánh BTB. Xét qua các cấu trúc này sẽ cho phép giải thích tại sao pentium lại có hiệu suất cao hơn so với các vi xử lí trước đó: Cấu trúc superscalar với hai đường ống song song. Việc thi hành lệnh trong các vi xử lí 80x86 và pentium được diễn ra qua 5 công đoạn: 1. Nhận lệnh trước từ bộ nhớ (Prefetch): lện máy được lấy từ bộ nhớ chuyển vào CPU. 2. Giải mã lệnh 1 (Decode 1): giải mã, phân tích để xác định loại lệnh. 3. Giải mã lệnh 2 (Decode 2): xác định địa chỉ ô nhớ cần truy nhập. 4. Thực hiện lệnh (Execute) 5. Viết các kết quả dữ liệu vào các thanh ghi và bộ nhớ (Writeback). Nếu như mỗi công đoạn đòi hỏi tối thiểu một chu kì nhịp đồng hồ thì khi thi hành tuần tự các công đoạn này cho mỗi lệnh, thông thường phải mất tổng cộng năm chu kì nhịp. Nhưng với một cấu trúc đường ống có thể thực hiện đồng thời song song những công đoạn trên, pentium tạo ra một phương thức làm việc như sau: khi lệnh thứ (n) vừa chuyển sang công đoạn thứ hai thì một lệnh mới thứ (n+1) được đưa ngay vào công đoạn thứ nhất v.v… Nhờ đó cả thảy có 5 lệnh sẽ cùng được xử lí đồng thời trên một đường ống và có thể coi mỗi lệnh chỉ được xử lí trong một chu kì nhịp đông hồ. Hơn thế nữa, Pentium lại có đến hai đường ống gọi tên là U và V được chế tạo hoạt động song song với nhau. Về mặt lí thuyết, nó sẽ có khả năng thi hành cùng một lúc hai lệnh. Tuy nhiên, thực tế không phải lúc nào cũng thực hiện được điều đó vì hai lệnh kế tiếp nhau thường phụ thuộc vào nhau và lúc này chỉ có thể xử lí chúgn một cách tuần tự. Một mạch đặc biệt sẽ kiểm tra tính phụ thuộc dữ liệu đó xem chúng có yêu cầu phải liên kết trong quá trình xử lí hay không. Nếu Khoa CNTT Trang 42 KTMT
  • 43. Gi¸o tr×nh vi xö lý không phụ thuộc, hai lệnh sẽ được gửi tới hai đường ống theo đúng thứ tự. Quá trình có thể dẫn giải như sau:trong công đoạn một, lệnh hiện tại sẽ đưa vaod đơn vị giải mã của đường ống U, lệnh kế tiếp vào đơn vị giải mã của đường ống V. Nếu trong công đoạn hai, mạch đặc biệt nói trên xác định có thể thực hiện đồng thời hai lệnh thì mỗi lệnh sẽ trải qua các công đoạn còn lại trong mỗi đường ống của nó, ngược lại thì lệnh trong ống U sẽ trải qua công đoạn kế tiếp như bình thường còn lệnh kế tiếp trong ống V sẽ được chuyển qua thi hành trong ống U như là lệnh theo sau lệnh hiện tại. Bộ nhớ cache nội bộ 16 kbyte (cache cấp một) Pentium có hai bộ nhớ cache rieng biệt, một dành cho số liệu và một dành cho lệnh. Do tốc độ nhanh lại được tích hợp ngay trong chip vi xử lí nên các lệnh và dữ liệu ở đây có thể được truy cập rất nhanh. Mỗi cache có dung lượng 8kbyete gồm hai tuyến, 128 hàng cache, mỗi hàng dài 32byte. Cả hai cache này có thể được truy xuất đồng thời từ hai đường ống U và V nhờ vào cấu trúc đan xen gấp tám (trang). Pentium có thể hoạt động nhịp nhàng với các vi xử lí khác trong chế độ đa xử lí (mỗi vi xử lí có một cache nội riêng) nhờ được cấp một giao thức đặc biệt gọi là MESI (Modified, Exclusive, Shared, Invalid). Nó cho phép việc hỗ trợ việc đồng bộ hoá giữa các cache trong một hệ thống đa xử lí. Giao thức có chứa thủ tục bus snooping cho phép một bộ xử lí thăm dò và xử lí các thông tin được trữ trong các bộ nhớ cache của các bộ xử lí khác trong hệ thống. Vùng đệm đích rẽ nhánh BTB. Xét trường hợp khi CPU thực hiện một lệnh nhảy (JUMP). Lúc này, thay vì tiếp tục với lệnh kế tiếp trong bộ nhớ thì việc thi hành chương trình lại được tiếp tục với một lệnh hoàn toàn khác tại địa chỉ đích của lệnh nhảy. Điều đó dẫn tới việc phải "tống" lệnh kế tiếp trên, vốn đã nằm sẵn trong đường ống, ra ngoài và phải nạp một lệnh mới vào đường ống. Kết quả là hiệu suất của bộ xử lí sẽ bị giảm xuống vì phải mất đi một vài chu kì nhịp đồng hồ cho quá trình trên. Để khắc phục tình trạng này, petium có một vùng nhớ đệm gọi là vùng đệm đích rẽ nhánh BTB (nghĩa là vùng đệm dành cho các lệnh nhảy- IF/THEN). Nó được sử dụng trong công đoạn giải mã lệnh 1 (Decode 1) của tất cả các lệnh nhảy gần (NEAR JUMP). Nếu lệnh nhảy được thi hành, CPUsẽ cất cả địa chỉ lệnh nhảy và địa chỉ Khoa CNTT Trang 43 KTMT