Bài giảng Kiến trúc máy tính và hợp ngữ - Chương 4: Lập trình hợp ngữ (Phần 1). Nội dung trình bày trong chương này gồm có: Ngôn ngữ lập trình, ngôn ngữ máy (Machine Laguage), instruction, ISA (Instruction Set Architecture), thiết kế ISA, hợp ngữ,... Mời các bạn cùng tham khảo.
KIẾN TRÚC MÁY TÍNH & HỢP NGỮ ThS Vũ Minh Trí – vmtri@fit.hcmus.edu.vn 04 – Lập trình hợp ngữ (Phần 1) Ngơn ngữ lập trình Là loại ngơn ngữ nhân tạo (Ví dụ: C/C++) cấu thành yếu tố chính: Từ vựng: keyword (struct, enum, if, int…) Ngữ pháp: syntax (if(…){} else{}, do{} while()…) Ngơn ngữ lập trình giúp cho người sử dụng (gọi lập trình viên) diễn đạt mô tả hướng dẫn cho máy tính hoạt động theo ý muốn Độ phức tạp (trừu tượng) hướng dẫn định thứ bậc ngôn ngữ Độ phức tạp cao bậc thấp Ví dụ: C Sharp (C#) ngôn ngữ bậc cao C Nhận xét Ngôn ngữ mà người dễ hiểu lại ngơn ngữ máy tính “khó hiểu” Ngơn ngữ bậc cao người dễ hiểu máy tính lại “khó hiểu” Nhưng máy tính lại nơi cần hiểu nhanh để thực thi muốn Ngơn ngữ máy (Machine language) If (n>0) { n=-1; } OK ??? If (n>0) { n=-1; } Ngôn ngữ máy (Machine Laguage) Ngơn ngữ máy cho phép người lập trình đưa hướng dẫn đơn giản mà vi xử lý (CPU) thực Các hướng dẫn gọi thị / lệnh (instruction) mã máy (machine code) Mỗi vi xử lý (CPU) có ngơn ngữ riêng, gọi lệnh (instruction set) Trong dòng vi xử lý (processor family) lệnh gần giống Instruction set Instruction Là dãy bit chứa yêu cầu mà xử lý CPU (ALU) phải thực Instruction gồm thành phần: Mã lệnh (opcode): thao tác cần thực Thơng tin tốn hạng (operand): đối tượng bị tác động thao tác chứa mã lệnh ISA (Instruction Set Architecture) Tập lệnh dành cho vi xử lý có kiến trúc tương tự Một số ISA thơng dụng: Dịng vi xử lý 80x86 (gọi tắt x86) Intel IA-16: Dòng xử lý 16 bit (Intel 8086, 80186, 80286) IA-32: Dòng xử lý 32 bit (Intel 80368 – i386, 80486 – i486, Pentium II, Pentium III …) IA-64: Dòng xử lý 64 bit (Intel x86-64 Pentium D…) MIPS: Dùng nhiều hệ thống nhúng (embedded system) PowerPC IBM Thiết kế ISA: CISC & RISC Có trường phái thiết kế lệnh: Complete Instruction Set Computer (CISC): lệnh gồm nhiều lệnh, từ đơn giản đến phức tạp Reduced Instruction Set Computer (RISC): lệnh gồm lệnh đơn giản Nên chọn kiểu nào? Tuy nhiên Không phải muốn / lập trình ngơn ngữ máy q khó hiểu so với ngơn ngữ bình thường người Nhu cầu cần có phận phiên dịch (interpreter) High-level language (C/C++) OK Interpreter Machine Laguage OK Nhận xét Trong số trường hợp, việc viết ngôn ngữ cấp “quá cao” trở nên chạy chậm phải phiên dịch nhiều lần để trở thành ngôn ngữ máy Hợp ngữ (Assembly language) Highest-level language Lower-level language Lower-level language Interpreter Machine Laguage Hợp ngữ 10 Các mã máy số (0 / 1) Trong ngôn ngữ máy khái niệm biến thay vào địa ô nhớ, ghi (lưu trữ mã lệnh, liệu) Để dễ dàng lập trình dùng ký hiệu mã giả thay cho số biểu diễn địa ô nhớ, tên (label, tên biến, tên chương trình) Hợp ngữ gần với ngơn ngữ máy lại đủ để người hiểu sử dụng tốt ngơn ngữ máy Ví dụ: Ghi giá trị vào ghi $4 Ngôn ngữ máy: 00110100 0000100 00000000 00000101 Hợp ngữ : ori $4, $0, Compiler 13 Trình biên dịch ngơn ngữ cấp cao hợp ngữ Compiler phụ thuộc vào: Ngôn Kiến ngữ cấp cao biên dịch trúc hệ thống phần cứng bên mà chạy Ví dụ: Compiler cho C Compiler cho Java Compiler cho “C on Windows” “C on Linux” Assembler 14 Trình biên dịch hợp ngữ ngôn ngữ máy Một vi xử lý (đi kèm lệnh xác định) có nhiều Assembler nhiều nhà cung cấp khác chạy OS khác Ví dụ: Cùng kiến trúc x86, dùng A86, GAS, TASM, MASM, NASM Assembly program phụ thuộc vào Assembler mà sử dụng (do mở rộng, đặc điểm khác Assembler) Thảo luận 15 Bản thân Compiler chương trình, biên dịch gì? Assembler Sau biên dịch tập tin mã nguồn ngôn ngữ cấp cao thành tập tin mã máy (machine language), để chạy tập tin máy tính? Linker & Loader Linker 16 Thực tế lập trình, ta dùng nhiều file (header / source) liên kết kèm theo thư viện có sẵn Cần chương trình Linker để liên kết file sau biên dịch thành mã máy (Object file) Tập tin thực thi (ví dụ: exe, bat, sh) Q trình tạo file thực thi 17 Khi double click vào tập tin thực thi, cần chương trình tính tốn tải vào memory để CPU xử lý Loader Quá trình thực thi file máy 18 Ví dụ 19 Mơ hình thực tế 20 Compiler Assembler bỏ qua số trường hợp cụ thể… Trong thực tế, có số compiler tạo file thực thi nhiều tảng kiến trúc bên khác nhau, gọi cross-platform compiler Compiler cho Java Cygwin Code::Block Studio Quá trình thực thi file máy Java program 21 Hoạt động CPU xử lý lệnh 22 CPU xử lý lệnh qua bước, gọi chu kỳ lệnh: Nạp lệnh (Fetch): Di chuyển lệnh từ memory vào ghi (register) CPU Thực thi lệnh (Excute): Giải mã lệnh thực thi thao tác yêu cầu Start Fetch next Instruction Execute Instruction Halt Quá trình nạp lệnh (Fetch cycle) 23 MAR PC MBR Memory IR MBR PC PC + Thanh ghi PC (Program Counter) Thanh ghi MAR (Memory Address Register) Lưu địa (address) output Address bus Thanh ghi IR (Instruction Register) • Control Unit di chuyển mã lệnh, có địa PC, vào ghi IR • Mặc định, giá trị ghi PC tăng lượng = chiều dài lệnh Lưu giá trị (value) input / output từ Data bus vừa nạp Thanh ghi MBR (Memory Buffer Register) Lưu địa (address) lệnh nạp Lưu mã lệnh xử lý tiếp Ví dụ 24 Chương trình x=x+y … CPU PC 00010011 R1 00010000 01000000 00000001 IR ALU CPU RAM … 00010000 01000000 00000001 00001100 01000010 00000001 00010000 00000001 01000000 … x y … Địa Lệnh (Instruction) 00010000 00010011 00010110 … 01000000 01000010 x R1 R1+y R1 R1 x … … Quy trình thực thi lệnh (Execute Cycle) 25 • Tính địa lệnh • Nạp lệnh • Giải mã lệnh • Tính địa tốn hạng • Nạp tốn hạng • Thực lệnh • Tính địa toán hạng chứa kết Các bước lặp lặp lại cho tất lệnh Quy trình gọi Instruction cycle – vịng lặp xử lý lệnh • Ghi kết Một số câu hỏi 26 Ngơn ngữ lập trình giống khác ngôn ngữ tự nhiên người điểm nào? Tại cần nhiều loại ngơn ngữ lập trình: C, C++, C#, VB, Java…? Một chương trình khơng khai báo biến có sử dụng nhớ khơng? Chương trình thực thi RAM hay CPU? Tại file exe chạy Windows mà chạy Linux? Homework 27 Sách Petterson & Hennessy: Đọc chương (đọc kỹ 2.12 2.13) Tài liệu tham khảo: Đọc “08_HP_AppA.pdf” ... ngơn ngữ máy tính “khó hiểu” Ngơn ngữ bậc cao người dễ hiểu máy tính lại “khó hiểu” Nhưng máy tính lại nơi cần hiểu nhanh để thực thi muốn Ngơn ngữ máy (Machine language) If (n>0) { n =-1 ; }... ngôn ngữ máy Hợp ngữ (Assembly language) Highest-level language Lower-level language Lower-level language Interpreter Machine Laguage Hợp ngữ 10 Các mã máy số (0 / 1) Trong ngơn ngữ máy khơng... ngữ máy Ví dụ: Ghi giá trị vào ghi $4 Ngôn ngữ máy: 00110100 0000100 00000000 00000101 Hợp ngữ : ori $4, $0, Lưu ý 11 Vì vi xử lý có cấu trúc ghi tập lệnh (ngơn ngữ) riêng nên lập trình hợp