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  
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ậ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  
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ểunhấ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 nơi chúng ta cần hiểu đúng và  
nhanh nhất để 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 bộ vi xử lý (CPU) có thể thực hiện được  
ngay  
Các hướng dẫn này được gọi 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 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 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 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 đó địa  
chỉ ô nhớ, thanh ghi (lưu trữ lệnh, dữ liệu)  
Để dễ dàng lập trình hơn dùng ký hiệu 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  
sử dụng tốt hơn ngôn ngữ máy  
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
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  
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  
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  
dụ: Cùng là kiến trúc x86, nhưng 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 chương trình, vậy đượ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 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 tự thuận tiện thống nhất, mã ASCII được  
xem là mã chuẩn để hiển thị tự lên màn hình máy tính.  
Tải về để xem bản đầy đủ
pdf 22 trang yennguyen 09/04/2022 4120
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