1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Cấu trúc máy tính& Hợp ngữTổ chức CPU_Chương 2

19 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Mỗi chu kỳ bus bắt đầu bằng việc xuất địa chỉ bộ nhớ hoặc I/O port (chu kỳ xung nhịp T1). Với 8086 thì địa chỉ này có thể là địa chỉ bộ nhớ 20 bit, địa chỉ I/O gián tiếp 16 bit (thanh ghi DX) hay địa chỉ I/O trực tiếp 8 bit. Bus điều khiển có 4 tín hiệu tác động mức thấp là MEMR , MEMW , IOR và IOW .

Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU Chương TỔ CHỨC CPU (8086/8088/80286) Định thời chu kỳ bus Mỗi chu kỳ bus bắt đầu việc xuất địa nhớ I/O port (chu kỳ xung nhịp T1) Với 8086 địa địa nhớ 20 bit, địa I/O gián tiếp 16 bit (thanh ghi DX) hay địa I/O trực tiếp bit Bus điều khiển có tín hiệu tác động mức thấp MEMR , MEMW , IOR IOW Các chuỗi kiện xảy chu kỳ bus đọc nhớ: T1: CPU xuất địa nhớ Các đường liệu không hoạt động đường điều khiển bị cấm T2: Đường điều khiển MEMR xuống mức thấp Đơn vị nhớ ghi nhận chu kỳ bus trình đọc nhớ đặt byte hay word có địa lên bus liệu T3: CPU đặt cấu hình để đường bus liệu nhập Trạng thái chủ yếu để nhớ có thời gian tìm kiếm byte hay word liệu T4: CPU đợi liệu bus liệu Do đó, thực chốt bus liệu giải phóng đường điều khiển đọc nhớ Q trình kết thúc chu kỳ bus T1 T2 T3 T4 Clk Address bus Địa Đọc nhớ hay I/O IOR hay MEMR Data bus Address bus Dữ liệu Địa vào Ghi nhớ hay I/O IOW hay MEMW Data bus Dữ liệu vào Hình 2.1 – Định chu kỳ bus GV: Phạm Hùng Kim Khánh Trang 29 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU Trong chu kỳ bus, CPU thực đọc I/O, ghi I/O, đọc nhớ hay ghi nhớ Các đường bus địa bus điều khiển dùng để xác định địa nhớ hay I/O hướng truyền liệu bus liệu Chú ý CPU điều khiển tất trình nên nhớ bắt buộc phải cung cấp liệu vào lúc MEMR lên mức cao trạng thái T4 Nếu không, CPU đọc liệu ngẫu nhiên không mong muốn bus liệu Để giải vấn đề này, ta dùng thêm trạng thái chờ (wait state) Kiến trúc nội 2.1 Kiến trúc nội CPU có khả thực tác vụ liệu theo tập lệnh bên Một lệnh ghi nhận mã định nghĩa trước, gọi mã lệnh (opcode) Trước thực thi lệnh, CPU phải nhận mã lệnh từ nhớ chương trình Q trình xử lý gọi chu kỳ nhận lệnh (fetch cycle) Một mã nhận giải mã mạch bên CPU tiến hành thực thi (execute) mã lệnh EU ← Hàng lệnh ← BIU Bus hệ thống Hình 2.2 – Kiến trúc tổng quát CPU 8086 BIU (Bus Interface Unit – đơn vị giao tiếp bus) nhận mã lệnh từ nhớ đặt chúng vào hàng chờ lệnh EU (Execute Unit – đơn vị thực thi) giải mã thực lệnh hàng Chú ý đơn vị EU BIU làm việc độc lập với nên BIU có khả nhận lệnh EU dang thực thi lệnh trước Khi EU thực xong lệnh, lấy mã lệnh hàng lệnh (instruction queue) Kiến trúc nội CPU 8086 hình 2.3 Nó có xử lý riêng: BIU EU BIU cung cấp chức phần cứng, bao gồm tạo địa nhớ I/O để chuyển liệu EU bên CPU EU nhận mã lệnh chương trình liệu từ BIU, thực thi lệnh chứa kết ghi Ngồi ra, liệu chứa vị trí nhớ hay ghi vào thiết bị xuất Chú ý EU khơng có bus hệ thống nên phải thực nhận xuất tất liệu thơng qua BIU Sự khác biệt CPU 8086 8088 BIU Trong 8088, đường bus liệu bit 8086 16 bit Ngoài hàng lệnh 8088 dài byte 8086 byte Tuy nhiên EU hai loại µP giống nên chương trình viết cho 8086 chạy 8088 mà khơng cần thay đổi GV: Phạm Hùng Kim Khánh Trang 30 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU BIU EU Điều khiển bus sinh địa Σ AH AL BH BL CH CL DH DL CS BP ES DI SS SI DS SP IP Internal bus ALU Thanh ghi cờ Hình 2.3 – Kiến trúc nội 8086 2.2 Cơ chế đường ống (pipeline) ™ Quá trình nhận lệnh thực thi lệnh: 1/ BIU xuất nội dung ghi trỏ lệnh IP (Instruction Pointer) bus địa để chọn byte hay word đọc vào BIU 2/ Thanh ghi IP tăng lên để chuẩn bị nhận lệnh kế (số byte tăng lên IP tùy thuộc vào kích thước lệnh trước đó) GV: Phạm Hùng Kim Khánh Trang 31 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU 3/ Khi lệnh BIU, đưa sang hàng lệnh (queue) Đây ghi lưu trữ dạng FIFO (First In First Out – Vào trước trước), dùng chế xử lý xen kẽ liên tục dòng mã lệnh (kỹ thuật đường ống – pipelining) 4/ Giả sử ban đầu hàng lệnh trống, EU khơng làm bắt đầu xuất lệnh hàng, EU lấy lệnh khỏi hàng bắt đầu thực thi lệnh 5/ Trong EU thực thi lệnh, BIU tiến hành nhận lệnh Tuỳ theo thời gian thực thi lệnh mà BIU đưa vào hàng lệnh nhiều lệnh trước EU thực lệnh xong tiếp tục lấy lệnh BIU lập trình để nhận lệnh lúc hàng lệnh có chỗ cho byte (8088) hay byte (8086) Lợi ích phương pháp xử lý theo chế pipeline EU thực thi lệnh gần liên tục thay phải đợi BIU nhận thêm lệnh Nhận Nhận Thực thi Thực thi Nhận Thực thi (a) Nhận (2) Nhận (1) Chờ Nhận (3) Đọc Chờ Thực thi Thực thi Nhận (4) Thực thi Nhận (4) Thực thi Nhận Chờ Nhận (b) (1): lệnh thực thi không cần liệu hàng (2): lệnh thực thi cần liệu hàng (3): lệnh nhảy (4): lệnh bị bỏ qua lệnh nhảy Hình 2.4 (a) CPU thơng thường dùng chu kỳ nhận thực thi lệnh (b) Kiến trúc dạng pipeline 8086/8088 cho phép thực thi lệnh mà khơng bị trễ q trình nhận lệnh Có điều kiện làm cho EU chế độ chờ: - Điều kiện thứ xảy lệnh cần truy xuất đến vị trí nhớ khơng hàng BIU phải treo trình nhận lệnh xuất địa ô nhớ Sau truy xuất nhớ, EU tiếp tục trình thực thi lệnh từ hàng lệnh BIU tiếp tục đưa lệnh vào hàng - Điều kiện thứ hai xảy lệnh thực thi lệnh nhảy (jump) Trong trường hợp này, thay dùng địa lệnh kế tiếp, ta phải chuyển đến địa (không tuần tự) Tuy nhiên, BIU đặt lệnh theo lưu lệnh khơng sử dụng Trong nhận lệnh địa lệnh jump đến, EU phải đợi tất byte hàng phải bỏ GV: Phạm Hùng Kim Khánh Trang 32 Tài liệu Cấu trúc máy tính& Hợp ngữ - Tổ chức CPU Điều kiện thứ ba làm BIU treo q trình nhận lệnh thực thi lệnh có thời gian thực thi lớn Giả sử lệnh AAM (ASCII Adjust for Multiplication) cần 83 chu kỳ xung nhịp để hồn tất với chu kỳ xung nhịp cho trình nhận lệnh hàng bị đầy Như BIU phải đợi lệnh thực xong EU nhận mã lệnh từ hàng tiếp tục trình nhận lệnh 2.3 Cơ chế siêu phân luồng (hyper-threading) Internet, thương mại điện tử phần mềm ứng dụng doanh nghiệp ngày đòi hỏi nhiều lực tính tốn máy chủ Để nâng cao tốc độ, phần mềm cần phải phân luồng - thị chia thành nhiều dịng lệnh để xử lý đồng thời nhiều xử lý Intel đưa kỹ thuật phân luồng cho phép nâng cao tốc độ khả tính tốn song song cho ứng dụng đa luồng Công nghệ Intel mô vi xử lý vật lý hai vi xử lý luận lý (logic), tài nguyên vật lý chia sẻ có cấu trúc chung giống hệt cho hai xử lý logic Hệ điều hành phần mềm ứng dụng xem như chạy hai hay nhiều xử lý, kết tốc độ xử lý trung bình tăng lên xấp xỉ 40% xử lý vật lý, Intel gọi kỹ thuật siêu phân luồng Kỹ thuật siêu phân luồng cho phép phần mềm ứng dụng viết cho máy chủ đa luồng thực thị song song đồng thời xử lý riêng, cách cải thiện độ giao dịch thời gian đáp ứng yêu cầu đặc thù khác phần mềm nghiệp vụ thương mại điện tử Kỹ thuật tương thích với phần mềm ứng dụng hệ điều hành sẵn có máy chủ (server), cho phép hỗ trợ nhiều người dùng tăng khối lượng công việc xử lý máy chủ Với máy trạm (workstation) cao cấp, kỹ thuật siêu phân luồng tăng đáng kể tốc độ phần mềm ứng dụng địi hỏi lực tính tốn cao, ví dụ phần mềm thiết kế chiều, xử lý ảnh hay video… Trong thời gian tới xuất ngày nhiều phần mềm thiết kế đặc biệt tối ưu hoá cho Kỹ thuật Từ tháng 01/2002, kỹ thuật siêu phân luồng Intel đưa vào vi xử lý Xeon đời mới, khởi đầu với xử lý có tốc độ 1.8GHz 2.0GHz với 512KB cache thứ cấp, sản xuất công nghệ 0.13 micron (Xeon 1.7GHz, 1.8GHz, 2.0GHz với 256KB cache thứ cấp sản xuất công nghệ 0.18 không hỗ trợ siêu phân luồng) Tại thời điểm Intel giới thiệu xử lý Xeon với chipset 860, có số nhà sản xuất hàng đầu IBM, Compaq, Dell, SuperMicro, Tyan… hỗ trợ vi xử lý này, số lượng sản phẩm Tuy nhiên, có thêm chipset hỗ trợ xử lý Xeon E7500 Serverworks GC, nhiều nhà sản xuất khác có sản phẩm hỗ trợ xử lý Xeon Tuy nhiên đa số người dùng, người dùng máy tính để bàn (desktop) kỹ thuật siêu phân luồng xa lạ Intel chuẩn bị đưa xử lý Pentium IV dành cho desktop áp dụng kỹ thuật siêu luồng (tốc độ khởi điểm 3.06GHz) Kỹ thuật siêu phân luồng (hyper-threading) cho phép ứng dụng đa luồng thực luồng song song Trong kỹ thuật trước, phân luồng thực cách cắt lệnh thành nhiều dòng (stream) khác nhau, dòng vi xử lý thực (trong hệ thống đa xử lý) Với kỹ thuật siêu phân luồng, phân luồng sử dụng tài nguyên vi xử lý hiệu trình song song tốt GV: Phạm Hùng Kim Khánh Trang 33 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU Kỹ thuật siêu phân luồng cung cấp trạng thái song song cấp độ luồng (TLP – thread level parallelism) cho vi xử lý, kết gia tăng khả tận dụng tài nguyên vi xử lý Siêu phân luồng dạng kỹ thuật đa luồng song song (SMT – Simultaneous Multi Threading) nhiều luồng thực thi thời điểm vi xử lý Vấn đề thực cách kết hợp AS (Architectural State) vi xử lý, AS dùng chung tài nguyên vi xử lý Kỹ thuật làm đáp ứng thời gian vi xử lý nhanh môi trường đa nhiệm cho phép thực nhanh hoạt động đa luồng đa nhiệm cách sử dụng tài nguyên nhàn rỗi ™ Kỹ thuật siêu phân luồng đa luồng song song (SMT Simultaneous Multi-Threading) Intel phát triển SMT từ cơng nghệ gốc có tên mã Jackson với tên khác Hyper-Threading – kỹ thuật siêu phân luồng Trước hiểu cách thức hoạt động kỹ thuật này, cần phải tìm hiểu nó, đặc biệt chuỗi lệnh cách chúng hoạt động Cái làm cho ứng dụng chạy? Làm CPU biết dẫn để thực thực với liệu nào? Tất thông tin có chứa mã biên dịch ứng dụng chạy nạp ứng dụng vào Ứng dụng gửi chuỗi lệnh báo cho CPU biết phải làm để đáp ứng, CPU chuỗi lệnh tập thị cần phải thực thi CPU biết xác thị nằm đâu nhờ ghi đếm chương trình (PC – Program Counter) PC ln đến vị trí nhớ nơi mà thị cần thực lưu giữ, chuỗi lệnh gửi đến CPU địa nhớ chuỗi lệnh nạp sẵn vào PC, CPU biết bắt đầu thực từ đâu Sau thị, PC tăng lên trình tiếp tục đến hết chuỗi lệnh Khi chuỗi lệnh thực xong, PC bị ghi đè thị Chuỗi lệnh bị ngắt yêu cầu khác, CPU lưu giá trị PC ngăn xếp (stack) nạp giá trị vào PC, nhiên hạn chế thời điểm có chuỗi lệnh thực thi Một hướng giải chung cho vấn đề sử dụng hai hay nhiều CPU, thời điểm CPU thực thi chuỗi lệnh hai hay nhiều CPU thực thi hai hay nhiều chuỗi lệnh Tuy vậy, lại có nhiều vấn đề nảy sinh với cách giải này, trước hết nhiều CPU tốn nhiều tiền, quan trọng việc quản lý hai hay nhiều CPU để chúng chia sẻ tốt tài nguyên chung Ví dụ, trước chipset AMD 760MP đưa ra, tất tảng x86 đa xử lý hỗ trợ việc chia băng thông sẵn có CPU, điều quan trọng ứng dụng hệ điều hành cần phải có khả hỗ trợ tính Hiện nay, để giải nhanh chuỗi lệnh phức tạp, phần cứng nói chung phải nhờ vào phương án xử lý đa luồng, hệ điều hành phải hỗ trợ xử lý đa luồng, phải tăng tốc độ cách thật sự, giống có nhiều xử lý (trong hầu hết trường hợp) Kỹ thuật siêu phân luồng Intel giải vấn đề cách thực nhiều chuỗi lệnh thời điểm ™ Hiệu vi xử lý Lấy P4 làm ví dụ, CPU có tổng cộng đơn vị thực thi, hai số thực hai lệnh xung clock (gọi double pumped ALUs) Nhưng khơng thể tìm phần mềm tận dụng hết đơn vị thực thi Hầu hết phần mềm cho máy tính cá nhân sử dụng làm việc với GV: Phạm Hùng Kim Khánh Trang 34 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU phép tính số nguyên nạp lưu trữ mà không động đến đơn vị thực thi dấu chấm động Còn số phần mềm tập trung vào đơn vị xử lý dấu chấm động mà không sử dụng đến đơn vị xử lý số nguyên Ngay ứng dụng chủ yếu sử dụng phép tính số nguyên không tận dụng tất đơn vị xử lý số nguyên, đặc biệt thành phần CPU chuyên dùng cho phép dịch hay quay Giả sử CPU với đơn vị thực thi: đơn vị số nguyên (ALU – Arithmetic Logic Unit), đơn vị dấu chấm động (FPU – Floating Point Unit) đơn vị nạp/lưu trữ (đơn vị dùng để đọc/ghi nhớ) Giả sử CPU thực lệnh vòng chu kỳ xung clock đồng thời giải nhiều lệnh tới ba đơn vị thực thi Ta cần CPU thực thi chuỗi lệnh sau: 1+1 10+1 Lưu trữ kết Biểu đồ giúp minh họa mức độ đơn vị thực thi, màu xám biểu thị đơn vị thực thi không sử dụng, gạch chéo cho biết đơn vị thực thi hoạt động Đơn vị thực thi ALU FPU Load/Store Chu kỳ xung Có thể thấy xung clock có 33% số đơn vị sử dụng, phép tốn hồn tồn khơng sử dụng FPU Giả sử gửi chuỗi lệnh khác đến đơn vị thực thi CPU, lần lệnh tải, cộng lưu trữ: Đơn vị thực thi ALU FPU Load/Store Chu kỳ xung GV: Phạm Hùng Kim Khánh Trang 35 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU Ta thấy sử dụng có 33% số đơn vị thực thi Thuật toán xử lý song song gọi ILP (instruction level parallelism), dẫn phức tạp thực đồng thời CPU có khả tận dụng đơn vị xử lý song song, tức có nhiều 33% số đơn vị xử lý sử dụng Tuy nhiên thực tế hầu hết mã lệnh x86 khơng phải ILP, ta phải tìm cách khác để tăng hiệu Ví dụ, hệ thống có CPU chúng thực chuỗi lệnh đồng thời, cách biết đến xử lý song song theo luồng để tăng cường hiệu năng, nhiên lại tốn ™ Kỹ thuật siêu phân luồng Các đơn vị thực thi không sử dụng thường xuyên CPU lấy liệu nhanh mong muốn tắc nghẽn đường truyền (memory bus frontside-bus), dẫn đến giảm sút hoạt động đơn vị thực thi Ngoài ra, nguyên nhân khác đề cập có q ILP hầu hết chuỗi lệnh thực thi Kỹ thuật siêu phân luồng Bộ xử lý đa nhân Siêu phân luồng AS AS Tài nguyên thực thi Tài nguyên thực thi AS AS Tài nguyên thực thi Hình 2.5 – So sánh xử lý đa nhân siêu phân luồng Hiện thời đa số phương pháp dùng để cải thiện hiệu hệ CPU tăng tốc độ xung clock tăng độ lớn nhớ đệm (cache) Nhưng cho dù hai cách sử dụng khơng thực sử dụng hết tài nguyên sẵn có CPU Nếu có cách cho phép thực thi nhiều chuỗi lệnh đồng thời tăng hiệu sử dụng tài ngun CPU Đó cách mà kỹ thuật siêu phân luồng Intel làm được, chất chia sẻ tài nguyên để sử dụng hiệu đơn vị thực thi lệnh có sẵn CPU Siêu phân luồng kỹ thuật nằm x86, phần nhỏ SMT Ý tưởng SMT đơn giản: CPU vật lý xuất hệ điều hành hai CPU logic hệ điều hành phân biệt Nhiệm vụ hệ điều hành gửi chuỗi lệnh tới CPU phần cứng đảm nhiệm cơng việc cịn lại Trong CPU sử dụng kỹ thuật siêu phân luồng, CPU logic sở hữu tập ghi, kể ghi đếm chương trình riêng (separate program counter), CPU vật lý luân phiên giai đoạn tìm/giải mã lệnh hai CPU logic thực thi thao tác từ hai chuỗi lệnh đồng thời theo cách hướng tới đơn vị thực thi sử dụng GV: Phạm Hùng Kim Khánh Trang 36 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU ™ Hạn chế siêu phân luồng Đơn vị thực thi ALU FPU Load/Store Chu kỳ xung Giả sử CPU đơn giản trước có đặc tính siêu phân luồng: Các ô gạch chéo hiển thị dẫn từ chuỗi lệnh thứ thực hiện, ô chấm chấm hiển thị dẫn từ chuỗi lệnh thứ hai thực Các ô màu xám hiển thị đơn vị thực không sử dụng, ô màu đen hiển thị xung đột mà hai dẫn sử dụng đơn vị thực thi Rõ ràng việc thực thi song song hai chuỗi lệnh với kỹ thuật siêu phân luồng lại thực chậm so với CPU thông thường Nguyên nhân thật đơn giản: CPU đồng thời thực hai chuỗi lệnh đơn giản, tất trùng lặp với lệnh add, load, store Nếu thực thi ứng dụng địi hỏi nhiều phép tốn động với ứng dụng số nguyên kết khác Hiện ứng dụng văn phịng máy tính để bàn sử dụng số nguyên (và tương lai sử dụng số nguyên) Vì lợi ích mà cơng nghệ siêu phân luồng đem lại thấp (và đơi cịn khơng dùng công nghệ siêu phân luồng) Trên thực tế, kích hoạt tính siêu phân luồng desktop, giảm tốc độ tới 10% Tuy nhiên người dùng ứng dụng tính tốn phức tạp hưởng lợi nhiều từ kỹ thuật Ngoài kỹ thuật tăng tốc đáng kể cho máy chủ, máy chủ web server ™ Lợi ích siêu phân luồng Intel tạo siêu phân luồng không CPU máy chủ Thực kiến trúc NetBurst P4 Xeon hồn chỉnh với lõi SMT Xét ví dụ trên, ta cho thêm ALU thứ thực hai chuỗi lệnh Với ALU thứ 2, xung đột gặp phải lần lưu trữ cuối Ta biết CPU P4 thiết kế với ba đơn vị số nguyên (hai ALU đơn vị xử lý số nguyên khác chậm cho phép dịch/quay) Quan trọng ALU P4 thực hai vi lệnh xung clock, nghĩa hai dẫn add (phép cộng) dẫn từ hai chuỗi lệnh khác nhau, thực đồng thời xung clock P4/Xeon GV: Phạm Hùng Kim Khánh Trang 37 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU Đơn vị thực thi ALU ALU FPU Load/Store Chu kỳ xung Nhưng điều chưa giải vấn đề, việc tăng thêm đơn vị xử lý để tăng hiệu với kỹ thuật siêu phân luồng lại tốn đứng từ quan điểm vật lý (làm cho CPU có nhiều transistor hơn, tiêu tốn nhiều điện hơn; phải giảm kích thước CPU với cơng nghệ chế tạo mới) Thay vào đó, Intel khuyến khích nhà phát triển tối ưu hoá kỹ thuật siêu phân luồng Chẳng hạn sử dụng lệnh dừng (HALT) xử lý logic tối đa tốc độ cho ứng dụng không sử dụng kỹ thuật siêu phân luồng, CPU lại hoạt động hệ thống CPU Khi ứng dụng sử dụng lợi ích từ siêu phân luồng, xử lý logic thứ hai lại tiếp tục hoạt động Các ghi CPU 8086/8088 có tất 14 ghi nội Các ghi phân loại sau: - Thanh ghi liệu (data register) Thanh ghi số trỏ (index & pointer register) Thanh ghi đoạn (segment register) Thanh ghi trạng thái điều khiển (status & control register) 3.1 Các ghi liệu Các ghi liệu gồm có ghi 16 bit AX, BX, CX DX nửa cao nửa thấp ghi định địa cách độc lập Các nửa ghi (8 bit) có tên AH AL, BH BL, CH CL, DH DL Các ghi sử dụng phép toán số học logic hay trình chuyển liệu Thanh ghi Sử dụng AX MUL, IMUL (tốn hạng nguồn kích thước word) DIV, IDIV (tốn hạng nguồn kích thước word) IN (nhập word) OUT (xuất word) GV: Phạm Hùng Kim Khánh Trang 38 Tài liệu Cấu trúc máy tính& Hợp ngữ AL AH BX CX CL DX Tổ chức CPU CWD Các phép toán xử lý chuỗi (string) MUL, IMUL (toán hạng nguồn kích thước byte) DIV, IDIV (tốn hạng nguồn kích thước byte) IN (nhập byte) OUT (xuất byte) XLAT AAA, AAD, AAM, AAS (các phép toán ASCII) CBW (đổi sang word) DAA, DAS (số thập phân) Các phép toán xử lý chuỗi (string) MUL, IMUL (tốn hạng nguồn kích thước byte) DIV, IDIV (tốn hạng nguồn kích thước byte) CBW (đổi sang word) XLAT LOOP, LOOPE, LOOPNE Các phép toán string với tiếp dầu ngữ REP RCR, RCL, ROR, ROL (quay với số đếm byte) SHR, SAR, SAL (dịch với số đếm byte) MUL, IMUL (tốn hạng nguồn kích thước word) DIV, IDIV (tốn hạng nguồn kích thước word) AX (ACC – Accumulator): ghi tích luỹ BX (Base): ghi sở CX (Count): đếm DX (Data): ghi liệu 3.2 Các ghi số trỏ Bao gồm ghi 16 bit SP, BP, SI DI, thường chứa giá trị offset (độ lệch) cho phần tử định địa phân đoạn (segment) Chúng sử dụng phép toán số học logic Hai ghi trỏ (SP – Stack Pointer BP – Base Pointer) cho phép truy xuất dễ dàng đến phần tử ngăn xếp (stack) hành Các ghi số (SI – Source Index DI – Destination Index) dùng để truy xuất phần tử đoạn liệu doạn thêm (extra segment) Thông thường, ghi trỏ liên hệ đến đoạn stack hành ghi số liên hệ đến doạn liệu hành SI DI dùng phép toán chuỗi 3.3 Các ghi đoạn Bao gồm ghi 16 bit CS (Code segment), DS (Data segment), SS (stack segment) ES (extra segment), dùng để định địa vùng nhớ MB cách chia thành 16 đoạn 64 KB Tất lệnh phải đoạn mã hành, định địa thông qua ghi CS Offset (độ lệch) mã xác định ghi IP Dữ liệu chương trình thường đặt đoạn liệu, định vị thông qua ghi DS Stack GV: Phạm Hùng Kim Khánh Trang 39 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU định vị thông qua ghi SS Thanh ghi đoạn thêm sử dụng để định địa toán hạng, liệu, nhớ phần tử khác đoạn liệu stack hành 3.4 Các ghi điều khiển trạng thái Thanh ghi trỏ lệnh IP (Instruction Pointer) giống đếm chương trình (Program Counter) Thanh ghi điều khiển BIU quản lý nhằm lưu trữ offset từ bắt đầu đoạn mã đến lệnh thực thi xử lý trực tiếp ghi IP Thanh ghi cờ (Flag register) dài 16 bit chứa bit điều khiển (TF, IF DF) bit trạng thái (OF, SF, ZF, AF, PF CF) bit cịn lại khơng sử dụng 15 X 14 X 13 X 12 X 11 10 OF DF IF TF SF ZF X AF X PF X CF - OF (Overflow - tràn): OF = xác định tràn số học, xảy kết vượt phạm vi biểu diễn - DF (Direction- hướng): xác định hướng chuyển chuỗi, DF = CPU làm việc với chuỗi theo thứ tự từ phải sang trái ngược lại - IF (Interrupt - ngắt): cho phép hay cấm ngắt có mặt nạ - TF (Trap - bẫy): đặt CPU vào chế độ bước, dùng cho chương trình gỡ rối (debugger) - SF (Sign - dấu): dùng để kết số học số dương (SF = 0) hay âm (SF = 1) - ZF (Zero): = kết phép toán trước - AF (Auxiliary – nhớ phụ): dùng số thập phân để nhớ từ nửa byte thấp hay mượn từ nửa byte cao - PF (Parity): PF = kết phép toán có tổng số bit chẵn (dùng để kiểm tra lỗi truyền liệu) - CF (Carry): CF = có nhớ hay mượn từ bit cao kết Cờ dùng cho lệnh quay Phân đoạn nhớ Ta biết dù 8086 CPU 16 bit (có bus liệu 16 bit) dùng nhớ theo byte Điều cho phép CPU làm việc với byte word, quan trọng giao tiếp với thiết bị I/O máy in, thiết bị đầu cuối modem (chúng thiết kế để chuyển liệu mã hố ASCII hay bit) Ngồi ra, nhiều mã lệnh 8086/8088 có chiều dài byte nên cần phải truy xuất byte riêng biệt để xử lý lệnh 8086/8088 có bus địa 20 bit nên cho phép truy xuất 220 = 1048576 địa nhớ khác Để thực đọc 16 bit từ nhớ, 8086 thực đọc đồng thời byte có địa lẻ byte có địa chẵn Do đó, 8086 tổ chức nhớ thành bank chẵn lẻ GV: Phạm Hùng Kim Khánh Trang 40 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU Theo hình 2.6, ta thấy word ln bắt đầu địa chẵn ta đọc word có địa lẻ cách thực chu kỳ đọc nhớ: chu kỳ đọc byte thấp chu kỳ đọc byte cao điều làm chậm tốc độ xử lý Đối với 8088 bus liệu bit nên dù word có địa chẵn hay lẻ, cần phải thực chu kỳ đọc hay ghi nhớ giao tiếp với nhớ bank Byte 1048575 Word 524287 Byte 1048574 Byte Word Byte Hình 2.6 – Vùng nhớ 8086/8088 có 1048576 byte hay 524288 word Byte 1048574 Byte 1048575 Byte 1048575 Byte 1048572 Byte 1048573 Byte 1048574 Byte Byte Byte Byte Byte Đọc lần Đọc lần Byte Byte Byte Word liệu 16 bit Hình 2.7 – Đọc word địa chẵn địa lẻ Ngoài nhớ chia thành 16 khối, khối có kích thước 64 KB, bắt đầu địa 00000h kết thúc FFFFFh Địa bắt đầu khối tăng lên số hex có ý nghĩa nhiều thay đổi từ khối sang khối Ví dụ khối 00000h → 10000h → 20000h … GV: Phạm Hùng Kim Khánh Trang 41 Tài liệu Cấu trúc máy tính& Hợp ngữ FFFFFh F0000h Tổ chức CPU FFFFFh Dự trữ FFFFBh Dành riêng FFFF0h 20000h 10000h 0007Fh Dự trữ 00013h Dành riêng 00000h 00000h Hình 2.8 – Bảng nhớ cho 8086/8088 8086/8088 định nghĩa khối nhớ 64KB: đoạn mã (code segment) giữ mã lệnh chương trình, đoạn ngăn xếp (stack segment) lưu địa trả từ chương trình (subroutine) hay trình phục vụ ngắt (interrupt subroutine), đoạn liệu (data segment) lưu trữ liệu cho chương trình đoạn thêm (extra segment) thường dùng cho liệu dùng chung Các ghi đoạn (CS, DS, SS ES) dùng để vị trí đoạn Các ghi có 16 bit địa nhớ 20 bit nên để xác dịnh vị trí nhớ, ta thêm bit vào bit thấp ghi đoạn Giả sử ghi CS chứa giá trị 1111h tới địa 11110h Chú ý địa bắt đầu đoạn tuỳ ý mà phải bắt đầu địa chia hết cho 16 Nghĩa bit thấp phải Ta ý đoạn không tách rời mà chồng lấp lên ta cho giá trị ghi đoạn nghĩa đoạn trùng VD: Thanh ghi DS có giá trị 1000h địa 10000h Địa kết thúc tìm cách cộng địa với giá trị FFFFh (64K) → địa kết thúc 10000h + FFFFh = 1FFFFh Như đoạn liệu có địa từ 10000h ÷ 1FFFFh Các vị trí nhớ khơng định nghĩa đoạn hành truy xuất Muốn truy xuất đến vị trí đó, ta phải định nghĩa lại ghi đoạn sau cho đoạn phải chứa vị trí Như vậy, thời điểm ta truy xuất tối đa × 64 KB = 256 KB nhớ Nội dung ghi đoạn xác định thông qua phần mềm GV: Phạm Hùng Kim Khánh Trang 42 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU VD: Giả sử ghi đoạn có giá trị CS = 2800h, DS = E000h, SS = 2900h ES = 1000h Ta có vị trí đoạn bảng nhớ sau: EFFFFh Đoạn liệu E0000h 38FFFh 37FFFh 29000h 28000h Đoạn stack 29000h ÷ 38FFFh Đoạn mã 28000h ÷ 37FFFh 1FFFFh Đoạn thêm 10000h Hình 2.9 – Vị trí phân đoạn theo giá trị ghi đoạn ™ Địa logic địa vật lý: Các địa đoạn thay đổi từ 0000h ÷ FFFFh, tương ứng với chiều dài đoạn 64 KB Một địa đoạn gọi địa logic hay offset Ví dụ địa logic 0010h đoạn mã hình 2.9 có địa thật 28000h + 0010h = 28010h Địa gọi địa vật lý Địa vật lý địa thật xuất bus địa chỉ, có chiều dài 20 bit cịn địa logic độ lệch (offset) từ vị trí đoạn cho trước VD: Giả sử xét đoạn hình 2.9 Địa vật lý tương ứng với địa logic 1000h đoạn stack là: 29000h + 1000h = 2A000h Địa vật lý tương ứng với địa logic 2000h đoạn mã là: 28000h + 2000h = 2A000h Ta thấy địa vật lý trùng địa logic khác nghĩa địa vật lý có nhiều địa logic khác Để địa logic 1000h đoạn mã, ta dùng ký hiệu CS:1000h Tương tự cho đoạn khác, nghĩa địa logic 1111h đoạn liệu DS:1111h Mọi lệnh tham chiếu nhớ có ghi đoạn Thanh ghi IP cung cấp địa offset truy xuất đến đoạn mã BP cho đoạn stack Ví dụ IP = 1000h CS = 2000h BIU truy xuất đến địa 20000h + 1000h = 21000h nhận byte vị trí GV: Phạm Hùng Kim Khánh Trang 43 Tài liệu Cấu trúc máy tính& Hợp ngữ Tham chiếu nhớ Nhận lệnh Tác vụ stack Dữ liệu tổng quát Nguồn string Đích string BX dùng làm trỏ BP dùng làm trỏ Tổ chức CPU Đoạn CS SS DS DS ES DS SS Đoạn khác Không Không CS,ES,SS CS,ES,SS Không CS,ES,SS CS,ES,SS Offset IP SP Địa hiệu dụng SI DI Địa hiệu dụng Địa hiệu dụng VD: Ta sử dụng lệnh MOV [BP],AL với BP = 2C00h Ở BP dùng làm trỏ nên dùng đoạn stack Giả sử phân đoạn hình 2.9 địa vật lý 29000h + 2C00h = 2BC00h Cách mã hoá lệnh Lệnh CPU biểu diễn ký tự dạng gợi nhớ (mnemonic) để dễ dàng sử dụng Đối với CPU lệnh biểu diễn mã lệnh (opcode) nên sau nhận lệnh CPU phải thực giải mã lệnh thực thi Một lệnh CPU dài byte hay nhiều byte Nếu ta dùng byte để mã hố mã hố 256 lệnh khác Tuy nhiên lệnh khơng phải có cách thực nên ta khơng thể thực đơn giản Để tìm hiểu cách mã hoá lệnh, ta xét lệnh MOV des,src dùng để chuyển liệu hai ghi hay ô nhớ ghi Lệnh MOV mã hoá sau: Byte 1 0 Byte Byte Byte Opcode D W Mod reg M/R Để mã hóa lệnh MOV, ta cần dùng byte bit dùng cho mã lệnh Bit D xác định hướng truyền liệu, D = xác định liệu từ ghi cho bit Reg, D = xác định liệu đến ghi cho bit Reg Bit W xác định truyền byte (W = 0) hay word (W = 1) bit Reg dùng để chọn ghi sử dụng: Mã 000 001 010 011 100 101 110 111 GV: Phạm Hùng Kim Khánh Thanh ghi W=1 W=0 AX AL CX CL DX DL BX BL SP AH BP CH SI DH DI BH Trang 44 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU bit mod bit R/M (Register / Memory) dùng để xác định chế độ địa cho toán hạng lệnh MOD R/M 000 001 010 011 100 101 110 111 00 01 10 [BX]+[SI] [BX]+[DI] [BP]+[SI] [BP]+[DI] [SI] [DI] addr16 [BX] [BX]+[SI]+addr8 [BX]+[DI]+addr8 [BP]+[SI] +addr8 [BP]+[DI] +addr8 [SI] +addr8 [DI] +addr8 [BP] +addr8 [BX] +addr8 [BX]+[SI]+addr16 [BX]+[DI]+addr16 [BP]+[SI] +addr16 [BP]+[DI] +addr16 [SI] +addr16 [DI] +addr16 [BP] +addr16 [BX] +addr16 W=1 AX CX DX BX SP BP SI DI 11 W=0 AL CL DL BL AH CH DH BH Tổng quát, 8086/8088 có khoảng 300 tác vụ có tập lệnh Mỗi lệnh kéo dài từ đến byte Từ ví dụ trên, ta thấy mã lệnh có vùng: - Vùng mã lệnh (opcode): chứa mã lệnh lệnh thực thi - Vùng ghi (reg): chứa ghi thực - Vùng chế độ (mod) - Vùng ghi / nhớ R/M (Reg/Mem) Các cách định địa Cách định địa Tức thời Mã đối tượng B80010 Từ gợi nhớ MOV AX,1000h Thanh ghi 8BD1 MOV DX,CX Trực tiếp 8A260010 MOV AH,[1000h] Gián tiếp 8B04 ghi FF25 FE4600 FF0F MOV AX,[SI] JMP [DI] INC BYTE PTR [BP] DEC WORD PTR [BX] Có số MOV AX,[SI+6] JMP [DI+6] MOV AX,[BP+2] JMP [BP+2] MOV AX,[BX+SI] JMP [BX+DI] INC BYTE PTR [BP+SI] 8B4406 FF6506 Có 8B4602 FF6702 Có 8B00 có số FF21 FE02 FF0B DEC WORD PTR [BP+DI] GV: Phạm Hùng Kim Khánh Ví dụ Đoạn Hoạt động truy xuất Mã AH ← 10h AL ← 00h Trong µP DX ← CX Dữ AH ← [1000h] liệu Dữ liệu AL ← [SI]; AH ←[SI+1] Dữ liệu IP←[DI+1:DI] Stack [BP]←[BP]+1 Dữ liệu [BX+1:BX]← [BX+1:BX]-1 Dữ liệu AL ← [SI+6]; AH ←[SI+7] Dữ liệu IP←[DI+7:DI+6] Stack AL←[BP+2]; AH ←[BP+3] Dữ liệu IP←[BX+3:BX+6] AL←[BX+SI];AH←[BX+SI+1] Dữ liệu IP←[BX+DI+1:BX+DI] Dữ liệu Stack [BP+SI]←[BP+SI]+1 Stack [BP+DI+1:BP+DI]← [BP+DI+1:BP+DI]-1 Mô tả (1) (2) (3) (4) (5) (6) (7) Trang 45 Tài liệu Cấu trúc máy tính& Hợp ngữ Có 8B4005 có số FF6105 với độ dời FE4205 FF4B05 String A4 - MOV AX,[BX+SI+5] Tổ chức CPU Dữ liệu JMP [BX+DI+5] Dữ liệu INC BYTE PTR [BP+SI+5] Stack DEC WORD PTR [BP+DI+5] Stack MOVSB Thêm, liệu AL←[BX+SI+5] AH←[BX+SI+1] IP←[BX+DI+6:BX+DI+5] [BP+SI+5]←[BP+SI+5]+1 [BP+DI+6:BP+DI+5]← [BP+DI+6:BP+DI+5]-1 [ES:DI] ← [DS:DI] Nếu DF = SI ← SI + 1; DI ← DI + Nếu DF = SI ← SI - 1; DI ← DI - (8) (9) BYTE PTR WORD PTR tránh lầm truy xuất byte word Độ dời cộng vào ghi trỏ hay số nhị phân dạng bù (1): nguồn liệu lệnh (2): đích nguồn ghi µP (3): địa nhớ cung cấp lệnh (4): địa nhớ cung cấp ghi trỏ hay số (5): địa nhớ tổng ghi số cộng với độ dời lệnh (6): địa nhớ tổng ghi BX hay BP cộng với độ dời lệnh (7): địa nhớ tổng ghi số ghi (8): địa nhớ tổng ghi số, ghi độ dời lệnh (9): địa nguồn nhớ ghi SI đoạn liệu địa đích nhớ ghi DI đoạn thêm 6.1 Định địa tức thời Các lệnh dùng cách định địa tức thời lấy liệu lệnh làm phần lệnh Trong cách này, liệu chứa đoạn mã thay đoạn liệu Dữ liệu cho lệnh MOV AX,1000h cung cấp tức thời sau mã lệnh B8 Chú ý mã đối tượng byte liệu cao sau byte liệu thấp Cách định địa tức thời thường dùng để nạp ghi hay vị trí nhớ với liệu ban đầu Sau đó, lệnh làm việc với liệu Tuy nhiên, cách định địa không sử dụng cho ghi đoạn 6.2 Định địa ghi Một số lệnh làm công việc chuyển liệu ghi CPU Ví dụ MOV DX,CX chuyển liệu từ ghi CX vào ghi DX Ở ta không cần thực tham chiếu nhớ Ta kết hợp cách định địa tức thời định địa ghi để nạp liệu cho ghi đoạn 6.3 Định địa trực tiếp Ngoài cách định địa trên, tất cách định địa lại cần phải truy xuất đến nhớ với toán hạng Trong cách định địa trực tiếp, địa nhớ cung cấp trực tiếp phần lệnh Ví dụ lệnh MOV GV: Phạm Hùng Kim Khánh Trang 46 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU AH,[1000h] đưa nội dung chứa ô nhớ DS:1000h vào ghi AH hay lệnh MOV [2000h],AX đưa nội dung chứa AX vào ô nhớ liên tiếp DS:2000h DS:2001h 6.4 Định địa truy xuất nhớ gián tiếp Các cách định địa trực tiếp thuận lợi cho truy xuất nhớ không thường xuyên Tuy nhiên, ô nhớ cần phải truy xuất nhiều lần chương trình trình nhận địa (2 byte) phải thực nhiều lần Điều không hiệu Để giải vấn đề này, ta thực lưu trữ địa ô nhớ cần truy xuất ghi trỏ, số hay ghi sở (BX, BP, SI hay DI) Ngồi ra, ta sử dụng độ dời bù cách cộng vào ghi để dời so với vị trí ghi đến Cách định địa Gián tiếp ghi Có số Có Có số Có số với độ dời Địa hiệu dụng (EA – Effective Address) Độ dời Thanh ghi Thanh ghi số Không BX hay BP Không Không Không SI hay DI Không SI hay DI -128 ÷ 127 BX hay BP Khơng -128 ÷ 127 BX hay BP SI hay DI Không BX hay BP SI hay DI -128 ÷ 127 Như vậy, độ dời cộng vào ghi kết cộng tiếp vào ghi số Địa thu gọi địa hiệu dụng EA Ngồi ta viết cách định địa gián tiếp sau: MOV AX,table[SI] Trong table nhãn gán cho vị trí nhớ Lệnh truy xuất phần tử thứ SI dãy table (giả sử SI = truy xuất phần tử thứ 2) Chú ý đoạn mặc định cho cách định địa gián tiếp đoạn stack dùng BP, đoạn liệu dùng BX, SI hay DI VD: Lệnh: MOV AH,10h thực định địa tức thời MOV AX,[BP + 10] thực định địa có MOV AH,[BP + SI] thực định địa có có số 6.5 Định địa chuỗi Chuỗi dãy liên tục byte hay word lưu trữ nhớ dạng ký tự ASCII 8086/8088 có lệnh dùng để xử lý chuỗi, lệnh sử dụng cặp ghi DS:SI để nguồn chuỗi ký tự ES:DI để đích chuỗi Lệnh MOVSB chuyển byte liệu nguồn đến vị trí đích SI DI tăng hay giảm tuỳ theo giá trị DF GV: Phạm Hùng Kim Khánh Trang 47 ... 64 KB = 25 6 KB nhớ Nội dung ghi đoạn xác định thơng qua phần mềm GV: Phạm Hùng Kim Khánh Trang 42 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU VD: Giả sử ghi đoạn có giá trị CS = 28 00h, DS... Trang 46 Tài liệu Cấu trúc máy tính& Hợp ngữ Tổ chức CPU AH,[1000h] đưa nội dung chứa ô nhớ DS:1000h vào ghi AH hay lệnh MOV [20 00h],AX đưa nội dung chứa AX vào ô nhớ liên tiếp DS :20 00h DS :20 01h... dụ khối 00000h → 10000h → 20 000h … GV: Phạm Hùng Kim Khánh Trang 41 Tài liệu Cấu trúc máy tính& Hợp ngữ FFFFFh F0000h Tổ chức CPU FFFFFh Dự trữ FFFFBh Dành riêng FFFF0h 20 000h 10000h 0007Fh Dự

Ngày đăng: 08/05/2021, 16:38

w