Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ

Là loại ngôn ngữ nhân tạo (Ví dụ: C/C++) được cấu thành bởi 2

yếu tố chính:

– Từ vựng: là các 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 nó (gọi là lập trình

viên) có thể diễn đạt và mô tả các hướng dẫn cho máy tính hoạt

động theo ý muốn của mình

• Độ phức tạp (trừu tượng) của các hướng dẫn này quyết định thứ

bậc của ngôn ngữ

– Độ phức tạp càng cao thì bậc càng thấp

– Ví dụ: C Sharp (C#) là ngôn ngữ bậc cao hơn C

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 1

Trang 1

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 2

Trang 2

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 3

Trang 3

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 4

Trang 4

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 5

Trang 5

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 6

Trang 6

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 7

Trang 7

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 8

Trang 8

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 9

Trang 9

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 22 trang xuanhieu 3740
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ

Bài giảng Kiến trúc máy tính - Chương: Giới thiệu hợp ngữ
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 cấu thành bởi 2 
 yếu tố chính: 
 – Từ vựng: là các 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 nó (gọi là lập trình 
 viên) có thể diễn đạt và mô tả các hướng dẫn cho máy tính hoạt 
 động theo ý muốn của mình 
• Độ phức tạp (trừu tượng) của các hướng dẫn này quyết định thứ 
 bậc của ngôn ngữ 
 – Độ phức tạp càng cao thì bậc càng thấp 
 – Ví dụ: C Sharp (C#) là ngôn ngữ bậc cao hơn C 
 2 
 • Ngôn ngữ nào mà con người dễ hiểu nhất lại là ngôn ngữ 
 máy tính “khó hiểu” nhất 
 – Ngôn ngữ bậc càng cao thì con người càng dễ hiểu nhưng máy 
 tính lại càng “khó hiểu” 
 • Nhưng máy tính lại là nơi chúng ta cần nó hiểu đúng và 
 nhanh nhất để có thể thực thi những gì chúng ta muốn 
 Ngôn ngữ máy (Machine language) 
If (n>0) OK ??? If (n>0) 
{ { 
 n=-1; n=-1; 
} } 3 
• Ngôn ngữ máy cho phép người lập trình đưa ra các hướng 
 dẫn đơn giản mà bộ vi xử lý (CPU) có thể thực hiện được 
 ngay 
• Các hướng dẫn này được gọi là chỉ thị / lệnh (instruction) 
 hoặc mã máy (machine code) 
• Mỗi bộ vi xử lý (CPU) có 1 ngôn ngữ riêng, gọi là bộ lệnh 
 (instruction set) 
• Trong cùng 1 dòng vi xử lý (processor family) bộ lệnh gần 
 giống nhau 
 Instruction set 
 4 
• Không phải ai cũng muốn / có thể lập trình ngôn ngữ 
 máy vì quá khó hiểu so với ngôn ngữ bình thường của 
 con người 
 Nhu cầu cần có bộ phận phiên dịch (interpreter) 
 High-level 
 Machine 
 language 
 Interpreter Laguage 
 (C/C++) 
 OK OK 
 5 
• Trong 1 số trường hợp, việc viết bằng ngôn ngữ 
 cấp “quá cao” trở nên chạy khá chậm vì 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 Lower-level Lower-level Interpreter Machine 
 language language language Laguage 
 6 
• Các mã máy chỉ là các con số (0 / 1) 
• Trong ngôn ngữ máy không có khái niệm biến thay vào đó là địa 
 chỉ ô nhớ, thanh ghi (lưu trữ mã lệnh, dữ liệu) 
• Để dễ dàng lập trình hơn dùng ký hiệu mã giả thay cho các số 
 biểu diễn địa chỉ ô nhớ, các tên (label, tên biến, tên chương trình) 
• Hợp ngữ rất gần với ngôn ngữ máy nhưng lại đủ để con người hiểu 
 và sử dụng tốt hơn ngôn ngữ máy 
 – Ví dụ: Ghi giá trị 5 vào thanh ghi $4 
 Ngôn ngữ máy: 00110100 0000100 00000000 00000101 
 Hợp ngữ : ori $4, $0, 5 
 7 
• Vì mỗi bộ vi xử lý có 1 cấu trúc thanh ghi và 
 tập lệnh (ngôn ngữ) riêng nên khi lập trình 
 hợp ngữ phải nói rõ là lập trình cho bộ vi xử 
 lý nào, hay dòng (family) vi xử lý nào 
 – Ví dụ: 
 • Hợp ngữ cho MIPS 
 • Hợp ngữ cho dòng vi xử lý Intel 80x86 
 8 
.data # data segment 
 str: 
 .asciiz ”hello MIPS” 
.text # text segment 
 .globl main 
 main: 
 addi $v0, $0, 4 # 4 = print str syscall 
 la $a0, str # load address of string 
 syscall # execute the system call 
 9 
global _WinMain@16 
extern _MessageBoxA@16 
[section .data] 
 title db "Message",0 
 message db "Hello asm!",0 
[section .code] 
_WinMain@16: 
 push 0 
 push title 
 push message 
 push 0 
 call _MessageBoxA@16 
 ret 16 10 
 • Ta có thể hình dung như sau: 
 What is it? What is it? 
 High-level Assembly Machine 
 language Compiler language Assembler Laguage 
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 được biên dịch 
 – Kiến trúc hệ thống phần cứng bên dưới mà nó đang 
 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 bộ vi xử lý (đi kèm 1 bộ lệnh xác định) có thể có 
 nhiều Assembler của nhiều nhà cung cấp khác nhau 
 chạy trên các OS khác nhau 
 – Ví dụ: Cùng là kiến trúc x86, nhưng có thể dùng A86, 
 GAS, TASM, MASM, NASM 
• Assembly program phụ thuộc vào Assembler mà nó 
 sử dụng (do các mở rộng, đặc điểm khác nhau giữa 
 các Assembler) 
 13 
14 
• Bản thân Compiler cũng là chương trình, vậy nó được 
 biên dịch bằng gì? 
 Assembler 
• Sau khi đã 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), làm 
 sao để chạy những tập tin này trên máy tính? 
 Linker & Loader 
 15 
• Thực tế khi lập trình, ta sẽ dùng nhiều file 
 (header / source) liên kết và kèm theo các 
 thư viện có sẵn 
 Cần chương trình Linker để liên kết các file 
 sau khi đã biên dịch thành mã máy này 
 (Object file) 
 Tập tin thực thi (ví dụ: .exe, .bat, .sh) 
 16 
• Khi double click vào những tập tin thực thi, cần chương 
 trình tính toán và tải vào memory để CPU xử lý 
 Loader 
 17 
18 
19 
• Để biểu diễn ký tự thuận tiện và thống nhất, mã ASCII được 
 xem là mã chuẩn để hiển thị ký tự lên màn hình máy tính. 
 20 
• .COM 
 o Chỉ có duy nhất một đoạn. Mã lệnh (code), dữ liệu 
 (data) và bộ nhớ stack đều dùng chung một đoạn. 
 o Kích thước tối đa của tập tin là 64 KB. 
 o File .COM nạp và thực hiện nhanh hơn tập tin 
 dạng.EXE, nhưng nó chỉ áp dụng cho các chương trình 
 nhỏ, chỉ có thể gọi các chương trình con dạng gần, 
 muốn xây dựng các chương trình lớn ta phải viết dưới 
 dạng .EXE 
 21 
• .EXE 
 o Chương trình có thể được khai báo nhiều đoạn khác nhau. 
 Mỗi chương trình có thể có nhiều đoạn chương trình, nhiều 
 đoạn dữ liệu. 
 o File .EXE dùng để xây dựng các chương trình lớn có kích 
 thước lớn hơn 64 KB. 
 o File .EXE có một header ở đầu. Header này chứa các thông 
 tin điều khiển về tập tin để DOS có thể nạp nó vào bộ nhớ 
 và thực hiện. 
 22 

File đính kèm:

  • pdfbai_giang_kien_truc_may_tinh_chuong_gioi_thieu_hop_ngu.pdf