Mạng máy tính - 1



Chương 1. Mạng và Internet


Hiện nay, Internet đang được xem là một hệ thống lớn nhất do con người tạo ra. Hệ thống này bao gồm hàng trăm triệu các kết nối giữa máy tính, thiết bị truyền thông và thiết bị chuyển mạch; với hàng tỉ người dùng đang kết nối vào hệ thống thông qua máy tính xách tay, máy tính bảng, điện thoại; với rất nhiều các thiết bị có hỗ trợ kết nối Internet khác như các bộ cảm biến, webcam, máy chơi game, khung ảnh, thậm chí cả máy giặt.


Bài tập Tin học đại cương (hệ vừa làm vừa học)

Mục đích của bài tập:

  • Sử dụng Internet để tìm kiếm các thông tin cần thiết
  • Rèn luyện khả năng tự học
  • Có khả năng gõ bàn phím bằng mười ngón tay
  • Kỹ năng sử dụng email
  • Sử dụng Google Drive, Docs
  • Làm việc nhóm
  • Làm việc nghiêm túc

Bài tập 1

  1. Tự tìm kiếm và đọc các bài viết hướng dẫn về gõ bàn phím bằng mười ngón tay.
  2. Tự tập theo hướng dẫn.
  3. Khi nào thấy tự tin, đã đánh được bằng mười ngón, vào trang web http://play.typeracer.com/, chọn mục Enter a typing race, bắt đầu gõ, sau khi hoàn thành, chụp nguyên cả màn hình máy tính gửi cho giáo viên.
  4. Gửi kết quả về cho giáo viên trước khi thi kết thúc môn học.
Bài tập 2:

  1. Tạo hộp thư với tên lịch sự, nghiêm túc (tốt nhất là sử dụng Gmail)
  2. Trong Drive của Google tạo một thư mục có tên MSSV_HoTen_Lop (ví dụ: 1234567_NguyenVanTeo_LHLamHa), trong thư mục vừa tạo, tạo thư mục có tên PowerPoint.
  3. Tạo một bài thuyết trình 15 slide bằng chức năng slides của Google Docs, chủ đề tự chọn, trong slide bắt buộc phải có ghi nguồn các tài liệu tham khảo, các hình lấy ở đâu, nội dung trích dẫn lấy ở đâu. Lưu bài thuyết trình này vào trong thư mục PowerPoint.
  4. Chia sẻ thư mục MSSV_HoTen_Lop cho tài khoản legiacong@gmail.com có quyền đọc và ghi (edit). Khi chia sẻ, viết nội dung thông báo cho giáo viên như sau: “Gửi thầy bài tập cá nhân của Nguyễn Văn Tèo lớp ABC. Trân trọng!”

Bài tập 3

1. Tự tạo nhóm, mỗi nhóm từ 3 đến 5 người
2. Mỗi thành viên phải có tài khoản Email của Google
3. Nhóm trưởng với sự hỗ trợ của các thành viên làm các bước 4, 5, 6, 8
4. Đăng nhập vào trang web http://docs.google.com

5. Bấm vào ô tròn màu đen (ở hình trên), chọn Sheets, chọn Blank, đặt tên cho tài liệu là Mẫu phân công công việc. Điền các thông tin như hình sau (chú ý thay A, B, C là tên các thành viên trong nhóm):



6. Gửi bảng phân công này tới cho những người liên quan bằng cách, bấm vào nút Share, nhập địa chỉ email của những người liên quan vào ô People, có thể tùy chọn để người nhận được bảng phân công này chỉ được đọc, hoặc vừa được đọc và được sửa trên bảng phân công, bấm Done.
7. Các thành viên trong nhóm sẽ mở Bảng phân công tại máy mình và ghi nội dung “đã thực hiện xong” vào ô Ghi chú tương ứng (mục công việc mình được nhóm trưởng giao).
8. Nhóm trưởng chia sẻ tập tin excel này cho tài khoản legiacong@gmail.com có quyền đọc và ghi (edit). Khi chia sẻ, viết nội dung thông báo cho giáo viên như sau: “Gửi thầy bài tập nhóm lớp ….Các thành viên gồm: 1. MSSV – Họ Tên – Lớp; 2…. Trân trọng!

Phượt Đà Lạt - Cát Tiên



Vì chưa bao giờ đặt chân đến vùng đất này, nên khi có dịp đi về Cát Tiên, trong lòng bỗng thấy háo hức.

Ấn tượng có được về Cát Tiên chỉ là cái nóng, hay lụt lội về mùa mưa, một huyện vùng xa của tỉnh Lâm Đồng, có rừng quốc gia Cát Tiên và có khu khảo cổ gì đó.

Tám giờ sáng, sau khi chuẩn bị vài thứ cần thiết cho chuyến đi, quần áo, đồ dùng cá nhân, máy ảnh cà tàng, thế là cưỡi lên con xe, Đà Lạt thẳng tiến về Cát Tiên.

Dọc đèo Prenn, thấy quang cảnh núi rừng trùng điệp, bát ngát một màu xanh, chồi non, ngọn cỏ đua nhau mọc, mới thấy giá trị của Đà Lạt chính là đây, không khí trong lành, thiên nhiên tươi nhẹ.



Cảnh chân đèo Prenn - ảnh Hân Vũ

Cách Đà Lạt 20 Km là làng Gà và núi Voi, thấy bà con hay gọi là làng Gà chứ tên thật của làng này thì tôi không rõ, với lại, nó cũng chả quan trọng. Quan trọng là tới đây để xem con gà của làng thôi. Bạn nào thích ngắm gà lạ và chinh phục đỉnh núi Voi thì đây là điểm dừng chân lý tưởng. Các bạn có thể đi xe bus tới đây, hoặc đi xe máy. Gửi xe máy tại nhà người dân, ghé mấy cửa hàng tạp hóa mua ít thịt heo, thịt gà, trứng gà, mua thêm hộp diêm, con dao chặt củi, nước uống, thế là cả đoàn có thể chinh phục được đỉnh núi Voi và sống sót trở về mà không bị đói, bị khát. Chỉ tội hơi mỏi chân. Nhớ đi giầy mềm, tốt nhất là giầy ba ta.



Núi Voi – Đức Trọng – Lâm Đồng - ảnh Hân Vũ

Cách Đà Lạt khoảng 45 km là thác Pongour, thuộc địa phận huyện Đức Trọng, cái thác này hoang sơ và hoành tráng hơn mấy cái thác ở Đà Lạt nhiều, thác ở Đà Lạt chỉ đẹp trong thơ ca, nhạc họa hoặc trong những kỉ niệm riêng của mỗi người thôi.

Đi xe máy với tốc độ 40 km/giờ, cộng với dừng lại tám chuyện hơi nhiều, nên mới đi được 70 km, tới chợ Gia Hiệp – Đức Trọng, đã là 11.30 trưa, đói quá, ghé chợ chuẩn bị cho bữa trưa. Đi chợ cho bữa trưa hết 29.000 đồng. Gồm 20.000 giò lụa, 6.000 bánh mì, và 3.000 chuối. Tấp vào hàng cây bên đường, ngồi, nằm, nghiêng ngả ăn trưa, ngắm trời ngắm đất. Bỗng thấy nhớ ông bố quá, hai bố con hồi trước hay đi làm rẫy với nhau, buổi trưa cũng trải áo đi mưa dưới gốc cây ngủ ngon lành, lâu lâu bị bọn kiến, ruồi, muỗi quậy phá, ngủ mất ngon. Nhưng được cái ung dung, tự tại. Lại nhớ tới chuyện hồi xưa của nhà văn Nguyên Hồng, một hôm ông đạp xe từ Hà Nội về Bắc Giang, trên đường về, mệt, nằm ngủ bên đường, do ông dựng xe ngược chiều, tới hồi tỉnh dậy, trời tối, vội vàng cắm cổ đạp xe, đạp một hồi, lại thấy cầu Long Biên, đến khổ!




Ăn và nghỉ trưa tại khách sạn Thiên nhiên - ảnh Hân Vũ

Đi thêm 30 km nữa sẽ gặp trạm nghỉ chân của công ty trà Tâm Châu, các bạn có thể ghé chỗ này để rửa mặt, uống trà miễn phí, mua gì đó làm quà.



Trạm nghỉ chân Tâm Châu - ảnh Hân Vũ

Cách Đà Lạt 110 Km là ngã ba Lộc Sơn, bạn nào muốn vào xem “từ xa” nhà máy Bô xít thì rẽ phải. Nhà máy cách ngã ba khoảng 20 km, đường đi đẹp, ít dốc, hai bên là vườn chè bát ngát. Tới, sẽ thấy nhà máy như một con quái vật khổng lồ giữa nương chè và rừng cây.

Đoạn đường tại Di Linh đang sửa một số đoạn ngắn, nên đi hơi khó thôi, còn lại đường đi rất tốt, an toàn. Đang ngồi nghỉ ở giữa đèo Bảo Lộc, ngó ngó nghiêng nghiêng bỗng thấy dòng chữ “mì gói”, chả là mấy bữa nay thấy trên báo Tuổi Trẻ bàn tán về mì gói, ăn hay không ăn? Nhưng mà thấy cái gì tồn tại cũng có cái lý của nó, vấn để là làm sao để đảm bảo sức khỏe cho người ăn, hài hòa, cân đối giữa cái lợi và hại. Cũng giống như ăn cà (sống, muối xổi) vậy thôi. Một quả cà (sống) bằng ba thang thuốc. Độc đấy mà vẫn ăn đấy thôi.




Đơn giản là mì gói - ảnh Hân Vũ

Nói về trạm dừng chân, trên đường đi có gặp lại trạm dừng chân của nhà xe Phương Trang, dưới chân đèo Bảo Lộc. Tới đây, trong tôi bỗng có cảm xúc bùi ngùi, nơi gợi lại trong tôi những chuyến đi Sài gòn, đi miền Tây, những ngày trở về Đà Lạt: đêm hôm, mệt, đói, những khuôn mặt thất thần, những người thân, những người bạn, gặp nhau đấy rồi lại xa, mỗi người mỗi phương. Trạm dừng chân cũng vậy, đã từng là mùa xuân, rội rã tiếng cười, đã từng là mùa hè, rực cháy tuổi trẻ, đã từng là mùa thu, nhè nhẹ lướt qua và bây giờ đang là mùa đông của nó, lặng lẽ tàn phai.



Trạm dừng chân xưa - ảnh Hân Vũ

Cách Đà Lạt 150 Km là khu du lịch Madagui, khu này cây cối nhiều, mát mẻ, tôi chưa vào trong lần nào. Dừng lại bên ngoài, nghỉ ngơi, ngó nghiêng một lúc rồi đi.



“Bọ cánh cứng – Madagui”? - ảnh Hân Vũ

Từ khu du lịch Madagui, đi thêm 7km nữa là đến ngã ba Madagui, bạn sẽ thấy bảng chỉ dẫn đi huyện Cát Tiên, còn 41 km nữa là đến.


 Bảng chỉ dẫn đi Cát Tiên

Đường đi Cát Tiên khá đẹp, có đi qua huyện Đạ Tẻh, hai bên đường là lúa, rừng keo, mía.



Lúa Cát Tiên - ảnh Hân Vũ

Thấy các bạn trẻ đang rộn ràng với cỏ hồng, cải trắng, quỳ vàng. Nên tôi cũng “hùa theo” với mấy bụi cỏ hồng bên đường.



Cỏ hồng Cát Tiên - ảnh Hân Vũ

Tới khu di tích khảo cổ Cát Tiên đã là 5h chiều, nên chưa ghé thăm được. Chạy thẳng tới thị trấn Cát Tiên, nhờ một người bạn dẫn tới nhà nghỉ, tắm qua, rồi đi ăn tối.




Thị trấn Cát Tiên yên tĩnh, ít hàng quán, ăn tối với ly trà đá. Ngồi ăn được năm phút, mấy em “thiêu thân” bay tới rớt đầy vào ly trà đá, vào cơm, vào canh, thế là phải vất vả lắm mới ăn được bữa cơm chiều. Ăn cơm xong, ghé qua hai tiệm sách, tính mua cuốn sách gì đó về đọc mà không có, họ nói chỉ bán sách giáo khoa cho học sinh thôi, chứ không bán các sách khác.

Về lại nhà nghỉ, bật máy tính, vào mạng Internet, đọc đọc, viết viết!

Khu di tích khảo cổ vẫn nằm lặng im, bên dòng sông Đồng Nai như xưa nay vẫn thế, người Cát Tiên chất phát vẫn vậy, cuộc sống giờ đây có vẻ bận rộn hơn với truyền hình cáp, điện thoại, Internet, Facebook, Zalo. Mua sách, đọc sách có vẻ khó quá ở nơi đây.
Cát Tiên – 10/12/2015
Tác giả: Hân Vũ

Ngu ngơ lập trình (1)



Chỉ thị máy tính[1]


Chỉ thị máy tính, gọi tắt là chỉ thị (tiếng Anh là instruction), là đơn vị nhỏ nhất dùng để điều khiển máy tính, cụ thể hơn là ra lệnh cho CPU thực hiện một thao tác căn bản. Tập lệnh của CPU sẽ thực thi các chỉ thị này.

Ví dụ, đây là một chỉ thị dạng nhị phân: 1011 0000 0110 0001, nội dung của chỉ thị này là gán giá trị 61h vào thanh ghi AL. Dạng thập lục phân của chỉ thị là: 0xB061

Mỗi chỉ thị gồm hai phần: opcode và operands. Opcode (operation code): mã của chỉ thị, mã thực thi, hay mã lệnh. Operands: các toán hạng. Số bit của opcode và operands tùy thuộc vào từng dòng máy tính. Ví dụ, chỉ thị dưới đây gồm 8 bit opcode và 8 bit operands.


Opcode
Operands
Dạng nhị phân
1011 0000
0110 0001
Dạng thập lục phân
0xB0
0x61

Với con người, điều khiển máy tính bằng chỉ thị máy là một việc làm không dễ dàng. Hay nói cách khác sẽ rất khó khăn nếu xây dựng một chương trình bằng các chỉ thị. Trong các ngôn ngữ lập trình người ta có thể thay thế nó bằng những câu lệnh. Mỗi câu lệnh là tập hợp cố định của một số chỉ thị nhằm thi hành một thao tác lớn hơn và có ý nghĩa hơn.

 

Ngôn ngữ máy[2]


Ngôn ngữ máy (còn được gọi là máy ngữ hay mã máy; tiếng Anh là machine language hay machine code) là một tập hợp các chỉ thị được CPU của máy tính trực tiếp thực thi. Mỗi chỉ thị thực hiện một chức năng xác định. Ví dụ như tải dữ liệu, nhảy hay tính toán số nguyên trên một đơn vị dữ liệu của thanh ghi CPU hay bộ nhớ. Tất cả các chương trình được thực thi trực tiếp bởi CPU đều là các chuỗi các chỉ thị này.

Ngôn ngữ máy dạng nhị phân có thể được xem như là phương thức biểu diễn thấp nhất của một chương trình đã biên dịch hay hợp dịch. Hay nói cách khác, chương trình máy tính thực chất chỉ là một chuỗi những chỉ thị viết bằng ngôn ngữ máy được thực thi bởi CPU.

Hiện nay, hầu như tất cả các chương trình máy tính trong thực tế đều được viết bằng các ngôn ngữ bậc cao hay (đôi khi) hợp ngữ, và sau đó được dịch thành ngôn ngữ máy, bằng các công cụ phụ trợ như trình biên dịch, trình hợp dịch hay trình liên kết. Ngoài ra, các chương trình được viết bằng ngôn ngữ thông dịch thì được dịch sang ngôn ngữ máy nhờ trình thông dịch tương ứng (có thể xem như là trình thực thi hay trình xử lí). Các trình thông dịch này thường bao gồm các ngôn ngữ máy thực thi trực tiếp (sinh ra từ mã nguồn hợp ngữ hay các ngôn ngữ bậc cao).

Hình sau là ví dụ về một đoạn chương trình ở dạng ngôn ngữ máy[3]


Vi mã (microcode)[4]


Là mã lệnh ở mức rất thấp, thấp hơn cả mức ngôn ngữ máy. Nó xác định bộ vi xử lý hoạt động thế nào khi thực thi ngôn ngữ máy.

Trong một số hệ thống (ví dụ IBM), khái niệm vi mã tương đương với khái niệm firmware.

 

Vi chương trình (microprogram)


Bộ vi mã được sử dụng trong một bộ xử lý cụ thể được gọi là vi chương trình.

Vi chương trình tạo một giao diện ngôn ngữ máy thống nhất giữa các mô hình máy tính khác nhau, với những mạch xử lí dữ liệu khác nhau, trong cùng một dòng hay họ. Điều này đã giúp việc chuyển chương trình mã máy qua các mô hình máy tính khác nhau dễ dàng hơn rất nhiều. Họ máy tính và vi xử lí IBM System/360 là một ví dụ điển hình. Mặc dù dòng xử lí dữ liệu có độ lớn khác nhau, từ 8 bits đến lớn hơn 16 bits, nhưng tất cả máy tính thuộc cùng một dòng đều sử dụng một kiến trúc máy tính thống nhất ở mức độ ngôn ngữ máy.

 

Ngôn ngữ lập trình (programming language)[5]


Ngôn ngữ lập trình là một tập từ ngữ và ký hiệu cho phép lập trình viên hoặc người dùng có thể nói chuyện với máy tính.

Lập trình viên sẽ sử dụng ngôn ngữ lập trình để tạo ra các chương trình.

Các loại ngôn ngữ lập trình:
- Ngôn ngữ máy
- Hợp ngữ
-Ngôn ngữ lập trình cấp cao

 

Chương trình (program)[6]


Chương trình là một tập các chỉ thị (instruction), các câu lệnh (statement) được sắp xếp theo một trật tự định trước, nhằm hướng dẫn máy tính thực hiện các thao tác, hành động cần thiết để đáp ứng một mục tiêu đã định trước của con người, như truy xuất dữ liệu, tìm kiếm, giải bài toán. Các chỉ thị (câu lệnh) này có thể được viết bằng nhiều ngôn ngữ lập trình khác nhau.

 

Lập trình (programming)[7]


Lập trình máy tính (gọi tắt là lập trình; tiếng Anh là programming) là kỹ thuật cài đặt một hoặc nhiều thuật toán trừu tượng có liên quan với nhau bằng một hoặc nhiều ngôn ngữ lập trình để tạo ra một chương trình máy tính. Lập trình có các thành tố nghệ thuật, khoa học, toán học, và kỹ nghệ.

 

Trình viết mã (source code editor)[8]


Là một chương trình soạn thảo văn bản, được lập trình viên sử dụng để soạn thảo, chỉnh sửa mã nguồn của một chương trình máy tính. Trình viết mã có thể là một ứng dụng độc lập (Eclipse, Notepad++, Sublime) hoặc được tích hợp trong một môi trường phát triển tích hợp (IDE).

 

Mã nguồn (source code)


Các chỉ thị của chương trình được tạo ra bởi lập trình viên bằng các trình viết mã. Mã nguồn thường được viết bằng các ngôn ngữ lập trình mà con người có thể đọc hiểu.

 

Biên dịch (compile)


Là quá trình chuyển đổi từ mã nguồn ở dạng ngôn ngữ cấp cao sang dạng mã máy. Việc biên dịch được thực hiện bởi trình biên dịch (compiler).

 

Trình biên dịch (compiler)[9]


Trình biên dịch, còn gọi là phần mềm biên dịch, là một chương trình máy tính làm công việc dịch một chuỗi các câu lệnh được viết bằng một ngôn ngữ lập trình (gọi là ngôn ngữ nguồn hay mã nguồn), thành một chương trình tương đương nhưng ở dưới dạng một ngôn ngữ máy tính mới (gọi là ngôn ngữ đích) và thường là ngôn ngữ ở cấp thấp hơn, như ngôn ngữ máy. Chương trình mới được dịch này gọi là mã đối tượng (object code).

Các loại trình biên dịch cho kết quả là mã đối tượng thì một cách cơ bản bao gồm mã máy tăng cường thêm các thông tin về tên vị trí của các ngõ vào và các gọi ngoài (đến các hàm mà không có sẵn bên trong của nó). Một tập hợp của các tập tin đối tượng, mà không hẳn được cung cấp từ cùng một trình biên dịch, thì vẫn có thể được liên kết với nhau để tạo nên các chương trình khả thi cuối cùng cho một người dùng. Dĩ nhiên, để làm được như vậy thì các tập tin đối tượng đó phải được thiết kế chung nhau về dạng thức. Ví dụ của kiểu tập đối tượng này là các tập tin có đuôi là .obj có thể dùng chung giữa ASM, C/C++, Fortran... hay các tập tin .dll trong các kiến trúc Windows dùng chung được cho nhiều ngôn ngữ.

Trình biên dịch gồm hai loại: biên dịch một bước hay nhiều bước. 

- Trình biên dịch một bước: với loại này, sự chuyển dịch hoàn tất trong một bước và do đó rất nhanh.
Ví dụ, các trình biên dịch trước đây cho Pascal hay Borland C là trình biên dịch một bước.

- Các trình biên dịch cần nhiều hơn một bước để hoàn tất gọi là trình biên dịch nhiều bước. Các kiểu trình biên dịch nhiều bước bao gồm:

o   Trình biên dịch nguồn sang nguồn: là loại trình biên dịch nhận vào mã nguồn là một ngôn ngữ cấp cao và chuyển dịch thành một ngôn ngữ cấp cao khác.

o   Trình biên dịch phân đoạn: biên dịch sang ngôn ngữ ASM của một máy lý thuyết như là vài tiến hành của Prolog. Loại máy Prolog này còn được gọi là máy trừu tượng Warren (hay WAM). Ví dụ: các trình biên dịch bytecode cho Java, Python và nhiều trình biên dịch khác nữa là một kiểu con của kiểu này.

o   Trình biên dịch động hay còn gọi là trình biên dịch JIT sẽ chuyển dịch các ứng dụng sang bytecode, sau đó, bytecode sẽ được dịch sang mã của ngôn ngữ máy tương thích trước khi thi hành. Ví dụ: trình biên dịch JIT được dùng bởi Smalltalk, Java, cũng như dùng bởi Ngôn ngữ trung gian thông dụng của Microsoft.NET.

Đặc biệt, một trình biên dịch có thể có thêm các chức năng sau đây: 

  • Trình biên dịch mã liên kết là loại trình biên dịch cho phép thay thế các dòng kí tự trong (mã) nguồn bằng các khối mã nhị phân sẵn có. Các khối mã nhị phân này có thể có nhiều cấp độ khác nhau. Ví dụ: các trình biên dịch trong hầu hết các kiến trúc của FORTH. Trong thực tế, một vài trình biên dịch FORTH có thể dịch các chương trình mà không cần đến hệ điều hành. 
  • Trình biên dịch tăng tiến. Trong trình biên dịch tăng tiến, các hàm riêng lẻ có thể được dịch trong thời gian thi hành (runtime) mà các hàm này cũng bao gồm các chức năng thông dịch. Ví dụ: Kiến trúc dịch tăng tiến xuất hiện từ 1962 và vẫn còn được sử dụng trong các hệ thống Lisp.
  •       Trình biên dịch đa năng là trình biên dịch có thể được điều chỉnh để tạo ra mã cho các kiến trúc CPU khác nhau một cách tương đối dễ dàng. Mã đối tượng làm ra bởi các trình biên dịch này thường có chất lượng kém hơn là các mã được tạo ra từ các trình biên dịch chỉ chuyên dùng cho đúng loại CPU. Trình biên dịch đa năng thường cũng là trình biên dịch chéo bản. Ví dụ: GCC là một loại trình biên dịch đa năng miễn phí rất phổ biến.
  • Trình biên dịch song song hóa là loại trình biên dịch có khả năng chuyển đổi một chương trình vào được viết theo kiểu liên tục sang một dạng thuận tiện trên kiến trúc của máy tính song song.

 

Thiết kế trình biên dịch


Trong quá khứ, các trình biên dịch thường chia quá trình biên dịch thành nhiều bước để tiết kiệm kho chứa. Mỗi bước trong nghĩa vừa nêu của một trình biên dịch, thông qua mã nguồn của chương trình, là một sự thực thi dẫn tới kết quả trong việc dựng nên một bộ dữ liệu nội tại (chẳng hạn như là sự tham gia của các bảng kí hiệu và các dữ liệu hướng dẫn cho việc chuyển dịch). Khi một bước hoàn tất, thì trình biên dịch có thể xóa các dữ liệu nội tại không cần nữa trong suốt bước đó nhằm tiết kiệm chỗ trống. Như vậy phương pháp nhiều bước là kỹ thuật thông dụng ở thời đó, và nó cũng nhằm giải quyết các khó khăn về khối lượng các bộ nhớ của máy chủ còn nhỏ so với khối lượng mã nguồn và dữ liệu.

Nhiều trình biên dịch hiện đại chia sẻ chung một dạng thiết kế hai mặt. Mặt ngoài chuyển dịch ngôn ngữ nguồn sang một sự biểu trưng trung gian. Mặt thứ nhì là mặt trong, mà trong đó, chủ yếu là sự làm việc với các biểu trưng nội tại (như là các bảng kí hiệu và các dữ liệu cần thiết khác) để làm ra kết quả là mã trong ngôn ngữ đích. Mặt ngoài và mặt trong lại có thể tiến hành trong nhiều bước và có cả trường hợp mặt ngoài gọi mặt trong như là một chương trình con, và chuyển vào đó những biểu trưng trung gian.

Phương thức trên giảm nhẹ sự phức tạp. Mặt ngoài thường lo về các xử lý xung quanh về ý nghĩa ngôn ngữ. Trong khi mặt trong sẽ chú trọng đến việc làm ra các kết quả phải đạt hiệu quả và dúng. Điểm mạnh của phương thức này còn bao gồm việc cho phép dùng chung một mặt trong từ nhiều ngôn ngữ (nguồn) khác nhau và ngược lại là việc cho phép sử dụng các mặt trong khác nhau để phục vụ cho những mụch tiêu khác nhau.

Thường thì các bộ phận tối ưu hóa và các bộ phận kiểm lỗi có thể chia sẻ chung các mặt ngoài và mặt trong nếu chúng được thiết kế để hoạt động trên ngôn ngữ trung gian mà nó được chuyển từ mặt ngoài sang mặt trong. Điều này có thể dẫn đến việc nhiều trình biên dịch (kết hợp của các mặt ngoài và mặt trong) tái sử dụng được một lượng lớn công việc mà thường được tiến hành trong các bộ phận tối ưu hóa và bộ phận kiểm tra lỗi.

Có nhiều ngôn ngữ, dựa vào thiết kế của ngôn ngữ và các quy tắc dùng cho việc khai báo các biến và các đối tượng khác cũng như là dùng cho sự khai báo trước khi sử dụng hay trước khi tham chiếu của các hàm hay thủ tục, có khả năng được dùng trong một bước.

Ví dụ: Pascal là ngôn ngữ được biết nhiều đến do khả năng này. Ngôn ngữ C cũng có thể dùng trong cách dịch một bước và đạt được ngay các tệp khả thi.

 

Mặt ngoài của trình biên dịch


Mặt ngoài của trình biên dịch tự nó bao gồm nhiều pha. Các pha theo lý thuyết ngôn ngữ là: 

1.      Phân tích từ vựng: chia nhỏ các dòng mã nguồn thành những phần tử nhỏ gọi là thẻ khóa. Mỗi thẻ khóa đại diện cho một đơn vị không thể chia nhỏ của ngôn ngữ. Ví dụ: một từ khóa, một kí hiệu nhận dạng hay một tên kí hiệu. Các thẻ khoá có thể nhận biết được bởi việc dùng máy hữu hạn trạng thái. Pha này còn gọi là pha đọc từ ngữ hay pha quét. 

2.      Phân tích cú pháp: nhận diện các cấu trúc cú pháp của mã nguồn. Nó chỉ tập trung lên cấu trúc. Nói cách khác, nó nhận diện trật tự sắp xếp của các thẻ khóa và hiểu cấu trúc thứ bậc trong bộ mã. 

3.      Phân tích ý nghĩa: dùng để nhận biết ý nghĩa của chương trình (mã nguồn) và bắt đầu chuẩn bị cho ra kết quả. Trong pha này, sự kiểm tra về kiểu được hoàn tất và hầu hết các lỗi dịch được nêu ra. 

4.      Biểu trưng trung gian: đây là một dạng tương đương của chương trình nguyên thủy đã được chuyển thành và gọi là biểu trưng trung gian. Biểu trưng này có thể là một cấu trúc dữ liệu (thường là dạng cây hay dạng biểu đồ hay một dạng ngôn ngữ trung gian)


[1] https://vi.wikipedia.org/wiki/Ch%E1%BB%89_th%E1%BB%8B_(m%C3%A1y_t%C3%ADnh)
[2] https://vi.wikipedia.org/wiki/Ng%C3%B4n_ng%E1%BB%AF_m%C3%A1y
[3] http://watson.latech.edu/book/assembly/assemblyMachine2.html
[4] https://en.wikipedia.org/wiki/Microcode
[5] http://www4.hcmut.edu.vn/~huynhqlinh/TinhocDC/THDC14/Bai04_1.htm
[6] http://www4.hcmut.edu.vn/~huynhqlinh/TinhocDC/THDC14/Bai04_1.htm
[7] https://vi.wikipedia.org/wiki/L%E1%BA%ADp_tr%C3%ACnh_m%C3%A1y_t%C3%ADnh
[8] https://en.wikipedia.org/wiki/Source_code_editor
[9] https://vi.wikipedia.org/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch
-------------------------------
Cập nhật 2015/11/27