So sánh nhỏ về cú pháp câu lệnh ASM giữa AT&T và Intel

So sánh nhỏ về cú pháp câu lệnh ASM giữa AT&T và Intel

Link gốc:
http://www.imada.sdu.dk/Courses/DM18/Litteratur/IntelnATT.htm

Người dịch:
Ngôn ngữ Assembly không phải là ngôn ngữ tốt để viết ứng dụng,nhất là bây giờ đã là năm 2017. Có quá nhiều thứ hiệu quả và nhanh hơn. Tuy nhiên, khi cần tìm hiểu ở mức hệ điều hành, rồi driver thiết bị, thì việc đọc được Assembly là rất hữu ích.

Nội dung

Cú pháp ASM giữa Intel và AT&T có rất nhiều điềm khác nhau rõ rệt. Điều này nhiều khi dẫn đến sự nhầm lẫn khi một người đã học một ASM của Intel trước rồi sang học ASM của AT&T hoặc ngoặc lại. Bài này, chúng ta sẽ xem xét những cái khác biệt cơ bản đó.

Tiếp tục đọc

Lệnh MOV trong Assembly

Lệnh MOV trong Assembly

Link gốc: http://www5c.biglobe.ne.jp/~ecb/assembler/2_1.html

#Lệnh MOV

1. Lệnh MOV

Lệnh MOV, có thể nói là lệnh cơ bản nhất, có tần số sử dụng nhiều nhất trong bất cứ hệ tính toàn nào.
Làm bất cứ cái gì, đều có bao gồm sao chép dữ liệu trong đó. Nói là chức năng sao chép thôi, chứ thực sự nó bao hàm sao chép, truyền dữ liệu. Đó có thể là từ bộ nhớ (các loại RAM) vào thanh ghi, từ thanh ghi vào bộ nhớ, từ một giá trị nào đó xuống thanh ghi hoặc bộ nhớ chẳng hạn.
Tuy nhiên hãy nhớ rằng KHÔNG THỂ CHUYỂN DỮ LIỆU TỪ BỘ NHỚ SANG BỐ NHỚ ĐƯỢC,
bởi vì BỘ NHỚ ĐƯỢC TRUY CẬP THEO BUS (20bit hoặc 32bit), MỖI LẦN TRUY CẬP BỘ NHỚ CHỈ CÓ THỂ TRUY CẬP MỘT ĐỊA CHỈ MÀ THÔI

Lệnh MOV có 2 tham số, được gọi là Operand, nó giống như bên dưới đây:

MOV DEST, SOURCE

Lệnh này theo cú pháp Intel nha.
Chuyển (Copy) dữ liệu từ SRC đến DEST
SRC, DEST: là địa chỉ thanh ghi hoặc bộ nhớ, bỏ trường hợp cả 2 là bộ nhớ.

Một số ví dụ:

MOV AX, BX : Copy nội dung từ thanh ghi BX sang thanh ghi AX
MOV AL,10  : Lưu giá trị 10 vào thanh ghi AL

Một số chú ý:
- Không thể chuyển dữ liệu giữa bộ nhớ với nhau.
- Nguồn và đích chuyển dữ liệu phải có cùng kích thước
- Không thể chuyển giá giá trị vào thanh ghi segment

Giới thiệu về lập trình Assembly trên Linux (AT&T Style không phải Intel Style)

Tham khảo
– Sách : AT&T Assembly Language, Richard Blum

1. Ngôn ngữ Assembly là gì?

  • Ở mức thấp nhất, Process chỉ hiểu instruction code
  • Instruction Code là các mã nhị phân chứa các thành phần: Instruction prefix, Opcode, ModR/M, SIB, Displacement, Data Element.
  • Người ta hoàn toàn có thể viết chương trình bằng instruction code, nhưng nó sẽ cực kì khó nhọc, bởi ta chỉ thấy không gì khác ngoài các byte nối tiếp nhau.
  • Việc sử dụng các ngôn ngữ bậc cao giúp việc viết chương trình dễ dàng hơn rất nhiều, vì trình biên dịch hoặc thông dịch đảm nhiệm việc chuyển mã ngôn ngữ bậc cao trực tiếp hoặc gián tiếp sang instruction code để chạy.
  • Tuy nhiên, việc sinh instruction code của trình biên dịch/thông dịch không phải luôn luôn hiệu quả. Tiếp tục đọc