-->

WE ARE CME

CENTER OF MECHANICAL ENGINEERING

Khoa học & Công nghệ

Lập trình Assembly-Bài 1(tt)

1. Các section của chương trình:

Một chương trình Assembly có thể chia thành 3 section (phân đoạn): Data section, Bss session và Text section.

Phân đoạn data:

Được sử dụng để khai báo các dữ liệu khởi tạo và các hằng của chương trình. Dữ liệu ở đây sẽ không được thay đổi khi chạy chương trình.

Chúng ta có thể khai báo giá trị hằng, tên file, kích thước buffer,… tại đây.

Cú pháp:        section .data

Section này thường được gọi là data segment.

Phân đoạn bss:

Được sử dụng để khai báo các biến sử dụng trong chương trình

Cú pháp:        section .bss

Phân đoạn text:

Được sử dụng để giữ mã lệnh (code) của chương trình. Phân đoạn này phải bắt đầu với khai báo global _start, để báo với hệ điều hành (Kernel) vị trí bắt đầu của chương trình là tại đây.

Cú pháp:

 

section .text

   global _start

_start:

Section này thường được gọi là code segment.

2. Cú pháp câu lệnh Assembly:

Chương trình ngôn ngữ Assembly bao gồm 3 loại lệnh:

Executable instructions hoặc instructions: Đây là dạng lệnh gợi nhớ của ngôn ngữ máy. Processor sẽ dịch các lệnh này sang lệnh ngôn ngữ máy để thực thi.

Assembler directives hoặc pseudo-ops: Đây là các ướng dẫn biên dịch chương trình, nó chỉ có tác dụng với trình biên dịch nên không được dịch sang ngôn ngữ máy.

Macros: Chính là một tập lệnh được đặt tên. Ngay trong quá trình biên dịch chương trình, mỗi lệnh macro sẽ được thay bằng tập lệnh bên trong của nó.

Cú pháp câu lệnh Assembly:

[label]   mnemonic   [operands]   [;comment]

Trong đó:

- [label]: Có thể xem là tên đại diện của lệnh. Nó thường được sử dụng trong các đoạn lệnh có lệnh nhảy (jump), lệnh lặp (loop), lệnh gọi chương trình con (call),…

- Mnemonic: Tên của lệnh ở dạng gợi nhớ (như: mov, add, sub, int…). Đây là một trong các lệnh thuộc tập lệnh gợi nhớ của một processor nào đó. 

- [operands]: Đây là các đối tượng chịu sự tác động của lệnh: Biến, hằng, thanh ghi, địa chỉ ô nhớ,… Một lệnh ngôn ngữ Assembly có thể không có, có 1 hoặc 2 operand (toán hạng)

- [;comment]: Phần chú thích lệnh. Được đặt sau dấu chấm phẩy (;).

Ví dụ 1:

            AddReg:     Add    Eax, Ebx            ; Cộng nội dung Ebx vào Eax

                                                                        ; AddReg là label của lệnh này

Ví dụ 2:

inc       count              ; Tăng biế nhớ COUNT lên 1 đơn vị

mov    total, 48          ; Chuyển số 48 vào biến nhớ total

add     ah, bh            

and     mask1, 128  

add     marks, 10      

mov    al, 10             

3. Chương trình Assembly đầu tiên:

Chương trình sau đây in xâu Welcome to tuhocanninhmang.com ra màn hình:

section           .tex

global         _start  

_start:                                          ; điểm bắt đầu của chương trình

mov            edx, len          ; đặt độ dài của msg vào edx

mov            ecx, msg     

mov            ebx, 1                  

mov            eax, 4              ; gọi hàm 04 của ngắt 80h

int               0x80                ; để in xâu ra màn hình

; -------------------------

    mov            eax,1               ; gọi hà 01 của ngắt 80h

    int               0x80               ; để kết thúc chương trình

section           .data

msg     db        'Welcome to tuhocanninhmang.com', 0xa         

len       equ      $ - msg                       ; biến len chứa độ dài của xâu msg

Chương trình này sử dụng hàm 04 của ngắt 80h để in xâu và hàm 01 của ngắt 80h để kết thúc chương trình (bắt buộc đối với mọi chương trình). Điểm bắt đầu của chương trình là lệnh sau label _start.

4. Biên dịch và liên kết chương trình trong NASM

Chuẩn bị:

Tạo một thư mục trên đĩa (trên Linux hoặc trên Windows), và rồi copy vào đó tập tin chính của chương trình biên dịch NASM và các tập tin liên quan (D:\ASM).

Thực hiện:

B1: Sử dụng bất kỳ trình soạn thảo nào để viết chương trình, chỉ cần lưu tập tin với phần mở rộng là asm vào thư mục D:\ASM. Ví dụ: hello.asm.

B2: Dịch chương trình hello.asm ra hello.exe:

- Từ cửa sổ CMD, chuyển đến thư mục D:\ASM

- Tại dấu nhắc gõ:

NASM -f elf hello.asm

- Nếu không bị lỗi thì một tập tin đối tượng (kết quả dịch) được hình thành:hello.o

B3: Liên kết các tập tin đối tượng và tạo tập tin thực thi:

ld -m elf_i386 -s -o hello hello.o

B4: Chạy thử. Nếu không như mong muốn thì quay lại trình soạn thảo để chỉnh sửa chương trình sau đó tiến hành lại từ Bước 2.

BÀI VIẾT LIÊN QUAN:

Một công ty chế tạo phụ tùng thông minh biến mọi chiếc xe đạp thường thành xe đạp điện trong vòng vài giây, nhỏ gọn bỏ vừa balo

Chỉ với một phụ tùng nhỏ gọn, một chiếc xe đạp thường có thể biến thành một ...

Bài báo tạp chí quốc tế TIIJ

AN NEW INTEGRATED APPROACH FOR AN INTRODUCTION TO THE MECHATRONICS ENGINEERING ...

Bài báo đăng Tạp chí ngành cơ khí Việt Nam

The paper presents the researched results on design and manufacture of ...

Sửa lỗi USB hoặc thẻ nhớ SD không thể format ở Windows 10

Nếu bạn đang gặp phải vấn đề với việc format USB hay thẻ nhớ SD thì bài viết ...