Bài giảng Kiến trúc máy tính - Giới thiệu hợp ngữ cung cấp cho người học các kiến thức: Ngôn ngữ lập trình, ngôn ngữ máy, hợp ngữ, compiler, mô hình phân tầng các ngôn ngữ trên máy tính, quá trình thực thi file trên máy tính,... Mời các bạn cùng tham khảo.
Mơn học: Kiến trúc máy tí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 • 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 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 • 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 • 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 • Các mã máy số (0 / 1) • Trong ngơn ngữ máy khơng có 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, • 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 ngữ phải nói rõ lập trình cho vi xử lý nào, hay dòng (family) vi xử lý – Ví dụ: • Hợp ngữ cho MIPS • Hợp ngữ cho dòng vi xử lý Intel 80x86 .data # data segment str: asciiz ”hello MIPS” text # text segment globl main main: addi $v0, $0, # = print str syscall la $a0, str # load address of string syscall # execute the system call global _WinMain@16 extern _MessageBoxA@16 [section data] title db "Message",0 message db "Hello asm!",0 [section code] _WinMain@16: push push title push message push call _MessageBoxA@16 ret 16 10 • Ta hình dung sau: High-level language What is it? Compiler Assembly language What is it? Machine Laguage Assembler temp = v[k]; lw $t0, 0($2) 0000 1001 1100 0110 v[k] = v[k+1]; lw $t1, 4($2) 1111 0101 v[k+1] = temp; sw $t1, 0($2) … sw $t0, 4($2) 11 • Trình biên dịch ngơn ngữ cấp cao hợp ngữ • Compiler phụ thuộc vào: – Ngơn ngữ cấp cao biên dịch – Kiến 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” 12 • 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) 13 14 • 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 15 • 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) 16 • 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 17 18 19 • Để biểu diễn ký tự thuận tiện thống nhất, mã ASCII xem mã chuẩn để hiển thị ký tự lên hình máy tính 20 • COM o Chỉ có đoạn Mã lệnh (code), liệu (data) nhớ stack dùng chung đoạn o Kích thước tối đa tập tin 64 KB o File COM nạp thực nhanh tập tin dạng.EXE, áp dụng cho chương trình nhỏ, gọi chương trình dạng gần, muốn xây dựng chương trình lớn ta phải viết dạng EXE 21 • EXE o Chương trình khai báo nhiều đoạn khác Mỗi chương trình có nhiều đoạn chương trình, nhiều đoạn liệu o File EXE dùng để xây dựng chương trình lớn có kích thước lớn 64 KB o File EXE có header đầu Header chứa thông tin điều khiển tập tin để DOS nạp vào nhớ thực 22 ... 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 ;... 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,... 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