Bài giảng Kỹ thuật vi xử lý - Chương 2: Nguyên tắc làm việc của Intel 80x86 - Phạm Thế Duy

HOẠT ĐỘNG CỦA VI XỬ LÝ

Chu kỳ máy - Machine cycle

Lấy lệnh - Fetch, Giải mã lệnh - decode, Thực hiện lệnh - execute

Định thời vi xử lý - Processor timing

Chu kỳ BUS - Bus cycles

Đọc bộ nhớ/vào ra - Memory / IO read

Ghi bộ nhớ/ vào ra - Memory / IO write

Thực hiện việc lưu trữ dữ liệu

;Giả sử khi bắt đầu chương trình.

;ds = 2000, bx = 0023, ax = 351C

;cs = 1000, ip = 0005

Chương trình sau:

mov [bx], al ;8807

hlt ;F4

Sẽ được thực hiện như thế nào?

ppt81 trang | Chia sẻ: trungkhoi17 | Lượt xem: 416 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật vi xử lý - Chương 2: Nguyên tắc làm việc của Intel 80x86 - Phạm Thế Duy, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Nguyên tắc làm việc của Intel 80x86Phạm Thế Duy(ptduy@yahoo.com)Sơ đồ khối EXECUTION UNIT (EU) ADDRESS UNIT (AU) INSTRUCTION UNIT (IU)INSTRUCTIONDECODER3 DECODER INSTRUCTION QUEUEADDRESS LATCH AND DRIVERPREFETCHPROCESSOR EXTENTION INTERFACEBUS CONTROLDATA TRANSCEIVERS6 BYTEPREFETCHQUEUE BUS UNIT (BU)PHYSICALADDRESSADDERSEGMENTBASESEGMENTSIZESEGMENTLIMITCHECKOFFSETADDERREGISTERLIMITCHECKCONTROLALUKhối tạo địa chỉ (AU)AU đảm bảo việc quản lý, bảo vệ bộ nhớ, tuỳ theo chế độ địa chỉ các chương trình sẽ sử dụng các loại địa chỉ logic khác nhau, AU có nhiệm vụ chuyển các địa chỉ logic quản lý trong chương trình phần mềm thành địa chỉ vật lý, cung cấp tới BU để giao tiếp với bên ngoài. Địa chỉ vật lý là địa chỉ cung cấp trực tiếp cho bộ nhớ và vào ra, còn địa chỉ logic là các giá trị được chương trình quản lý sử dụng để tạo ra địa chỉ vật lý, đó chính là các địa chỉ đoạn (segment) và địa chỉ độ dời (offset).Khối giao tiếp BUS (BU)BU cung cấp các tín hiệu địa chỉ, dữ liệu và điều khiển để truy cập các bộ nhớ và vào ra. Khối này cũng cho phép giao tiếp với bộ đồng xử lý hoặc các bộ vi xử lý khác.Chức năng quan trọng nhất của BU là tự động kích hoạt quá trình lấy lệnh từ bộ nhớ bằng bộ tiền truy cập lệnh (Prefetch). BU còn có chức năng cho phép quá trình lấy lệnh từ bộ nhớ thực hiện song song với các quá trình khác nhớ hàng đợi lệnh 6 byte (Prefetch queue). Các địa chỉ mà AU tạo ra cung cấp tới các bộ cài (Address Latch) và sẽ được định thời cung cấp ra bên ngoài tại các thời điểm thích hợp. Dữ liệu truyền với CPU sẽ được chuyển qua các cổng đệm hai chiều (Data Transceivers).Khối giải mã lệnh (IU)Lệnh được BU lấy vào hàng đợi, trong khi IU lấy lệnh đã lấy trước đó giải mã và chuyển tới hàng đợi lệnh đã giải mã (Decoded Instruction queue) để EU thực hiện.Với chức năng giải mã lệnh, các lệnh ngoài bộ nhớ có thể mã hoá ngắn nhất có thể, IU sẽ tạo ra các tín hiệu điều khiển cần thiết từ các mã lệnh này. Bằng cách sử dụng bộ giải mã lệnh, dung lượng nhớ của hệ thống sẽ yêu cầu ít hơn, thời gian lấy lệnh sẽ được giảm ngắn.Khối thực hiện lệnh (EU)EU thực hiện các lệnh xử lý dữ liệu mà IU đã giải mã, nó giao tiếp dữ liệu với bên ngoài thông qua BU.Các khối chức năng của EU bao gồm: - Bộ điều khiển (Control) thực hiện việc điều khiển việc thực hiện các lệnh trong EU. - ALU là khối thực hiện các phép toán số học logic, cấu trúc của ALU thông thường có hai ngõ vào nhận hai toán hạng và một ngõ ra cung cấp kết quả. Các thanh ghi sử dụng làm nơi lưu trữ dữ liệu, sử dụng trong các phép tính, và các giá trị địa chỉ cho phép EU lấy các toán hạng từ bên ngoài.Các thanh ghi của 80286Các thanh ghi đa năng: AX, BX, CX, DX, DI, SI, BP, SP.Các thanh ghi đoạn: CS, DS, ES, SS.Thanh ghi cờ (Flags).Các thanh ghi đặc biệt: IP, MSW.Các thanh ghi đa năng (16bit)Có thể sử dụng chứa dữ liệu 16 bit.Có thể chia thanh hai phần 8 bit truy cập riêng rẽ.Các thanh ghi đa năngAX (Accumulator) thanh chứa cho lệnh nhân và chia. MUL BL ; AX = AL * BLBX (Base): Sử dụng làm thanh ghi địa chỉ cơ sở. MOV AL,[BX] ;chép nội dung ô nhớ BX giữ địa chỉ. MOV AH,[BX+03] ;chép nội dung ô nhớ có địa chỉ [BX+3] vào AH. MOV CH,[BX+DI+9]CX (Counter): Sử dụng làm bộ đếm số vòng lặp. LOOP N ;trừ CX đi 1, chuyển tới nhãn N khi CX ≠0.DX (Data): Làm thanh ghi chứa dữ liệu trong các lệnh nhân chia 16 bit. Làm thanh ghi giữ địa chỉ cổng vào ra. MUL BX ; DX AX = AX*BX OUT DX,BL ; chuyển BL ra cổng có địa chỉ DXCác thanh ghi đa năng (tiếp)DI (Destination Index): thanh ghi chỉ số đích – giữ địa chỉ đích dữ liệu trong các lệnh về chuỗi. Làm thanh ghi địa chỉ. MOV AH,[DI] ;chuyển nội dung ô nhớ có địa chỉ chứa trong DI vào AH. MOV BH,[DI+7] ;Chuyển nội dung ô nhớ [DI+7] vào thanh ghi BH MOVSB ; Chuyển nội dung [SI] vào địa chỉ [DI] SI (Source Index): thanh ghi chỉ số nguồn – giữ địa chỉ nguồn dữ liệu trong các lệnh về chuỗi. Làm thanh ghi địa chỉ. MOV AH,[SI] MOV BH,[SI+7] MOVSWBP (base pointer): thanh ghi con trỏ cơ sở – Làm thanh ghi địa chỉ. MOV AL,[BP] MOV AH,[BP+03] MOV CH,[BP+DI+9] Ngăn xếpNgăn xếp là một vùng nhớ sử dụng cho việc chứa các giá trị tạm thời. Ngăn xếp trong chế độ địa chỉ thực được truy xuất bằng cặp thanh ghi SS:SP segment/offset (StackSegment: StackPointer)Một số lệnh tác động tới vùng nhớ ngăn xếp như: push, pop, call, ret, và nhiều lệnh khác nữa.Ngăn xếp là nơi tốt nhất để lưu trữ các giá trị tạm thời vào bộ nhớ.Chứa dữ liệu vào ngăn xếpTừ ‘stack-ngăn xếp’ được sử dụng là do cách lưu trữ và lấy lại dữ liệu trong vùng nhớ ngăn xếp cũng giống như việc sử dụng một ngăn xếp trong thực tế.Có thể thực hiện ngăn xếp bằng các hộp. Để tạo thành ngăn xếp trước hết đặt hộp A, sau đó tới B và cuối cùng là C.AABABCChú ý rằng chúng ta chỉ có thể lấy được hộp xếp vào ngăn xếp cuối cùng (Đỉnh ngăn xếp - Top of Stack – TOS). Như vậy trình tự phục hồi lại dữ liệu theo trình tự ngược lại khi xếp vào ngăn xếp (C tới B và cuối cùng là A).Chứa dữ liệu vào ngăn xếp bằng lệnh PUSHThanh ghi con trỏ ngăn xếp SP (Stack Pointer) được sử dụng để truy cập ngăn xếp. SP luôn trỏ tới giá trị cuối cùng được cất vào ngăn xếp.Lệnh PUSH chứa dữ liệu vào đỉnh ngăn xếp. PUSH AX ; SP= SP-1, M[SP]  AX Lệnh “PUSH AX” tương ứng với: SUB SP, 1 ; giảm SP đi 1 MOV [SP], AX ; ghi giá trị của AX vào đỉnh ngăn xếpCác lệnh truy cập ngăn xếp có thể thực hiện với 16 hoặc 32 bit.Quan sát hoạt động lệnh PUSH????????????????????????????????Last valueĐịa chỉ thấpĐịa chỉ cao  SPTrước lệnh PUSH AX????????????????????????????ahalLast valueĐịa chỉ thấpĐịa chỉ cao SP (SP mới = SP cũ -1)Sau lệnh PUSH AXMỗi ô nhớ 16 bit, ngăn xếp được truy cập 16 hoặc 32 bit.Nhiều lệnh PUSH liên tiếp????????????????????????????????Last valueĐịa chỉ thấpĐịa chỉ cao  SPTrước lệnh PUSH ????????????????????cxbxaxLast valueĐịa chỉ thấp  SPSau các lệnh PUSHPUSH AX PUSH BX PUSH CXĐịa chỉ caoĐọc dữ liệu trong ngăn xếp bằng lệnh POPLệnh POP phục hồi một giá trị từ ngăn xếp: POP AX ; AX  M[SP] , SP= SP+1 Lệnh “pop AX” tương đương với các lệnh: mov AX, [SP] ; đọc giá trị từ đỉnh ngăn xếp add sp, 1 ; tăng SP lên 1.Hoạt động của lệnh POP????????????????????????????23ABFF65Địa chỉ thấpĐịa chỉ cao  SPTrước POP AXFF6523AB????????????????????????????Địa chỉ thấpĐịa chỉ cao  SP AX = 23ABSau POP AXMỗi ô nhớ 16 bit, ngăn xếp truy cập 16 bit hoặc 32 bits.Hoạt động nhiều lệnh POP liên tiếpFF6523AB357FD21B38AC23F4????????????Địa chỉ thấpĐịa chỉ cao  SPTrước FF6523AB357FD21B38AC23F4????????????Địa chỉ caoĐịa chỉ thấp AX = 38AC BX = D21B CX = 357FSau các lệnh POPpop AX pop BX pop CX  SPNgăn xếp Overflow, UnderflowNếu liên tục cất dữ liệu vào ngăn xếp mà không lấy dữ liệu ra thì ngăn xếp cuối cùng sẽ lớn hơn khoảng dung lượng dành cho nó.Có thể dữ liệu ngăn xếp sẽ ghi tràn qua vùng nhớ chứa mã lệnh hoặc vùng nhớ chứa dữ liệu khác (không phải ngăn xếp).Việc này gọi là tràn trên ngăn xếp (OVERFLOW).Nếu lấy dữ liệu ra khỏi ngăn xếp nhiều hơn các giá trị đã cất vào ngăn xếp, con trỏ ngăn xếp có thể tăng lớn hơn giá trị điểm khởi động ngăn xếp. Điều này được gọi là tràn dưới (UNDERFLOW). Để ngăn xếp được sử dụng tốt cần phải lấy dữ liệu ra khỏi ngăn xếp bằng đúng số dữ liệu đã cất vào ngăn xếp.Tổng kết về ngăn xếpLà nơi chứa dữ liệu tạm thời.Đoạn và con trỏ ngăn xếp SS:SPPush và Pop (LIFO-Last In First Out)SP : Giữ địa chỉ đỉnh ngăn xếpSau lệnh PUSH con trỏ SP sẽ giảm.Các thanh ghi đoạnCS: Code Segment – Đoạn mã lệnh.DS: Data Segment – Đoạn dữ liệu.SS: Stack Segment – Đoạn ngăn xếp.ES:Extra Segment – Đoạn mở rộng.Chế độ địa chỉ thực:Physical address = Segment * 10H +offsetPhân đoạn bộ nhớCSESSSDSDataSegmentStackSegmentExtraSegmentCodeSegmentSegmentRegisters Địa chỉ logic và địa chỉ đoạn (Logical, Segmented): 0FE6:012Bh Địa chỉ độ dời, chỉ số (offset, index): 012Bh Địa chỉ vật lý: 0FE60h  65120 +012Bh  299 0FF8Bh  65419SystemMemory00000hFFFFFhThanh ghi cờ**PA*ZSTICDOPL*IONTD15D0 Cờ nhớ CF (Carry Flag). CF=1 khi cộng tràn, trừ mượn.Cờ chẵn lẻ PF (Parity Flag). PF = 1 khi số bit 1 là một số chẵn.Cờ dấu SF ( Sign Flag). SF =1 khi kết quả có bit cao nhất là 1Cờ tràn OF (Overflow Flag) . OF = 1 khi tràn bit 1 từ MSB-1 qua MSB.Cờ ZERO ZF (Zero Flag). ZF = 1 khi kết quả bằng 0.Cờ nhớ phụ AF (Auxiliary Carry Flag ). AF=1 khi tràn bit 1 từ D3 qua D4.Các cờ điều khiển trong thanh ghi cờ.Cờ định hướng DF (Direction Flag). Xác định hướng địa chỉ của các lệnh xử lý chuỗi. Cờ ngắt IF : (Interrupt Flag). IF=1 cho phép ngắt.Cờ bẫy TF: (Trap Flag). Sử dụng chạy từng bước để sửa sai chương trình.Cờ nhiệm vụ lồng nhau NT (Nested Tast). Cho phép tiến triển hoặc chuyển nhiệm vụ.Cờ chỉ thị mức đặc quyền vào ra (IOPL). Chỉ thị mức đặc quyền của nhiệm vụ đang thực hiện.Các thanh ghi đặc biệt.Thanh ghi con trỏ lệnh: (IP - Instruction Pointer).Giữ địa chỉ độ dời của vùng nhớ chứa mã lệnh.Tự động tăng lên 1 khi đọc xong một ô nhớ lệnh.Khi điều khiển chương trình IP được thay đổi giá trị mới, (các lệnh CALL giá trị hiện hành sẽ được cất vào đỉnh ngăn xếp trước khi nạp giá trị mới. Lệnh RET phục hồi giá trị của IP).Thanh ghi trạng thái máy: (MSW – Machine Status Word)TS (Task Set): là bit chuyển nhiệm vụ. TS=1 1 xảy ra việc chuyển nhiệm vụ. EM (Emulate Processor Extention): Cho phép mô phỏng bộ đồng xử lý toán học.MP (Monitor Coprocesor Extention): Cho biết hệ thống có bộ đồng xử lý toán học đang làm việc.PE (Protect Mode Enable): Cho phép chế độ bảo vệ, khi bit này được lập 80286 chuyển qua hoạc động ở chế độ bảo vệ. Khi đã thiết lập, chỉ khi RESET bit này mới được xoá.MPTSEMPED15D0Nguyên tắc làm việc của 80286Kết nối BUS hệ thống82284RES DATA BUSMRDC INTA IOWC IORCCLKDEN DT/RRESETREADYALE82086CLK DIR G WR RD WE OE S1 S0ADDRESS BUSI/OMEMORYVcc S1 S0MWTC LatchTransceiver82288D0-D15 A0-A23Sơ đồ kết nối BUS hệ thống tiêu biểuCác mạch đệm cài BUSHOẠT ĐỘNG CỦA VI XỬ LÝChu kỳ máy - Machine cycleLấy lệnh - Fetch, Giải mã lệnh - decode, Thực hiện lệnh - executeĐịnh thời vi xử lý - Processor timingChu kỳ BUS - Bus cyclesĐọc bộ nhớ/vào ra - Memory / IO readGhi bộ nhớ/ vào ra - Memory / IO writeThực hiện việc lưu trữ dữ liệu;Giả sử khi bắt đầu chương trình.;ds = 2000, bx = 0023, ax = 351C;cs = 1000, ip = 0005Chương trình sau:mov [bx], al ;8807hlt ;F4Sẽ được thực hiện như thế nào?Bộ vi xử lý sẽ hoạt động như thế nào? How does the P works?Lấy lệnh - FetchTăng bộ đếm chương trình PC lên 1 Increment Program Counter (CS:IP) by 1Giải mã lệnh - DecodeThực hiện lệnh nếu cần. Execute (if necessary)CS:IPFETCH1000:0005FETCH10005FETCH10005LOWHIGHFETCH1000588LOWHIGHFETCH1000588LOWHIGHFETCHINC. PCINC. PCDECODEmov [bx], ?CS:IPFETCH1000:0006FETCH10006FETCH10006LOWHIGHFETCH1000607LOWHIGHFETCH1000607LOWHIGHFETCHINC. PCINC. PCDECODEmov [bx], alDS:BXEXECUTEmov [bx], al2000:0023EXECUTEmov [bx], al20023EXECUTEmov [bx], al200231CEXECUTEmov [bx], al200231CHIGHLOWEXECUTEmov [bx], al200231CHIGHLOWEXECUTEmov [bx], alCS:IPFETCH1000:0007FETCH10007FETCH10007LOWHIGHFETCH10007F4LOWHIGHFETCH10007F4LOWHIGHFETCH10007F4LOWHIGHINC. PC10007F4LOWHIGHINC. PC10007F4LOWHIGHDECODEhltEXECUTEhltChu kỳ máy -Machine CycleMachine Cycle Timing DiagramĐịnh thời vi xử lý Processor TimingBiểu đồ định thời bộ vi xử lý cho chu kỳ lấy lệnh thứ nhất của lệnh mov [bx],alBiểu đồ định thời bộ vi xử lý cho chu kỳ lấy lệnh thứ hai của lệnh mov [bx],alBiểu đồ định thời bộ vi xử lý cho chu kỳ thực hiện lệnh mov [bx],alBiểu đồ định thời bộ vi xử lý cho chu kỳ lấy lệnh thứ nhất của lệnh HaltBiểu đồ định thời bộ vi xử lý cho một lệnh đọc bộ nhớ bất kỳBiểu đồ định thời bộ vi xử lý cho một lệnh ghi bộ nhớ bất kỳBiểu đồ định thời bộ vi xử lý cho một lệnh đọc I/O bất kỳBiểu đồ định thời bộ vi xử lý cho một lệnh ghi I/O bất kỳĐịnh thời sai cho việc ghi bộ nhớ

Các file đính kèm theo tài liệu này:

  • pptbai_giang_ky_thuat_vi_xu_ly_chuong_2_nguyen_tac_lam_viec_cua.ppt
Tài liệu liên quan