stanford-oval/wikipedia huggingface dataset:
Isodontia edax

| Isodontia edax> Phân loại khoa học |
| --- | --- |
Giới (regnum): Animalia
Ngành (phylum): Arthropoda
Lớp (class): Insecta
Bộ (ordo): Hymenoptera
Phân bộ (subordo): Apocrita
Liên họ (superfamilia): Apoidea
Họ (familia): Sphecidae
Chi (genus): Isodontia
Loài (species): I. edax
Danh pháp hai phần
Isodontia edax (Bingham, 1897) 
Isodontia edax là một loài côn trùng cánh màng trong họ Sphecidae, thuộc chi Isodontia. Loài này được Bingham miêu tả khoa học đầu tiên năm 1897.
Chú thích

↑  Isodontia edax (TSN 769436) tại Hệ thống Thông tin Phân loại Tích hợp (ITIS).
Hợp ngữ

| --- | --- |
Danh sách Hợp ngữ Motorola MC6800, cho thấy hợp ngữ thời đầu và hình thức kết hợp
Mẫu hình: Bắt buộc, Phi cấu trúc
Xuất hiện lần đầu: 1949; 75 năm trước (1949)
Trong lập trình máy tính, Hợp ngữ (hay assembly) thường được viết tắt là asm là bất kỳ ngôn ngữ lập trình cấp thấp nào có sự tương ứng rất mạnh giữa các tập lệnh trong ngôn ngữ và tập lệnh mã máy của kiến trúc. Bởi vì hợp ngữ phụ thuộc vào tập lệnh mã máy, mỗi trình biên dịch có hợp ngữ riêng được thiết kế cho chính xác một kiến trúc máy tính cụ thể. Hợp ngữ cũng có thể được gọi là mã máy tượng trưng (symbolic machine code).
Mã hợp ngữ được chuyển đổi thành mã máy thực thi bằng một chương trình được gọi là assembler. Quá trình chuyển đổi được gọi là assembling. Hợp ngữ thường có một câu lệnh trên một lệnh máy (1:1), nhưng các comment và các câu lệnh là chỉ thị trình biên dịch, macros, và các nhãn chương trình và địa chỉ bộ nhớ cũng được hỗ trợ
Mỗi một hợp ngữ là dành riêng cho một kiến trúc máy tính cụ thể và đôi khi cho một hệ điều hành. Tuy nhiên, một số hợp ngữ không cung cấp cú pháp riêng cho lời gọi hệ điều hành, và hầu hết các hợp ngữ có thể được sử dụng phổ biến với bất kỳ hệ điều hành nào, vì ngôn ngữ này cung cấp quyền truy cập vào tất cả các khả năng thực sự của bộ xử lý, theo đó tất cả các cơ chế gọi hệ thống đều dừng lại. Trái ngược với hợp ngữ, hầu hết các ngôn ngữ lập trình bậc cao thường có khả năng di động trên nhiều kiến trúc nhưng yêu cầu thông dịch hoặc biên dịch, một công việc phức tạp hơn nhiều so với assembling.
Hợp ngữ đã từng được dùng rộng rãi trong tất cả các khía cạnh lập trình, nhưng ngày nay nó có xu hướng chỉ được dùng trong một số lãnh vực hẹp, chủ yếu để giao tiếp trực tiếp với phần cứng hoặc xử lý các vấn đề liên quan đến tốc độ cao điển hình như các trình điều khiển thiết bị, các hệ thống nhúng cấp thấp và các ứng dụng thời gian thực.
Cú pháp

Cách dùng các thuật nhớ (mnemonics) thân thiện để viết chương trình đã thay thế cách lập trình trực tiếp lên máy tính bằng mã máy dạng số (numeric machine code) - từng áp dụng cho những máy tính đầu tiên - vốn rất mệt nhọc, dễ gây lỗi và tốn nhiều thời giờ.
Hợp ngữ dùng một thuật nhớ (mnemonic) để thể hiện từng lệnh máy hoặc opcode cấp thấp, thường là mỗi thanh ghi kiến trúc, bit cờ... Nhiều thao tác yêu cầu một hoặc nhiều toán hạng để tạo thành một lệnh hoàn chỉnh. Hầu hết các trình hợp dịch cho phép các hằng số, thanh ghi và nhãn được đặt tên cho các vị trí chương trình và bộ nhớ và có thể tính toán các biểu thức cho toán hạng. Do đó, các lập trình viên được giải phóng khỏi các tính toán lặp đi lặp lại tẻ nhạt và các chương trình biên dịch chương trình dễ đọc hơn nhiều so với mã máy. Tùy thuộc vào kiến trúc, các yếu tố này cũng có thể được kết hợp cho các tập lệnh cụ thể hoặc chế độ địa chỉ bằng cách sử dụng offset hoặc dữ liệu khác cũng như địa chỉ cố định. Nhiều trình hợp dịch cung cấp các cơ chế bổ sung để tạo điều kiện phát triển chương trình, kiểm soát quá trình lắp ráp và hỗ trợ gỡ lỗi.
Thuật ngữ

Một trình hợp dịch macro bao gồm một tập lệnh macro sao cho văn bản hợp ngữ (parameterized) được tham số hóa) có thể được biểu thị bằng một tên và tên đó có thể được sử dụng để chèn văn bản mở rộng vào mã khác.
Trình hợp dịch đa nền tảng là một trình hợp dịch có thể hoạt động được trên hệ thống máy tính hoặc hệ điều hành (hệ thống chủ) thuộc loại khác với hệ thống mà mã kết quả sẽ chạy (hệ thống đích). Trình hợp dịch chéo tạo điều kiện phát triển các chương trình cho các hệ thống không có tài nguyên để hỗ trợ phát triển phần mềm, chẳng hạn như hệ thống nhúng hoặc vi điều khiển. Trong trường hợp này, mã đối tượng kết quả phải được chuyển đến hệ thống đích, thông qua bộ nhớ chỉ đọc (ROM, EPROM, v.v.), một lập trình viên (khi bộ nhớ chỉ đọc được tích hợp trong thiết bị, như trong vi điều khiển) hoặc liên kết dữ liệu bằng cách sử dụng bản sao chính xác từng bit của mã đối tượng hoặc biểu diễn dựa trên văn bản của mã đó (chẳng hạn như Motorola S-record hoặc Intel HEX).
Trình hợp dịch bậc cao là một chương trình cung cấp các tóm tắt ngôn ngữ thường được liên kết với các ngôn ngữ bậc cao, chẳng hạn như các cấu trúc điều khiển nâng cao (IF/THEN/ELSE, DO CASE...) và các loại dữ liệu trừu tượng cấp cao, bao gồm cấu trúc/bản ghi, unions, lớp, và sets.
Một vi hợp dịch là một chương trình giúp chuẩn bị một chương trình vi mô, được gọi là phần sụn, để kiểm soát hoạt động ở mức độ thấp của máy tính.
Trình hợp dịch meta là một thuật ngữ được sử dụng trong một số vòng tròn cho "chương trình chấp nhận mô tả cú pháp và ngữ nghĩa của hợp ngữ và tạo trình biên dịch cho ngôn ngữ đó."
Assembly time là bước tính toán nơi trình biên dịch được chạy.
Các khái niệm > Trình hợp dịch (Assembler) > Số lần

Có hai loại trình hợp dịch dựa trên số lần truyền qua nguồn cần thiết (số lần trình biên dịch đọc nguồn) để tạo tệp đối tượng.
Trình hợp dịch một lần đi qua mã nguồn một lần. Bất kỳ ký hiệu nào được sử dụng trước khi được xác định sẽ yêu cầu "errata" ở cuối mã đối tượng (hoặc, ít nhất, không sớm hơn điểm mà biểu tượng được xác định) báo cho trình liên kết hoặc trình tải "quay lại" và ghi đè lên giữ chỗ đã được để lại nơi sử dụng biểu tượng chưa xác định.
Trình hợp dịch nhiều lần tạo một bảng có tất cả các ký hiệu và giá trị của chúng trong các lượt đầu tiên, sau đó sử dụng bảng trong các lần truyền sau để tạo mã.
Trong cả hai trường hợp, trình biên dịch phải có khả năng xác định kích thước của mỗi lệnh trên các đường chuyền ban đầu để tính địa chỉ của các ký hiệu tiếp theo. Điều này có nghĩa là nếu kích thước của một hoạt động đề cập đến một toán hạng được xác định sau phụ thuộc vào loại hoặc khoảng cách của toán hạng, trình biên dịch sẽ đưa ra ước tính bi quan khi lần đầu tiên gặp thao tác và nếu cần, hãy đệm nó bằng một hoặc nhiều lệnh "no-operation" trong một lần vượt qua hoặc errata. Trong một trình biên dịch với tối ưu hóa lỗ nhìn trộm, các địa chỉ có thể được tính toán lại giữa các lần chuyển để cho phép thay thế mã bi quan bằng mã được điều chỉnh theo khoảng cách chính xác từ mục tiêu.
Lý do ban đầu cho việc sử dụng bộ hợp dịch một lần là tốc độ hợp dịch - thường thì lần thứ hai sẽ yêu cầu tua lại và đọc lại nguồn chương trình trên băng hoặc đọc lại một chuỗi bìa đục lỗ. Các máy tính sau này có bộ nhớ lớn hơn nhiều (đặc biệt là lưu trữ đĩa), có không gian để thực hiện tất cả các xử lý cần thiết mà không cần đọc lại. Ưu điểm của trình hợp dịch nhiều lượt là việc không có errata làm cho quá trình liên kết (hoặc tải chương trình nếu trình biên dịch trực tiếp tạo mã thực thi) nhanh hơn.r.
Ví dụ: trong đoạn mã sau, trình hợp dịch một lần có thể xác định địa chỉ của BKWD tham chiếu ngược khi hợp dịch câu lệnh S2, nhưng không thể xác định địa chỉ của FWD tham chiếu chuyển tiếp khi hợp dịch câu lệnh nhánh S1; thật vậy, FWD có thể không được xác định. Trình hợp dịch hai lần sẽ xác định cả hai địa chỉ trong lần 1, vì vậy chúng sẽ được biết khi tạo mã trong lần 2.
S1   B    FWD
...
FWD   EQU *
...
BKWD  EQU *
...
S2    B   BKWD
Các khái niệm > Trình hợp dịch (Assembler) > Trình hợp dịch bậc cao

Nhiều trình hợp dịch bậc cao còn hỗ trợ khả năng ngôn ngữ trừu tượng như:
Khai báo thủ tục/hàm bậc cao
Các cấu trúc điều khiển nâng cao (IF/THEN/ELSE, SWITCH)
Các khai báo hàm cấp cao
Các kiểu dữ liệu trừu tượng bậc cao bao gồm các cấu trúc/bản ghi, unions, lớp, và sets
Xử lý macro phức tạp (mặc dù có sẵn trên các trình hợp dịch từ thập niên 1950 cho IBM 700 series và từ thập niên 1960 cho IBM/360, cũng như nhiều thiết bị khác)
Các tính năng lập trình hướng đối tượng như các lớp, đối tượng, trừu tượng hóa, đa hình và kế thừa.
Tham khảo phần Thiết kế ngôn ngữ bên dưới để rõ hơn.
Các khái niệm > Hợp ngữ (Assembly language)

Một chương trình viết bằng hợp ngữ bao gồm một chuỗi các lệnh (instructions) dễ nhớ tương ứng với một luồng các chỉ thị khả thi (executable) mà khi được dịch bằng một trình hợp dịch, chúng có khả năng nạp được vào bộ nhớ đồng thời thực thi được.
Ví dụ, bộ vi xử lý x86/IA-32 có thể thực hiện được chỉ thị nhị phân sau (thể hiện ở dạng ngôn ngữ máy):
10110000 01100001 (thập lục phân: 0xb061)
Lệnh trên tương đương với một chỉ thị hợp ngữ dễ nhớ hơn sau:
mov al, 061h
Chỉ thị lệnh trên có nghĩa là: gán giá trị thập lục phân 61 (97 dạng thập phân) cho thanh ghi trong bộ vi xử lý có tên là "al". Thuật từ "mov" là mã thực thi (operation code / opcode), được người thiết kế tập lệnh đặt tên thay thế cho từ "move", các đối/ tham số của lệnh theo sau và ngăn cách với opcode bởi một dấu phảy ",".
Trình hợp dịch thực hiện chuyển đổi hợp ngữ sang ngôn ngữ máy và trình phân dịch (disassembler) thực hiện quá trình trên ngược lại. Không giống các ngôn ngữ bậc cao, các chỉ thị hợp ngữ cơ bản thường có mối liên hệ tương ứng 1-1 với các chỉ thị ngôn ngữ máy. Tuy nhiên trong một số trường hợp, một trình hợp dịch có thể bổ sung các lệnh giả (pseudo-instructions) vào tập lệnh ngôn ngữ máy nhằm cung cấp các chức năng được dùng thường xuyên. Hầu hết các trình hợp dịch đa chức năng đều cung cấp thêm một tập macro phong phú để nhà sản xuất thiết bị và lập trình viên có thể tạo các mã lệnh và các dãy dữ liệu phức tạp.
Mỗi kiến trúc máy tính đều có ngôn ngữ máy riêng và do đó cũng có hợp ngữ riêng, chúng phân biệt với nhau bằng số lượng và kiểu của các lệnh mà chúng hỗ trợ. Chúng cũng có thể khác nhau về số lượng và kích cỡ của các thanh ghi cũng như cách thể hiện các kiểu dữ liệu trong bộ lưu trữ (bộ nhớ). Hầu hết các máy tính công dụng chung đều có khả năng thực hiện cùng chức năng nhưng cách mà chúng thực hiện thì khác nhau, điều đó phản ánh sự khác nhau giữa các hợp ngữ tương ứng với mỗi kiểu máy tính.
Các khái niệm > Ngôn ngữ máy (Machine language)

Ngôn ngữ máy được xây dựng từ các chỉ thị và các lệnh rời rạc, tùy vào mỗi kiến trúc xử lý mà tập lệnh được xác lập bởi các đặc thù riêng:
Các thanh ghi dùng cho tính toán số học
Cách bố trí bộ nhớ và tính địa chỉ
Cách điều khiển rẽ nhánh
Các kiểu đánh địa chỉ đặc thù dùng để giải các toán hạng
Nhiều lệnh phức hợp được tạo dựng bằng cách kết hợp nhiều chỉ thị đơn giản với nhau, các chỉ thị này tuân theo nguyên lý máy tính Von Neumann, tức là thực thi tuần tự và rẽ nhánh theo lệnh phân luồng. Một số lệnh điển hình có mặt trong hầu hết các tập lệnh gồm có:
Lệnh gán
Gán cho một thanh ghi (một vùng nhớ tạm thời trong CPU) một giá trị hằng số xác định
Chuyển dữ liệu từ một vùng nhớ sang một thanh ghi hoặc ngược lại. Thao tác này dùng để chuẩn bị dữ liệu cho một tính toán sau đó hoặc để lưu kết quả của một tính toán trước đó.
Đọc /ghi dữ liệu từ/vào các thiết bị phần cứng
Lệnh cho tính toán
Cộng, trừ, nhân hoặc chia các giá trị chứa trong các thanh ghi và lưu kết quả vào một thanh ghi
Thực hiện các phép thao tác bit "và"/"hoặc" (AND/OR) trên một cặp thanh ghi, hoặc phép phủ định bit trên một thanh ghi
So sánh nhỏ hơn/lớn hơn/ bằng nhau giữa hai giá trị lưu trong hai thanh ghi
Lệnh điều khiển rẽ nhánh
Nhảy tới một vị trí trong chương trình và thực thi các lệnh ở đó
Nhảy tới một vị trí khác nếu một điều kiện nhất định được thỏa mãn
Nhảy tới một vị trí nhưng lưu lại vị trí của lệnh tiếp theo để làm điểm nhảy trở về (thường là một lời gọi hàm)
Một số máy tính bao gồm các chỉ thị lệnh phức hợp trong tập lệnh của chúng. Một lệnh phức hợp thường thực hiện những tác vụ cần nhiều chỉ thị lệnh trên nhiều máy khác nhau, chúng thực hiện trong nhiều bước, điều khiển nhiều đơn vị chức năng. Danh sách minh họa một số lệnh phức hợp:
Lưu lại nhiều thanh ghi trên ngăn xếp chỉ một lần
Di chuyển các khối vùng nhớ lớn
Các phép toán dấu phảy động phức tạp (sine, cosine, square root, etc.)
Các lệnh ALU liên kết với một toán hạng từ bộ nhớ thay vì với một thanh ghi
Một kiểu lệnh phức hợp được dùng phổ biến ngày nay là các phép toán SIMD hay các lệnh vector (vector instruction) có khả năng thực hiện cùng một phép toán số học trên nhiều phần của dữ liệu trong cùng một thời điểm. Các lệnh SIMD (single instruction multile data) cho phép thực hiện song song nhiều thuật toán liên quan đến xử lý âm thanh, hình ảnh và video một cách dễ dàng. Nhiều tập lệnh thực thi SIMD tích hợp trong CPU đã được thương mại hóa dưới các thương hiệu như MMX và SSE, SSE2, SSE3, SSE4 (Intel), 3DNow! (AMD), AltiVec (IBM), tm3260 và tm5250 (Nexperia - Philips) ...
Ứng dụng > Trong quá khứ

Về mặt lịch sử, đã từng có một số lượng lớn các chương trình đã được viết hoàn toàn bằng hợp ngữ. Trước khi xuất hiện ngôn ngữ C vào những năm 1970 và đầu thập niên 1980, các hệ điều hành độc quyền hầu như được viết bằng hợp ngữ. Nhiều ứng dụng thương mại cũng được viết bằng hợp ngữ, bao gồm một khối lượng lớn các phần mềm cho máy tính lớn của IBM được các tập đoàn lớn viết. Cuối cùng thì ngôn ngữ COBOL và FORTRAN đã thay thế hợp ngữ mặc dù còn nhiều tổ chức vẫn giữ lại các kiến trúc ứng dụng kiểu hợp ngữ trong suốt thập niên 1980.
Hầu hết các máy vi tính (micro-computer) buổi đầu chủ yếu vận hành bằng hợp ngữ, bao gồm các hệ điều hành và các ứng dụng lớn. Lý do là bởi các hệ thống này bị hạn chế về tài nguyên, thiết bị, bộ nhớ và kiến trúc hiển thị cũng như các dịch vụ hệ thống dễ lỗi. Lý do quan trọng hơn, có lẽ là sự thiếu hụt các trình biên dịch bậc cao tiên tiến vốn thích hợp cho các hệ thống vi tính. Các ứng dụng lớn viết bằng hợp ngữ điển hình như hệ điều hành CP/M và MS-DOS, bảng tính spreadsheet và Lotus-123 trong các máy IBM-PC đời đầu, và nhiều các trò chơi phổ biến cho máy Commodore 64. Thậm chí tới những năm 1990, nhiều các trò chơi video giải trí vẫn được viết bằng hợp ngữ, bao gồm các trò chơi cho máy Mega Drive/Genesis và Super Nintendo Entertainment System.
Ngoài ra còn một dạng "ứng dụng" không được khuyến khích đó là virus máy tính. Trong các những năm '80 và đầu những năm '90 hầu hết virus máy tính được viết bằng hợp ngữ, lý do là sự giảm thiểu kích thước của virus cũng như khả năng can thiệp sâu vào hệ thống của hợp ngữ.
Ứng dụng > Hiện nay

Đã từng có nhiều tranh luận về tiện dụng và hiệu năng của hợp ngữ so với các ngôn ngữ bậc cao, tuy ngày nay người ta ít chú ý tới điều đó nữa. Hợp ngữ vẫn đóng vai trò quan trọng trong một số nhu cầu cần thiết. Nói chung, các trình biên dịch hiện đại ngày nay đều có khả năng biên dịch các ngôn ngữ bậc cao thành mã mà có thể thực thi nhanh ít nhất bằng hợp ngữ. Độ phức tạp của các bộ vi xử lý hiện đại cho phép tối ưu mã một cách hiệu quả, hơn nữa, phần lớn thời gian hoạt động của CPU rơi vào trạng thái rỗi bởi nó phải đợi kết quả từ cá các tính toán "thắt cổ chai" như các thao tác I/O và truy xuất bộ nhớ. Vì thế tốc độ thực thi mã thô (raw code) trở thành vấn đề ít quan trọng đối với hầu hết lập trình viên, sự xuất hiện các ngôn ngữ thông dịch (interpreted language) ngày càng nhiều là một minh chứng cho điều này.
Ngày nay có một số ít tình huống mà các chuyên gia thực sự muốn dùng hợp ngữ cho công việc của họ là:
Khi các thiết bị hoạt động độc lập mà không cần tài nguyên hay các thư viện liên kết với ngôn ngữ bậc cao. Đây có lẽ là trường hợp phổ biến nhất
Khi cần giao tiếp trực tiếp với phần cứng như trình điều khiển thiết bị, hoặc khi muốn dùng các chỉ thị vi xử lý mà trình biên dịch không tận dụng được
Khi cần tối ưu khắt khe như các thuật toán có dùng vòng lặp tiêu tốn nhiều năng lực xử lý
Khi một hệ thống cần phải viết mã thủ công để tận dụng nguồn tài nguyên hạn hẹp. Ngày nay điều đó có vẻ không phổ biến nữa do giá cả CPU giảm đồng thời hiệu năng hoạt động CPU đã cải thiện đáng kể.
Khi các ngôn ngữ bậc cao không thể áp dụng được trên một CPU mới hoặc CPU chuyên dụng.
Ngày nay lập trình viên có thể chọn một ngôn ngữ cấp thấp như C để viết các ứng dụng cần hiệu năng cao, tuy điều đó không dễ dàng bởi một ứng dụng viết bằng C sẽ không hiểu quả hơn ứng dụng viết bằng hợp ngữ. Ngoài ra, hợp ngữ vẫn còn được giảng dạy trong hầu hết các chương trình Khoa học máy tính, các khái niệm nền tảng vẫn có ý nghĩa quan trọng. Chẳng hạn như số học nhị phân, cấp phát bộ nhớ, xử lý ngăn xếp, mã hóa tập ký tự, xử lý ngắt và thiết kế trình dịch vẫn được nghiên cứu một cách chi tiết và hệ thống bất kể phần cứng máy tính hoạt động như thế nào. Cách hoạt động của máy tính được xác định bởi tập lệnh cơ sở của nó, vì vậy để hiểu các khái niệm cơ sở đó cách tốt nhất là nghiên cứu hợp ngữ của nó. May thay, hầu như các máy tính hiện đại đều có các tập lệnh tương tự nhau, do đó chỉ nắm được một hợp ngữ cũng có đủ để hiểu được các khái niệm cơ bản ở các hợp ngữ trên hệ thống khác.
Ứng dụng > Các ứng dụng điển hình

Hợp ngữ mã cấp thấp thường được dùng cho BIOS lưu trong ROM của một hệ thống để khởi tạo và kiểm tra phần cứng hệ thống trước khi khởi tạo hệ điều hành. Khi khởi tạo phần cứng hoàn thành, quyền điều khiển hệ thống sẽ được chuyển qua cho các phần mã thự thi khác (thường được viết bằng ngôn ngữ bậc cao). Điều này cũng đúng cho hầu hết các trình khởi động (boot loader).
Nhiều trình biên dịch chuyển đổi các ngôn ngữ bậc cao thành hợp ngữ trước khi biên dịch thực sự, điều này cho phép kiểm tra mã phục vụ mục đích gỡ rối và tối ưu. Các ngôn ngữ cấp thấp như C thường cung cấp các cú pháp đặc biệt cho phép nhúng trực tiếp hợp ngữ vào mã nguồn. Các chương trình tận dụng tính năng này như Nhân Linux có thể tạo ra các tầng trừu tượng để sử dụng trên nhiều kiến trúc phần cứng khác nhau.
Hợp ngữ cũng có giá trị trong kỹ thuật dịch ngược (reverse engineering). Các chương trình lớn vốn chỉ được phân phối dưới dạng mã máy, chúng thường dễ dàng dịch ngược thành hợp ngữ để kiểm tra nhưng rất khó dịch ngược ra mã ngôn ngữ bậc cao.
Sách

The Art of Assembly Language Programming Lưu trữ 2004-12-31 tại Wayback Machine,  Lưu trữ 2002-06-22 tại Wayback Machine by Randall Hyde
Computer-Books.us Lưu trữ 2018-02-24 tại Wayback Machine, Online Assembly Language Books
PC Assembly Language by Dr Paul Carter; *PC Assembly Tutorial using NASM and GCC Lưu trữ 2018-02-24 tại Wayback Machine by Paul Carter
Programming from the Ground Up by Jonathan Bartlett
The x86 ASM Book[liên kết hỏng] by the ASM Community
Dominic Sweetman: See MIPS Run. Morgan Kaufmann Publishers. ISBN 1-55860-410-3
Robert Britton: MIPS Assembly Language Programming. Prentice Hall. ISBN 0-13-142044-5
John Waldron: Introduction to RISC Assembly Language Programming. Addison Wesley. ISBN 0-201-39828-1
Jeff Duntemann Assembly Language Step-by-Step Lưu trữ 2006-12-16 tại Wayback Machine
St. Charles, Minnesota

| St>  Charles, Minnesota |
| --- | --- |
—  Thành phố  —
 

 
 Vị trí trong Quận Winona, Minnesota
 Vị trí bang Minnesota ở Hoa Kỳ
St. Charles, Minnesota
Quốc gia: Hoa Kỳ
Tiểu bang: Minnesota
Quận: Quận Winona
Dân số (2010)
 • Tổng cộng: 3.735
Múi giờ: CST (UTC-6)
 • Mùa hè (DST): CDT (UTC-5)
Mã bưu chính: 55972 
Mã điện thoại: 507 
St. Charles là một thành phố thuộc quận Winona, tiểu bang Minnesota, Hoa Kỳ. Năm 2010, dân số của thành phố này là 3735 người.
Dân số

Dân số năm 2000: 3295 người.
Dân số năm 2010: 3735 người.
Chú thích

↑  “2010 Census Gazetteer Files”. Cục Thống kê Dân số Hoa Kỳ. Truy cập ngày 15 tháng 10 năm 2012.
Tornabarakony

| Tornabarakony |
| --- | --- |
—  Thị trấn  —
 

  Huy hiệu
Tornabarakony
Quốc gia:  Hungary
Hạt: Borsod-Abaúj-Zemplén
Tiểu vùng: Edelényi
Diện tích
 • Tổng cộng: 8,2 km2 (3,2 mi2)
Dân số (2010)
 • Tổng cộng: 17
 • Mật độ: 2/km2 (5/mi2)
Múi giờ: CET (UTC+1)
 • Mùa hè (DST): CEST (UTC+2)
3765 
Mã điện thoại: 48 
Tornabarakony là một thị trấn thuộc hạt Borsod-Abaúj-Zemplén, Hungary. Thị trấn này có diện tích 8,2 km², dân số năm 2010 là 17 người, mật độ 2 người/km².
Gutenzell-Hürbel

| Gutenzell-Hürbel   |
| --- | --- |

 
Vị trí của Gutenzell-Hürbel   thuộc Huyện Biberach  
Gutenzell-Hürbel  
Quốc gia: Đức
Bang: Baden-Württemberg
Vùng hành chính: Tübingen
Huyện: Biberach
Phân chia hành chính: 2
Chính quyền
 • Thị trưởng: Andreas Merkle
Diện tích
 • Tổng cộng: 37,86 km2 (1,462 mi2)
Độ cao: 588 m (1,929 ft)
Dân số (2020-12-31)
 • Tổng cộng: 1.880
 • Mật độ: 0,50/km2 (1,3/mi2)
Múi giờ: CET (UTC+01:00)
 • Mùa hè (DST): CEST (UTC+02:00)
Mã bưu chính: 88484
Mã vùng: 07352
Biển số xe: BC
Trang web: www.gutenzell-huerbel.de
Gutenzell-Hürbel là một xã ở huyện Biberach ở bang Baden-Württemberg thuộc nước Đức. Đô thị này có diện tích 37,86 km², dân số thời điểm 31 tháng 12 năm 2020 là 1880 người.
| x t Xã và đô thị của huyện huyện Biberach |
| --- | --- | --- |
| Achstetten | Alleshausen | Allmannsweiler | Altheim | Attenweiler | Bad Buchau | Bad Schussenried | Berkheim | Betzenweiler | Biberach | Burgrieden | Dettingen | Dürmentingen | Dürnau | Eberhardzell | Erlenmoos | Erolzheim | Ertingen | Gutenzell-Hürbel | Hochdorf | Ingoldingen | Kanzach | Kirchberg | Kirchdorf | Langenenslingen | Laupheim | Maselheim | Mietingen | Mittelbiberach | Moosburg | Ochsenhausen | Oggelshausen | Riedlingen | Rot | Schemmerhofen | Schwendi | Seekirch | Steinhausen | Tannheim | Tiefenbach | Ummendorf | Unlingen | Uttenweiler | Wain | Warthausen  | Achstetten | Alleshausen | Allmannsweiler | Altheim | Attenweiler | Bad Buchau | Bad Schussenried | Berkheim | Betzenweiler | Biberach | Burgrieden | Dettingen | Dürmentingen | Dürnau | Eberhardzell | Erlenmoos | Erolzheim | Ertingen | Gutenzell-Hürbel | Hochdorf | Ingoldingen | Kanzach | Kirchberg | Kirchdorf | Langenenslingen | Laupheim | Maselheim | Mietingen | Mittelbiberach | Moosburg | Ochsenhausen | Oggelshausen | Riedlingen | Rot | Schemmerhofen | Schwendi | Seekirch | Steinhausen | Tannheim | Tiefenbach | Ummendorf | Unlingen | Uttenweiler | Wain | Warthausen  |  |
Guéron

| --- | --- |
 Guéron
Guéron
Vị trí trong vùng Lower Normandy Guéron 
Hành chính
Quốc gia:  Pháp
Vùng: Normandie
Tỉnh: Calvados
Quận: Bayeux
Tổng: Bayeux
Liên xã: Communauté de communes Bayeux Intercom
Xã (thị) trưởng: Marie-Claude Simonet (2008-2014)
Thống kê
Độ cao: 38–84 m (125–276 ft) (bình quân 50 m (160 ft)[chuyển đổi: tùy chọn không hợp lệ])
Diện tích đất1: 5,27 km2 (2,03 dặm vuông Anh)
INSEE/Mã bưu chính: 14322/ 14400

Guéron là một xã ở tỉnh Calvados, thuộc vùng Normandie ở tây bắc nước Pháp.
Dân số

| Năm | 1962 | 1968 | 1975 | 1982 | 1990 | 1999 |
| --- | --- | --- | --- | --- | --- | --- |
| Dân số | 222 | 224 | 197 | 238 | 239 | 236 |
From the year 1962 on: No double counting—residents of multiple communes (e.g. students and military personnel) are counted only once.
Im Na-young

| Lim Na-young |
| --- | --- |
Nayoung vào ngày 1 tháng 3 năm 2018
Sinh: Im Na-young 18 tháng 12, 1995 (28 tuổi) Gwanak-gu, Seoul, Hàn Quốc
Nghề nghiệp: Ca sĩ
Sự nghiệp âm nhạc
Thể loại: K-pop Dance-pop Bubblegum-pop Pop
Nhạc cụ: Thanh nhạc
Năm hoạt động: 2016 (2016) – nay
Hãng đĩa: Pledis Entertainment (2017-2019) YMC Entertainment (2016-2017) Sublime Artist Agency (2019-nay)
Hợp tác với: Pristin I.O.I
 

Tên tiếng Triều Tiên
Hangul: 임나영
Hanja: 林娜榮
Romaja quốc ngữ: Im Na-young
McCune–Reischauer: Im Nayŏng
Hán-Việt: Lâm Na Vinh
 
Im Na-young (hay còn được viết là Lim Na-young, Hangul: 임나영, Hanja: 林娜榮, Hán Việt: Lâm Na Vinh, sinh ngày 18 tháng 12 năm 1995) là một nữ ca sĩ, rapper người Hàn Quốc. Cô là cựu trưởng nhóm của nhóm nhạc nữ Hàn Quốc Pristin do công ty Pledis Entertainment thành lập và quản lý, được biết đến thông qua chương trình thực tế Produce 101. Cô là cựu thành viên của nhóm nhạc nữ I.O.I được sinh ra từ Produce 101.