Tôi đã học Assembly 32bit như thế nào (Phần 2)

Sau khi ôn lại các kiến thức nền tảng về biểu diễn dữ liệu, phần tiếp theo chúng ta cần nắm vững để có thể code Assembly 32bit là kiến thức về các thanh ghi.

3. Các thanh ghi 32 bit

Trong Assembly, các lệnh sẽ rất gần với mã máy. Đối với máy tính thì không có khái niệm biến như chúng ta thường sử dụng trong các ngôn ngữ bậc cao.

Thay vào đó, chúng ta sẽ thao tác qua các thanh ghi và bộ nhớ.

Thanh ghi có sở là gì

  • Cờ chẵn lẻ (Parity Flag - PF) bằng 0 khi số lượng bit 1 trong trong kết quả của phép toán số học là một số chẵn, và bằng 1 khi số lượng bit 1 là một số lẻ. Trong một số trường hợp, PF còn được dùng để kiểm tra lỗi.

Trong các cờ trên thì DF, IF và TF là 3 cờ điều khiển. OF, SF, ZF, CF, AF và PF là 6 cờ trạng thái.

3.3 Thanh ghi đoạn

Một chương trình Assembly được chia thành các đoạn (Segment) chứa dữ liệu, code và stack:

  • Code segment: chứa các mã lệnh thực thi. Thanh ghi đoạn code CS chứa địa chỉ bắt đầu của Code segment.
  • Data segment: chứa các biến, hằng số, dữ liệu của chương trình. Thanh ghi đoạn dữ liệu DS chứa địa chỉ bắt đầu của Data segment.
  • Stack segment: chứa dữ liệu và địa chỉ trả về của các chương trình con. Các dữ liệu này được lưu trữ theo cấu trúc Stack. Thanh ghi đoạn stack SS chứa địa chỉ bắt đầu của Stack segment.

Ngoài CS, DS và SS ra còn có các thanh ghi đoạn ES (Extra Segment Register), FS và GS cung cấp các phân đoạn bổ sung cho việc lưu trữ dữ liệu.

Các chương trình Assembly đều cần truy cập tới bộ nhớ. Tất cả vị trí trong bộ nhớ thuộc các phân đoạn đều phụ thuộc vào địa chỉ bắt đầu của phân đoạn đó. Do các thanh ghi đoạn lưu địa chỉ bắt đầu của phân đoạn, để xác định chính xác địa chỉ của 1 dữ liệu hoặc 1 lệnh thuộc phân đoạn, cần có thêm giá trị offset. Địa chỉ thực tế sẽ được tính bằng cách cộng thêm giá trị offset vào địa chỉ đầu phân đoạn.