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 đó. ...

tháng 5 14, 2017

Lệnh MOV trong Assembly

Link gốc: http://www5c.biglobe.ne.jp/~ecb/assembler/2_1.html 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 ...

tháng 5 14, 2017

Tìm source code của USB Driver trên Linux

Ở bài Tìm driver cho Linux cũng đã nói qua rồi, nhưng bài này muốn chỉ ra chi tiết hơn một chú cho nhưng ai muốn đọc source. Cách tìm source code driver cho thiết bị USB 1. Nói qua về thiết bị USB Linux kernel xác định driver phù hợp cho thiết bị bằng 2 thông tin chính. Đó là Vendor (nhà sản xuất), và Product (sản phẩm). Thông tin về Vendor được mô tả bằng một id, trong source thường là idVendor. Thông tin về Product cũng được mô tả bằng một id, trong source thường là idProduct. 2 thông tin trên sẽ xác định duy nhất một loại thiết bị. Thông tin về id của mỗi Vendor, Product được đăng kí với tổ chức hỗ trợ USB. ...

tháng 4 23, 2017

Build, chạy nhân Linux trong QEMU ARM

Chạy một bản Linux tối giản trên Qemu ARM Bài này sẽ làm một ví dụ để chỉ ra sự liên quan giữa các thành phần của một hệ thống Linux thông qua việc build, chạy Kernel trên board vexpress-a9 mô phỏng bằng Qemu. Đó là Kernel, Root file system, Busybox, Init. 1. “Chém” chút về quá trình khởi động của Linux Về cơ bản, quá trình khởi động Linux có 2 giai đoạn. Giai đoạn đầu là load kernel lên RAM và chạy Giai đoạn thứ hai là kernle sẽ tự động mount hệ thống file rồi các ứng dụng trên hệ thống file được mount. Bất cứ bản Linux nào, dù lớn, dù bé đều thì tối thiểu phải có 2 giai đoạn ở trên. ...

tháng 4 10, 2017

4 thành phần của Embedded Linux

Ta biết rằng Linux chạy ở khắp nơi từ siêu máy tính, máy chủ, máy để bàn (máy xách tay), điện thoại (android)…cho đến các thiết bị gia dụng, gia đình. Khi sử dụng máy tính cá nhân, server ta dễ dàng “sờ” thấy được các thành phần của Linux như các tiến trình, shell..etc. Hầu hết các bản phân phối phổ biến làm hết những thứ liên quan đến phần cứng, nhân hệ điều hành, driver cho ta rồi. Ta thường chỉ quan tâm đến ứng dụng chạy trên đó thôi. ...

tháng 4 2, 2017

Phím tắt cho bash

Mặc định, bash sử dụng emacs mode, có thể chuyển sang vi mode được. Nếu sử dụng ở chế độ mặc định, thì dưới đây là một số shortcut hữu ích khi sử dụng. Chiều ngang : Di chuyển cơ bản Ctrl + b : (Backward) Di chuyển con trỏ sang trái về trước 1 kí tự Ctrl + f : (Fordware) Di chuyển con trỏ sang phải một kí tự. Ctrl + d : (Delete) Xóa kí tự ở vị trí con trỏ ...

tháng 4 2, 2017

Một số điều rút ra từ việc phải sử dụng command

Do yêu cầu bắt buộc nên gần đây phải làm việc với VIM. Thực ra vẫn dùng máy tính Windows để chạy các ứng dụng SSH Client, SCP, rồi thì Excel. Tuy nhiên, các thao tác chủ yếu với source, text file, là trên command. Mà trên command của Unix, hay Linux. Dù có trả qua bao nhiêu năm nữa, thì có vẻ chỉ có 2 trường phái là VIM và Emacs thôi. Nhiều người thích Emacs, cũng nhiều người thích VIM. ...

tháng 3 30, 2017

Chuyển sang dùng VI(M)

Chuyển sang dùng Vi Vi - Editor khá nhiều tuổi, có lẽ còn nhiều tuổi hơn của mình. Là editor phổ biến nhất trên hệ thống dòng lệnh Linux, Unix hoặc tương tự. Có Linux, bạn gần như sẽ có thể dùng Vi. Mà Linux thì có ở rất rất nhiều nơi. Có phải vì nó mặc định nên nó phổ biến??? Mình từng nghĩ vậy hoặc nghĩ chắc nó nhẹ nên người ta cài sẵn nó thôi chứ chức năng hoặc độ tiện dụng chắc tệ lắm. Vì thực ra, ở trường mình từng dùng 1, 2 lần thôi. Vì khi mới bắt đầu biết đến Linux, thì nó cũng có giao diện đồ họa khá tiện rồi. Thầy giáo lại là một emacs-fan nữa nên ít khi phải dùng Vi. Vi thường xuất hiện trong những câu chuyện chém gió về những pro chưa từng gặp, những hacker kiệt xuất, etc…Nào là pro toàn dùng Vim thôi, hay bọn hacker chắc dùng Vim kinh lắm… Đến gần đây, khi càng ngày càng muốn theo Embedded Linux, mình vẫn chưa sử dụng Vi bao giờ vì đơn giản, mọi thứ mình đang dùng (Notepadplusplus, Eclipse) khá ổn. Thế nhưng, từ giờ chắc phải suy nghĩ về việc học sử dụng nghiêm túc em Vim này. Nó đến từ việc mình bị bắt phải dùng khi bắt đầu việc mới. Thực ra mình cũng không ngại đâu, sẽ nhớ được thôi. Bí quá thì copy ra ngoài notepad++ rồi lại copy vào.:))) Nhưng không, mình đã lầm, Vim có nhiều thứ hơn mình nghĩ. Mới đang ở giai đoạn bắt đầu sử dụng Vim như là editor chính, cả công việc lẫn ở nhà. Nên cứ note tạm mấy cái mình thấy hữu ích và có thể xem đi xem lại thôi. ...

tháng 3 29, 2017

Một vài lệnh Bitbake hữu dụng

Có một vài lệnh hữu dụng được cộng đồng sử dụng board NXP chia sẻ, mình sẽ note ở đây cho dễ tìm vậy. Link tại đây. Lệnh Bitbake _bitbake <image> Nấu ra 1 “ảnh” (Image) _(Thêm tham số _-k đ_ể cho phép chạy đến hết kẻ cả có lỗi thực thi) bitbake <package> -c <task> Thực hiện 1 task của package nào đó. Ví dụ: Để “ép” bitbake compile lại kernel và build lại ảnh cho board imx, ta sẽ sử dụng : ...

tháng 2 19, 2017

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ả. Khi muốn động vào các kết quả được sinh ra từ trình biên dich/thông dịch ở trên, ta không khó có thể sử trực tiếp trên instruction code, một dạng dễ nhớ của các instruction code này được sinh ra để phục vụ việc này. Đó chính là Assembly Language. Vì gần như được chuyển sang instruction code của Processor nên Assemble Code gần như được gắn với Processor nào đó. Dù các lệnh của hầu hết bộ xử lý là tương tự nhau nhưng quy tắc gợi nhớ các mã Assembly dù chỉ khác nhau một chút thôi cũng khiến việc viết code cross-processor gần như là không thể rồi. Ta nói Assembly Language là nói đến 1 ngôn ngữ, nhưng thực chất mỗi Processor có 1 Assembly Language riêng của nó. Bởi vậy, để để lập trình với Assembly cho 1 Processor nào đó, ta cũng cần Assembler tương ứng cho Processor đó. 2. Intel ASM và AT&T ASM và ARM Các bộ xử lý cùng kiến trúc thường ít có thay đổi về Assembly Language, tuy nhiên 2 kiến trúc khác nhau thì thường có Assembly Language khác nhau ARM : Hiện tại chưa tìm hiểu được. Nếu bỏ qua ARM, ta có thể chia ra làm 2 loại Assembly Language sau theo tiêu chí lệnh gợi nhớ, đó là Intel và AT&T. Về sự khác nhau của 2 loại này: Hầu hết sự khác biệt xuất hiện ở một dài định dạng cụ thể. Nhưng những điểm khác nhau chính giữa Intel và AT&T được đưa ra dưới đây: AT&T sử dụng $ để kí hiệu, còn Intel thì không. Vì thế, khi biểu diễn giá trị 4, AT&T sẽ sử dụng $4, còn Intel thì đơn giản viết 4. ...

tháng 2 11, 2017