Hợp ngữ
Thiết kế

Chỉ thị lệnh trong hợp ngữ nói chung là đơn giản, không giống như trong ngôn ngữ bậc cao. Mỗi chỉ thị lệnh điển hình thường bao gồm một mã lệnh (operation/ opcode hay đơn giản là instruction) theo với một hoặc nhiều toán hạng (operands), hoặc không có toán hạng nào. Hầu hết các chỉ thị lệnh đều tham khảo tới một giá trị đơn hoặc cặp giá trị. Mỗi chỉ thị lệnh thường được mã hóa tương ứng trực tiếp với một chỉ thị ngôn ngữ máy khả thi đơn lẻ.
Những thành phần thông thường có trong hầu hết các hợp ngữ gồm có:
Các định nghĩa dữ liệu (Data definitions). Các chỉ thị phụ cho phép lập trình viên dành riêng một vùng nhớ cho các câu lệnh ngôn ngữ máy tham khảo tới. Vùng nhớ này thường được khởi tạo bằng các ký tự, chuỗi và các kiểu dữ liệu cơ sở khác
Nhãn (Labels). Các định nghĩa dữ liệu được tham chiếu tới bằng cách sử dụng các định danh (nhãn hoặc ký hiệu) do lập trình viên chỉ định. Chúng có thể là các hằng số, các biến hay các thành phần của cấu trúc. Nhãn cũng có thể được gán cho các vùng mã thực thi như địa chỉ bắt đầu của một thủ tục hoặc đích nhảy tới của lệng GOTO. Hầu hết các trình hợp dịch đều có khả năng quản lý các nhãn một cách linh hoạt, giúp cho lập trình viên thao tác trên nhiều không gian tên khác nhau, tự động tính độ lệch địa chỉ trong các cấu trúc dữ liệu và tham chiếu tới các nhãn chứa giá trị định trước hay kết quả của một tính toán.
Chú dẫn (Comments). Giống như nhiều ngôn ngữ máy tính khác, hợp ngữ cũng hỗ trợ việc thêm các chú dẫn vào trong mã nguồn, chúng sẽ được trình hợp dịch bỏ qua trong quá trình biên dịch
Tập lệnh bó (Macros). Hầu hết các trình hợp dịch đều nhúng ngôn ngữ macro vào tập lệnh chính. Lập trình viên dùng macro để tránh phải lặp lại những đoạn mã tương tự, trong quá trình tiền biên dịch tùy vào các đối số của macro mà các lệnh trong thân macro sẽ được sửa đổi và chèn vào vị trí gọi macro. Ngoài ra macro cũng được nhà sản xuất thiết bị dùng để đóng gói các phép tính đặc biệt ví dụ như:
Các bộ vi xử lý 8 bit thường dùng macro để tăng hoặc giảm một giá trị 16 bit lưu trong hai byte liên tục, đây là phép toán thường phải thực hiện trong ba hoặc bốn chỉ thị lệnh đơn lẻ. (bộ vi xử lý MOS Technology 6502)
Nhà sản xuất cũng hỗ trợ các macro để dùng cho các giao tiếp hệ thống như các thao tác vào/ra (I/O) hay các yêu cầu cấp thấp từ hệ điều hành. Trong các máy tính lớn của IBM, các thư viện macro khổng lồ cung cấp các phương thức truy xuất và các dịch vụ hệ thống khác
Những tính năng trên được mượn từ các thiết kế ngôn ngữ bậc cao nên đã đơn giản hóa những vấn đề trong lập trình và bảo trì mã nguồn cấp thấp. Mã nguồn hợp ngữ thô cũng có thể tạo ra bằng các trình biên dịch ngôn ngữ bậc cao (compiler) hoặc bằng các trình phân dịch mã máy (disassembler), nhưng chúng thường không có chú dẫn cũng như các định danh dễ hiểu nên rất khó đọc.
Ngoài các đặc tính cơ bản ở trên, tuy nhiên vài hợp ngữ cũng có những tính năng ngoại lệ như:
Nhiều trình hợp dịch bao gồm các ngôn ngữ macro rất phức tạp, cho phép phối hợp với các phần tử của ngôn ngữ bậc cao như các biến tượng trưng, các lệnh điều kiện, các thao tác chuỗi và các phép tính số học. Do đó một macro có thể thay thế một lượng lớn các lệnh hợp ngữ hoặc các định nghĩa dữ liệu dựa trên các tham số của nó. Nó có thể dùng để sinh ra các cấu trúc kiểu bản ghi hay các vòng lặp "mở" (unrolled) hoặc dựa trên các tham số phức tạp nó có thể giải quyết trọn vẹn một thuật giải.