Kiến trúc máy tính và hợp ngữ – Tài liệu text
Kiến trúc máy tính và hợp ngữ
Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (509.94 KB, 27 trang )
Bạn đang đọc: Kiến trúc máy tính và hợp ngữ – Tài liệu text
KIẾN TRÚC MÁY TÍNH &
HỢP NGỮ
04 – Lập trình hợp ngữ (Phần 1)
Ngôn ngữ lập trình
2
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
Nhận xét
3
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)
OK
???
If (n>0)
{
n=-1;
}If (n>0)
{
n=-1;
}
Ngôn ngữ máy (Machine Laguage)
4
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
Instruction
5
Là dãy bit chứa yêu cầu mà bộ xử lý trong
CPU (ALU) phải thực hiện
Instruction gồm 2 thành phần:
Mã lệnh: thao tác cần thực hiện
Thông tin về toán hạng: các đối tượng bị tác
động bởi thao tác chứa trong mã lệnh
ISA (Instruction Set Architecture)
6
Tập lệnh dành cho những bộ vi xử lý có kiến trúc tương tự
nhau
Một số ISA thông dụng: Dòng vi xử lý 80×86 (gọi tắt x86) của 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 như Pentium D…)
MIPS: Dùng rất nhiều trong hệ thống nhúng (embedded system)
PowerPC của IBM
Thiết kế ISA: CISC & RISC
7
Có 2 trường phái thiết kế bộ lệnh:
Complete Instruction Set Computer (CISC): bộ lệnh
gồm rất nhiều lệnh, từ đơn giản đến phức tạp
Reduced Instruction Set Computer (RISC): bộ lệnh chỉ
gồm các lệnh đơn giản
Nên chọn kiểu nào?
Tuy nhiên
8
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
language
(C/C++)
Machine
Laguage
Interpreter
OK
OK
Nhận xét9
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
language
Machine
Laguage
Interpreter
Lower-level
language
Lower-level
language
Hợp ngữ
10
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à ô
nhớ, thanh ghi
Để dễ dàng lập trình hơn dùng ký hiệu mã giả thay cho các số,
các tên gọi thay cho địa chỉ ô 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
Lưu ý
11
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ìnhhợ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 80×86
Thảo luận
12
Ta có thể hình dung như sau:
High-level
language
Machine
Laguage
What is it?
Assembly
language
What is it?
Compiler
Assembler
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
…
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 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 <> Comiler 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 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)
Thảo luận
15
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
Linker16
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)
Quá trình tạo file thực thi
17
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
Quá trình thực thi file trên máy
18
Ví dụ
19
Mô hình thực tế
20
Compiler và Assembler có thể được bỏ qua trong 1 số trường hợp cụ thể…
Trong thực tế, có 1 số compiler có thể tạo file thực thi ở nhiều nền tảng
kiến trúc bên dưới khác nhau, được gọi là cross-platform compiler
Compiler cho Java
Cygwin
Code::Block Studio
Quá trình thực thi file trên máy
Java program
21
Hoạt động của CPU khi xử lý lệnh22
CPU xử lý lệnh qua 2 bước, gọi là chu kỳ lệnh:
Nạp lệnh (Fetch): Di chuyển lệnh từ memory vào thanh ghi
(register) trong CPU
Thực thi lệnh (Excute): Giải mã lệnh và 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 + 1
Thanh ghi PC (Program Counter)
Lưu địa chỉ (address) của lệnh sắp được nạp
Thanh ghi MAR (Memory Address Register)
Lưu địa chỉ (address) sẽ được output ra Address bus
Thanh ghi MBR (Memory Buffer Register)
Lưu giá trị (value) sẽ được input / output từ Data bus
Thanh ghi IR (Instruction Register)
Lưu mã lệnh sẽ được xử lý tiếp
• Control Unit di chuyển mã lệnh có
địa chỉ trong IC vào thanh ghi IR
• Mặc định, giá trị thanh ghi PC sẽ
tăng 1 lượng = chiều dài của lệnh
vừa được nạpVí dụ
24
x = x + y
…
…
00010000 01000000 00000001
00001100 01000010 00000001
00010000 00000001 01000000
…
x
y
…
PC R1
IR
CPU
00010011
00010000 01000000 00000001
ALU
Địa chỉ Lệnh (Instruction)
00010000 x R1
00010011 R1+y R1
00010110 R1 x
….
01000000 ….
01000010 ….
Chương trình
RAM
CPU
Quy trình thực thi lệnh (Execute Cycle)
25
Các bước này được lặp đi lặp lại cho tất cả các lệnh tiếp theo
Quy trình này gọi là Instruction cycle – vòng lặp xử lý lệnh
• Tính địa chỉ lệnh
• Nạp lệnh
• Giải mã lệnh
• Tính địa chỉ của
toán hạng
• Nạp toán hạng
• Thực hiện lệnh
• Tính địa chỉ của
toán hạng chứa kết
quả
• Ghi kết quả
If ( n > 0 ) n = – 1 ; Ngôn ngữ máy ( Machine Laguage ) Ngôn ngữ máy được cho phép người lập trình đưa ra những hướngdẫn đơn thuần mà bộ vi giải quyết và xử lý ( CPU ) hoàn toàn có thể thực thi đượcngay Các hướng dẫn này được gọi là thông tư / lệnh ( instruction ) hoặc mã máy ( machine code ) Mỗi bộ vi giải quyết và xử lý ( CPU ) có 1 ngôn từ riêng, gọi là bộ lệnh ( instruction set ) Trong cùng 1 dòng vi giải quyết và xử lý ( processor family ) bộ lệnh gầngiống nhauInstructionsetInstruction Là dãy bit chứa nhu yếu mà bộ giải quyết và xử lý trongCPU ( ALU ) phải triển khai Instruction gồm 2 thành phần : Mã lệnh : thao tác cần thực thi tin tức về toán hạng : những đối tượng người tiêu dùng bị tácđộng bởi thao tác chứa trong mã lệnhISA ( Instruction Set Architecture ) Tập lệnh dành cho những bộ vi giải quyết và xử lý có kiến trúc tương tựnhau Một số ISA thông dụng : Dòng vi giải quyết và xử lý 80×86 ( gọi tắt x86 ) của Intel IA-16 : Dòng giải quyết và xử lý 16 bit ( Intel 8086, 80186, 80286 ) IA-32 : Dòng giải quyết và xử lý 32 bit ( Intel 80368 – i386, 80486 – i486, PentiumII, Pentium III … ) IA-64 : Dòng giải quyết và xử lý 64 bit ( Intel x86-64 như Pentium D … ) MIPS : Dùng rất nhiều trong mạng lưới hệ thống nhúng ( embedded system ) PowerPC của IBMThiết kế ISA : CISC và RISC Có 2 phe phái phong cách thiết kế bộ lệnh : Complete Instruction Set Computer ( CISC ) : bộ lệnhgồm rất nhiều lệnh, từ đơn thuần đến phức tạp Reduced Instruction Set Computer ( RISC ) : bộ lệnh chỉgồm những lệnh đơn thuần Nên chọn kiểu nào ? Tuy nhiên Không phải ai cũng muốn / hoàn toàn có thể lập trình ngôn ngữmáy vì quá khó hiểu so với ngôn từ thông thường củacon người Nhu cầu cần có bộ phận phiên dịch ( interpreter ) High-levellanguage ( C / C + + ) MachineLaguageInterpreterOKOKNhận xét 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ảiphiên dịch nhiều lần để trở thành ngôn từ máy Hợp ngữ ( Assembly language ) Highest-levellanguageMachineLaguageInterpreterLower-levellanguageLower-levellanguageHợp ngữ10 Các mã máy chỉ là những số lượng ( 0 / 1 ) Trong ngôn từ máy không có khái niệm biến thay vào đó là ônhớ, thanh ghi Để thuận tiện lập trình hơn dùng ký hiệu mã giả thay cho những số, những tên gọi thay cho địa chỉ ô nhớ Hợp ngữ rất gần với ngôn ngữ máy nhưng lại đủ để con người hiểuvà sử dụng tốt hơn ngôn từ máy Ví dụ : Ghi giá trị 5 vào thanh ghi $ 4N gôn ngữ máy : 00110100 0000100 00000000 00000101H ợp ngữ : ori USD 4, USD 0, 5L ưu ý11 Vì mỗi bộ vi giải quyết và xử lý có 1 cấu trúc thanh ghi vàtập lệnh ( ngôn từ ) riêng nên khi lập trìnhhợp ngữ phải nói rõ là lập trình cho bộ vi xử lýnào, hay dòng ( family ) vi giải quyết và xử lý nào Ví dụ : Hợp ngữ cho MIPS Hợp ngữ cho dòng vi giải quyết và xử lý Intel 80×86 Thảo luận12 Ta hoàn toàn có thể tưởng tượng như sau : High-levellanguageMachineLaguageWhat is it ? AssemblylanguageWhat is it ? CompilerAssemblertemp = v [ k ] ; v [ k ] = v [ k + 1 ] ; v [ k + 1 ] = temp ; lw USD t0, 0 ( USD 2 ) lw USD t1, 4 ( USD 2 ) sw USD t1, 0 ( USD 2 ) sw USD t0, 4 ( USD 2 ) 0000 1001 11000110 1111 0101C ompiler13 Trình biên dịch ngôn từ cấp cao hợp ngữ Compiler nhờ vào vào : Ngôn ngữ cấp cao được biên dịch Kiến trúc mạng lưới hệ thống phần cứng bên dưới mà nóđang chạy Ví dụ : Compiler cho C < > Comiler cho Java Compiler cho “ C on Windows ” < > “ C on Linux ” Assembler14 Trình biên dịch hợp ngữ ngôn từ máy Một bộ vi giải quyết và xử lý ( đi kèm 1 bộ lệnh xác lập ) hoàn toàn có thể cónhiều Assembler của nhiều nhà cung ứng khác nhauchạy trên những OS khác nhauVí dụ : Cùng là kiến trúc x86, nhưng hoàn toàn có thể dùng A86, GAS, TASM, MASM, NASM Assembly program phụ thuộc vào vào Assembler mà nósử dụng ( do những lan rộng ra, đặc thù khác nhau giữacác Assembler ) Thảo luận15 Bản thân Compiler cũng là chương trình, vậy nó đượcbiên dịch bằng gì ? Assembler Sau khi đã biên dịch tập tin mã nguồn ngôn từ cấpcao thành tập tin mã máy ( machine language ), làmsao để chạy những tập tin này trên máy tính ? Linker và LoaderLinker16 Thực tế khi lập trình, ta sẽ dùng nhiều file ( header / source ) link và kèm theo những thưviện có sẵn Cần chương trình Linker để link những filesau 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 ) Quá trình tạo file thực thi17 Khi double click vào những tập tin thực thi, cần chươngtrình giám sát và tải vào memory để CPU giải quyết và xử lý LoaderQuá trình thực thi file trên máy18Ví dụ19Mô hình thực tế20 Compiler và Assembler hoàn toàn có thể được bỏ lỡ trong 1 số trường hợp đơn cử … Trong trong thực tiễn, có một số ít compiler hoàn toàn có thể tạo file thực thi ở nhiều nền tảngkiến trúc bên dưới khác nhau, được gọi là cross-platform compiler Compiler cho Java Cygwin Code :: Block StudioQuá trình thực thi file trên máyJava program21Hoạt động của CPU khi giải quyết và xử lý lệnh22 CPU giải quyết và xử lý lệnh qua 2 bước, gọi là chu kỳ luân hồi lệnh : Nạp lệnh ( Fetch ) : Di chuyển lệnh từ memory vào thanh ghi ( register ) trong CPU Thực thi lệnh ( Excute ) : Giải mã lệnh và thực thi thao tác yêu cầuStartFetch nextInstructionExecuteInstructionHaltQuá trình nạp lệnh ( Fetch cycle ) 23 MAR PC MBR Memory IR MBR PC PC + 1 Thanh ghi PC ( Program Counter ) Lưu địa chỉ ( address ) của lệnh sắp được nạp Thanh ghi MAR ( Memory Address Register ) Lưu địa chỉ ( address ) sẽ được output ra Address bus Thanh ghi MBR ( Memory Buffer Register ) Lưu giá trị ( value ) sẽ được input / output từ Data bus Thanh ghi IR ( Instruction Register ) Lưu mã lệnh sẽ được giải quyết và xử lý tiếp • Control Unit di chuyển mã lệnh cóđịa chỉ trong IC vào thanh ghi IR • Mặc định, giá trị thanh ghi PC sẽtăng 1 lượng = chiều dài của lệnhvừa được nạpVí dụ24x = x + y00010000 01000000 0000000100001100 01000010 0000000100010000 00000001 01000000PC R1IRCPU0001001100010000 01000000 00000001ALU Địa chỉ Lệnh ( Instruction ) 00010000 x R100010011 R1 + y R100010110 R1 x …. 01000000 …. 01000010 …. Chương trìnhRAMCPUQuy trình thực thi lệnh ( Execute Cycle ) 25 Các bước này được lặp đi lặp lại cho tổng thể những lệnh tiếp theo Quy trình này gọi là Instruction cycle – vòng lặp giải quyết và xử lý lệnh • Tính địa chỉ lệnh • Nạp lệnh • Giải mã lệnh • Tính địa chỉ củatoán hạng • Nạp toán hạng • Thực hiện lệnh • Tính địa chỉ củatoán hạng chứa kếtquả • Ghi tác dụng
Source: https://suachuatulanh.edu.vn
Category : Nhà Cửa