Majelis - Sintaks Dasar
Program perakitan dapat dibagi menjadi tiga bagian -
Itu data bagian,
Itu bss bagian, dan
Itu text bagian.
The Data Bagian
Itu datasection digunakan untuk mendeklarasikan data atau konstanta yang diinisialisasi. Data ini tidak berubah saat runtime. Anda dapat mendeklarasikan berbagai nilai konstan, nama file, atau ukuran buffer, dll., Di bagian ini.
Sintaks untuk mendeklarasikan bagian data adalah -
section.data
The bss Bagian
Itu bssbagian digunakan untuk mendeklarasikan variabel. Sintaks untuk mendeklarasikan bagian bss adalah -
section.bss
The teks Bagian
Itu textbagian digunakan untuk menyimpan kode yang sebenarnya. Bagian ini harus dimulai dengan deklarasiglobal _start, yang memberi tahu kernel tempat eksekusi program dimulai.
Sintaks untuk mendeklarasikan bagian teks adalah -
section.text
global _start
_start:
Komentar
Komentar bahasa assembly dimulai dengan titik koma (;). Ini mungkin berisi karakter yang dapat dicetak termasuk kosong. Itu bisa muncul di baris dengan sendirinya, seperti -
; This program displays a message on screen
atau, di baris yang sama bersama dengan instruksi, seperti -
add eax, ebx ; adds ebx to eax
Pernyataan Bahasa Majelis
Program bahasa assembly terdiri dari tiga jenis pernyataan -
- Instruksi atau instruksi yang dapat dijalankan,
- Arahan Assembler atau pseudo-ops, dan
- Macros.
Itu executable instructions atau sederhananya instructionsberi tahu prosesor apa yang harus dilakukan. Setiap instruksi terdiri darioperation code(opcode). Setiap instruksi yang dapat dieksekusi menghasilkan satu instruksi bahasa mesin.
Itu assembler directives atau pseudo-opsberi tahu assembler tentang berbagai aspek proses perakitan. Ini tidak dapat dieksekusi dan tidak menghasilkan instruksi bahasa mesin.
Macros pada dasarnya adalah mekanisme substitusi teks.
Sintaks Pernyataan Bahasa Majelis
Pernyataan bahasa assembly dimasukkan satu pernyataan per baris. Setiap pernyataan mengikuti format berikut -
[label] mnemonic [operands] [;comment]
Bidang dalam tanda kurung siku adalah opsional. Sebuah instruksi dasar memiliki dua bagian, yang pertama adalah nama instruksi (atau mnemonik), yang akan dijalankan, dan yang kedua adalah operan atau parameter dari perintah.
Berikut adalah beberapa contoh dari pernyataan bahasa assembly -
INC COUNT ; Increment the memory variable COUNT
MOV TOTAL, 48 ; Transfer the value 48 in the
; memory variable TOTAL
ADD AH, BH ; Add the content of the
; BH register into the AH register
AND MASK1, 128 ; Perform AND operation on the
; variable MASK1 and 128
ADD MARKS, 10 ; Add 10 to the variable MARKS
MOV AL, 10 ; Transfer the value 10 to the AL register
Program Hello World dalam Sidang
Kode bahasa assembly berikut menampilkan string 'Hello World' di layar -
section .text
global _start ;must be declared for linker (ld)
_start: ;tells linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!', 0xa ;string to be printed
len equ $ - msg ;length of the string
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
Hello, world!
Mengompilasi dan Menghubungkan Program Perakitan di NASM
Pastikan Anda telah mengatur jalur nasm dan ldbiner dalam variabel lingkungan PATH Anda. Sekarang, ambil langkah-langkah berikut untuk menyusun dan menautkan program di atas -
Ketik kode di atas menggunakan editor teks dan simpan sebagai hello.asm.
Pastikan Anda berada di direktori yang sama dengan tempat Anda menyimpannya hello.asm.
Untuk merakit program, ketik nasm -f elf hello.asm
Jika ada kesalahan, Anda akan ditanya tentang itu pada tahap ini. Jika tidak, file objek program Anda bernamahello.o akan dibuat.
Untuk menautkan file objek dan membuat file yang dapat dieksekusi bernama hello, ketik ld -m elf_i386 -s -o hello hello.o
Jalankan program dengan mengetik ./hello
Jika Anda telah melakukan semuanya dengan benar, itu akan menampilkan 'Halo, dunia!' di layar.