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)  
???  
If (n>0)  
{
n=-1;  
}
OK  
{
n=-1;  
}
• 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  
Laguage  
Interpreter  
(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)  
Interpreter  
Highest-level  
language  
Lower-level  
language  
Lower-level  
language  
Machine  
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  
str:  
# data segment  
# text segment  
.asciiz ”hello MIPS”  
.text  
.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  
language  
Assembly  
language  
Machine  
Laguage  
Assembler  
Compiler  
temp = v[k];  
v[k] = v[k+1];  
v[k+1] = temp;  
lw $t0, 0($2)  
lw $t1, 4($2)  
sw $t1, 0($2)  
sw $t0, 4($2)  
0000 1001 1100 0110  
1111 0101  
…..  
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.  
Tải về để xem bản đầy đủ
pdf 22 trang yennguyen 17120 Free
Bạn đang xem 20 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

File đính kèm:

  • pdfbai_giang_kien_truc_may_tinh_bai_gioi_thieu_hop_ngu.pdf