✴️Basic Syntax

Một chương trình assembly được chia thành 3 phần chính:

  • data

  • bss

  • text

data section

Phần data được sử dụng để khai báo dữ liệu khởi tạo hoặc hằng số và tất nhiên là nó không thay đổi trong thời gian chạy, bạn có thể khai báo các giá trị hằng số khác nhau, tên tệp hoặc kích thước bộ đệm, v.v., trong phần này.

Cú pháp để khai báo data section là:

section .data

bss section

Phần này được sử dụng để khai báo các biến. Cú pháp để khai báo bss là:

section .bss

text section

Phần này được sử dụng để lưu giữ code. Phần này phải được bắt đầu bằngglobal _startđể nó nói cho kernel biết nơi code bắt đầu được chạy và thực thi:

Cú pháp để khai báo text section là:

section.text
   global _start
_start:
<code written here>

Comment

Để viết được comment thì ta thêm ";" vào trước mỗi câu comment.

add eax, ebx     ; adds ebx to eax

Các câu lệnh assembly

Câu lênh Assembly bao gồm 3 loại:

  • Executable instructions or instructions

  • Assembler directives or pseudo-ops, and

  • Macros

Trong đó:

Executable instructions hoặc instructions sẽ nói cho bộ xử lý việc nó phải làm. Mỗi instruction bao gồm một operation code (opcode). Mỗi executable instructions tạo ra một lệnh ngôn ngữ máy.

Assembler directives hoặc pseudo-ops sẽ nói cho trình biên dịch về các khía cạnh khác nhau của assembly process. Chúng không thể thực thi và tạo ra các lệnh ngôn ngữ máy.

Macro về cơ bản là một cơ chế thay thế văn bản.

Cú pháp của các câu lệnh Assembly.

Format chung của nó là:

[label]   instruction    <operands>   ;comment    

Về cơ bản thì nó gồm 2 phần: instruction <-- thực thi và operand or parameters. Ví dụ:

MOV EAX, 48    ; Transfer the value 48 in the mem to EAX

Và sau tất cả thì bạn đã có thể nắm được cấu trúc của một chương trình cần có rồi. Thì mình sẽ ví dụ về chương trình in ra "Hello World" như bao ngôn ngữ khác để bạn có thể bắt đầu đi đến những bài sau:

helloworld.asm
section .data
    msg db "Hello World!!"
    len equ $-msg  ;len of msg
section .text
    global _start

_start:
    ;syscall write
    mov edx, len
    mov ecx, msg
    mov ebx, 0x1
    mov eax, 0x4
    int 0x80
    ;syscall exit
    mov eax, 0x1
    int 0x80

Đây là câu lệnh giúp bạn có thể biên dịch được ra file ELF để thực thi.

nasm -f elf hello.asm
ld -m elf_i386 -s -o hello hello.o
output

Oke vậy phần này đã hoàn thành.

Bài tập cho bài hôm nay sẽ là:

In họ và tên+ sở thích của bản thân ra màn hình ví dụ như sau:

Chúc các bạn học tập vui vẻ 😊

Last updated