Komponen dasar bahasa rakitan dan struktur instruksi. Karakteristik umum sistem perintah bahasa Assembler untuk IBM-PC (kumpulan perintah dasar, metode dasar pengalamatan operan)

Komponen dasar bahasa rakitan dan struktur instruksi.  Karakteristik umum sistem perintah bahasa Assembler untuk IBM-PC (kumpulan perintah dasar, metode dasar pengalamatan operan)
Komponen dasar bahasa rakitan dan struktur instruksi. Karakteristik umum sistem perintah bahasa Assembler untuk IBM-PC (kumpulan perintah dasar, metode dasar pengalamatan operan)

Topik 2.5 Dasar-dasar pemrograman prosesor

Seiring bertambahnya panjang program, semakin sulit untuk mengingat kode berbagai operasi. Mnemonik memberikan beberapa bantuan dalam hal ini.

Bahasa pengkodean perintah simbolik disebut perakit.

Bahasa perakitan adalah bahasa yang setiap ucapannya berhubungan dengan tepat satu perintah mesin.

Perakitan disebut konversi program dari bahasa rakitan, yaitu menyiapkan program dalam bahasa mesin dengan mengganti nama simbolik operasi dengan kode mesin, dan alamat simbolik dengan angka absolut atau relatif, serta menggabungkan program perpustakaan dan menghasilkan urutan instruksi simbolik dengan menentukan spesifik parameter dalam tim mikro. Program ini biasanya terletak di ROM atau dimasukkan ke dalam RAM dari beberapa media eksternal.

Bahasa assembly memiliki beberapa ciri yang membedakannya dengan bahasa tingkat tinggi:

1. Ini adalah korespondensi satu-satu antara pernyataan bahasa rakitan dan instruksi mesin.

2. Pemrogram bahasa rakitan memiliki akses ke semua objek dan instruksi yang ada di mesin target.

Memahami dasar-dasar pemrograman dalam bahasa berorientasi mesin berguna untuk:



Pemahaman yang lebih baik tentang arsitektur PC dan penggunaan komputer yang lebih kompeten;

Untuk mengembangkan struktur algoritma program yang lebih rasional untuk memecahkan masalah terapan;

Kemampuan untuk melihat dan memperbaiki program yang dapat dieksekusi dengan ekstensi .exe dan .com, yang dikompilasi dari bahasa tingkat tinggi apa pun, jika program sumber hilang (dengan memanggil program tertentu di debugger program DEBUG dan mendekompilasi tampilannya dalam perakitan bahasa);

Mengkompilasi program untuk memecahkan masalah yang paling kritis (program yang ditulis dalam bahasa berorientasi mesin biasanya lebih efektif - lebih pendek dan lebih cepat sebesar 30-60 persen dari program yang diperoleh sebagai hasil terjemahan dari bahasa tingkat tinggi)

Mengimplementasikan prosedur-prosedur yang termasuk dalam program utama dalam bentuk fragmen-fragmen tersendiri apabila tidak dapat diimplementasikan baik dalam bahasa tingkat tinggi yang digunakan maupun menggunakan prosedur layanan OS.

Sebuah program dalam bahasa assembly hanya dapat dijalankan pada satu keluarga komputer, sedangkan program yang ditulis dalam bahasa tingkat tinggi berpotensi dapat dijalankan pada mesin yang berbeda.

Alfabet bahasa assembly terdiri dari karakter ASCII.

Angka hanyalah bilangan bulat. Ada:

Angka biner, diakhiri dengan huruf B;

Angka desimal diakhiri dengan huruf D;

Angka heksadesimal diakhiri dengan huruf H.

RAM, register, penyajian data

Untuk serangkaian anggota parlemen tertentu, bahasa pemrograman individual digunakan - bahasa assembly.

Bahasa rakitan menempati posisi perantara antara kode mesin dan bahasa tingkat tinggi. Pemrograman dalam bahasa ini lebih mudah. Sebuah program dalam bahasa rakitan memanfaatkan kemampuan mesin tertentu (lebih tepatnya, MP) secara lebih efisien daripada program dalam bahasa tingkat tinggi (yang lebih sederhana bagi seorang programmer daripada assembler). Mari kita lihat prinsip dasar pemrograman dalam bahasa berorientasi mesin menggunakan contoh bahasa assembly untuk MP KR580VM80. Metodologi umum digunakan untuk memprogram dalam bahasa tersebut. Teknik teknis khusus untuk merekam program dikaitkan dengan kekhasan arsitektur dan sistem perintah MP target.

Model perangkat lunak sistem mikroprosesor berdasarkan MP KR580VM80

Model perangkat lunak MPS sesuai dengan Gambar 1

Memori Port MP

S Z AC P C

Gambar 1

Dari sudut pandang programmer, MP KR580VM80 memiliki register yang dapat diakses program berikut ini.

A– register akumulator 8-bit. Ini adalah daftar utama anggota parlemen. Setiap operasi yang dilakukan di ALU melibatkan penempatan salah satu operan yang akan diproses di akumulator. Hasil suatu operasi di ALU juga biasanya disimpan di A.

B, C, D, E, H, L– Register tujuan umum (GPR) 8-bit. Memori dalaman anggota parlemen. Dirancang untuk menyimpan informasi yang diproses, serta hasil operasi. Saat memproses kata 16-bit, register membentuk pasangan BC, DE, HL, dan register ganda disebut huruf pertama - B, D, H. Dalam pasangan register, register pertama adalah yang tertinggi. Register H dan L memiliki properti khusus, digunakan untuk menyimpan data dan untuk menyimpan alamat sel RAM 16-bit.

FL– register bendera (sign register) Register 8-bit yang didalamnya disimpan lima tanda hasil operasi aritmatika dan logika dalam MP. Format FL sesuai gambar

Bit C (CY - carry) - carry, disetel ke 1 jika ada carry dari byte orde tinggi saat melakukan operasi aritmatika.

Bit P (paritas) – paritas, disetel ke 1 jika jumlah bit hasilnya genap.

Digit AC adalah carry tambahan, yang dirancang untuk menyimpan nilai carry dari hasil tetrad orde rendah.

Bit Z (nol) – disetel ke 1 jika hasil operasinya 0.

Bit S (tanda) – diatur ke 1 jika hasilnya negatif, dan 0 jika hasilnya positif.

SP– penunjuk tumpukan, register 16-bit, dirancang untuk menyimpan alamat sel memori tempat byte terakhir yang dimasukkan ke tumpukan ditulis.

RS– penghitung program (program counter), register 16-bit, dirancang untuk menyimpan alamat instruksi selanjutnya yang akan dieksekusi. Isi dari penghitung program secara otomatis bertambah 1 segera setelah mengambil byte instruksi berikutnya.

Area memori awal alamat 0000Н – 07FF berisi program kontrol dan program demonstrasi. Ini adalah area ROM.

0800 – 0AFF - area alamat untuk merekam program yang sedang dipelajari. (RAM).

0В00 – 0ВВ0 - area alamat untuk menulis data. (RAM).

0ВВ0 – alamat awal tumpukan. (RAM).

Tumpukan adalah area RAM yang terorganisir secara khusus yang dimaksudkan untuk penyimpanan sementara data atau alamat. Nomor terakhir yang ditulis ke tumpukan akan muncul terlebih dahulu. Penunjuk tumpukan menyimpan alamat sel tumpukan terakhir tempat informasi ditulis. Ketika subrutin dipanggil, alamat pengirim ke program utama secara otomatis disimpan di tumpukan. Sebagai aturan, pada awal setiap subrutin, isi semua register yang terlibat dalam eksekusinya disimpan di tumpukan, dan pada akhir subrutin, isi tersebut dipulihkan dari tumpukan.

Format data dan struktur perintah bahasa assembly

Memori MP KR580VM80 adalah larik kata 8-bit yang disebut byte. Setiap byte memiliki alamat 16-bitnya sendiri, yang menentukan posisinya dalam urutan sel memori. MP dapat mengalamatkan memori 65536 byte, yang dapat ditampung dalam ROM dan RAM.

Format Data

Data disimpan dalam memori sebagai kata-kata 8-bit:

D7 D6 D5 D4 D3 D2 D1 D0

Bit yang paling tidak signifikan adalah bit 0, bit yang paling signifikan adalah bit 7.

Suatu perintah dicirikan oleh formatnya, yaitu jumlah bit yang dialokasikan untuknya, yang dibagi byte demi byte ke dalam bidang fungsional tertentu.

Format Perintah

Perintah MP KR580VM80 memiliki format satu, dua atau tiga byte. Perintah multibyte harus ditempatkan dalam bahasa yang berdekatan. Format perintah bergantung pada spesifikasi operasi yang dilakukan.

Byte pertama dari perintah berisi kode operasi, ditulis dalam bentuk mnemonik.

Ini menentukan format perintah dan tindakan yang harus dilakukan oleh MP pada data selama eksekusi, dan metode pengalamatan, dan mungkin juga berisi informasi tentang lokasi data.

Byte kedua dan ketiga mungkin berisi data tempat operasi dilakukan, atau alamat yang menunjukkan lokasi data. Data di mana tindakan dilakukan disebut operan.

Format perintah byte tunggal sesuai Gambar 2

Gambar 4

Dalam perintah bahasa rakitan, kode operasi memiliki bentuk penulisan kata-kata bahasa Inggris yang disingkat - notasi mnemonik. Mnemonik (dari bahasa Yunani mnemonik - seni menghafal) memudahkan mengingat perintah berdasarkan tujuan fungsionalnya.

Sebelum dieksekusi, program sumber diterjemahkan menggunakan program penerjemahan yang disebut assembler ke dalam bahasa kombinasi kode – bahasa mesin, dalam bentuk ini ditempatkan di memori MP dan kemudian digunakan saat menjalankan perintah.


Mengatasi metode

Semua kode operan (input dan output) harus ditempatkan di suatu tempat. Mereka dapat ditempatkan di register internal MP (yang paling nyaman dan pilihan cepat). Mereka dapat ditempatkan di memori sistem(opsi paling umum). Terakhir, mereka dapat ditempatkan di perangkat I/O (kasus yang paling jarang). Lokasi operan ditentukan oleh kode instruksi. Ada beberapa metode berbeda dimana kode instruksi dapat menentukan dari mana mengambil operan masukan dan di mana menempatkan operan keluaran. Metode-metode ini disebut metode pengalamatan.

Untuk MP KR580VM80, ada metode pengalamatan berikut:

Langsung;

Daftar;

Tidak langsung;

Ditumpuk.

Langsung pengalamatan mengasumsikan bahwa operan (input) terletak di memori segera setelah kode instruksi. Operan biasanya berupa konstanta yang perlu dikirim ke suatu tempat, ditambahkan ke sesuatu, dll. data terkandung dalam byte kedua atau kedua dan ketiga dari perintah, dengan byte data rendah terletak di byte kedua dari perintah, dan byte tinggi di byte perintah ketiga.

Lurus Pengalamatan (alias absolut) mengasumsikan bahwa operan (input atau output) terletak di memori pada alamat yang kodenya terletak di dalam program segera setelah kode instruksi. Digunakan dalam perintah tiga byte.

Daftar pengalamatan mengasumsikan bahwa operan (input atau output) ada dalam register internal MP. Digunakan dalam perintah byte tunggal

Tidak langsung Pengalamatan (implisit) mengasumsikan bahwa register internal MP tidak berisi operan itu sendiri, tetapi alamatnya di memori.

Tumpukan pengalamatan mengasumsikan bahwa perintah tersebut tidak mengandung alamat. Mengatasi sel memori menggunakan isi register SP 16-bit (stack pointer).

Sistem komando

Sistem perintah MP adalah daftar lengkap tindakan dasar yang mampu dilakukan MP. MP yang dikendalikan oleh perintah ini melakukan langkah sederhana, seperti aritmatika dasar dan operasi logis, transfer data, perbandingan dua nilai, dll. Jumlah perintah MP KR580VM80 adalah 78 (termasuk modifikasi 244).

Kelompok perintah berikut dibedakan:

Perpindahan data;

Hitung;

Logis;

Perintah lompat;

Perintah input/output, kontrol dan tumpukan.


Simbol dan singkatan yang digunakan saat menjelaskan perintah dan menyusun program

Simbol Pengurangan
ALAMAT alamat 16-bit
DATA data 8-bit
DATA 16 data 16-bit
PELABUHAN Alamat perangkat I/O 8-bit
byte 2 Byte kedua dari perintah
byte 3 Byte ketiga dari perintah
R, R1, R2 Salah satu register: A, B, C, D, E, H, L
R.P. Salah satu pasangan register: B - menentukan pasangan BC; D - menentukan pasangan DE; H – menentukan pasangan HL
RH Daftar pertama pasangan tersebut
R.L. Daftar kedua dari pasangan tersebut
Λ Perkalian logis
V Tambahan yang logis
Penambahan modulo dua
M Sel memori yang alamatnya menentukan isi pasangan register HL, yaitu M = (HL)

Struktur dalam bahasa assembly

Array yang kita bahas di atas adalah kumpulan elemen dengan tipe yang sama. Namun seringkali dalam aplikasi ada kebutuhan untuk mempertimbangkan kumpulan data tertentu jenis yang berbeda sebagai beberapa tipe tunggal.

Hal ini sangat penting, misalnya untuk program database, di mana diperlukan untuk mengasosiasikan kumpulan data yang bertipe berbeda dengan satu objek.

Misalnya, sebelumnya kita melihat Listing 4, di mana kita bekerja dengan array elemen tiga byte. Setiap elemen, pada gilirannya, terdiri dari dua elemen dengan tipe berbeda: bidang penghitung satu byte dan bidang dua byte, yang dapat membawa beberapa informasi lain yang diperlukan untuk penyimpanan dan pemrosesan. Jika pembaca familiar dengan salah satu bahasa tingkat tinggi, maka dia tahu bahwa objek seperti itu biasanya dideskripsikan menggunakan tipe data khusus - struktur.

Untuk meningkatkan kegunaan bahasa assembly, tipe data ini juga diperkenalkan ke dalamnya.

Menurut definisi struktur adalah tipe data yang terdiri dari sejumlah elemen tetap dengan tipe berbeda.

Untuk menggunakan struktur dalam suatu program, Anda harus melakukan tiga langkah:

    Mengatur templat struktur .

    Intinya, ini berarti mendefinisikan tipe data baru, yang selanjutnya dapat digunakan untuk mendefinisikan variabel tipe ini.

    Mendefinisikan contoh struktur .

    Tahap ini melibatkan inisialisasi variabel tertentu dengan struktur yang telah ditentukan sebelumnya (menggunakan template).

    Mengatur mengakses elemen struktur .

Sangat penting bagi Anda untuk memahami sejak awal apa perbedaannya keterangan struktur dalam program dan itu definisi.

Menggambarkan struktur dalam suatu program berarti menunjukkan garis besar atau polanya; memori tidak dialokasikan.

Templat ini hanya dapat dianggap sebagai informasi bagi penerjemah tentang lokasi kolom dan nilai defaultnya.

Mendefinisikan struktur berarti menginstruksikan penerjemah untuk mengalokasikan memori dan memberikan nama simbolis ke area memori ini.

Suatu struktur dapat dideskripsikan dalam suatu program hanya sekali, tetapi dapat didefinisikan berkali-kali.

Deskripsi templat struktur

Deskripsi templat struktur memiliki sintaks berikut:

struktur_nama STRUC

struktur_nama BERAKHIR

Di Sini adalah urutan arahan deskripsi data db, dw, hh, dq Dan dt.

Operannya menentukan ukuran bidang dan, jika perlu, nilai awal. Nilai-nilai ini mungkin akan menginisialisasi bidang terkait saat menentukan struktur.

Seperti yang telah kami catat saat menjelaskan template, memori tidak dialokasikan, karena ini hanya informasi untuk penerjemah.

Lokasi Templat dalam program dapat berubah-ubah, tetapi mengikuti logika penerjemah satu arah, templat tersebut harus ditempatkan sebelum tempat variabel dengan tipe struktur tertentu ditentukan. Artinya, ketika mendeskripsikan suatu variabel dengan tipe struktur tertentu pada suatu segmen data, templatnya harus ditempatkan di awal atau sebelum segmen data.

Mari kita pertimbangkan bekerja dengan struktur menggunakan contoh pemodelan database tentang karyawan departemen tertentu.

Untuk mempermudah, untuk menghindari masalah dalam mengonversi informasi saat masuk, kami setuju bahwa semua bidang adalah bidang karakter.

Mari kita tentukan struktur rekaman database ini dengan templat berikut:

Mendefinisikan data dengan tipe struktur

Untuk menggunakan struktur yang dijelaskan menggunakan template dalam suatu program, Anda harus mendefinisikan variabel dengan tipe struktur ini. Untuk ini, konstruksi sintaksis berikut digunakan:

[nama variabel] nama_struktur

    nama variabel- pengidentifikasi variabel tipe struktur ini.

    Menentukan nama variabel adalah opsional. Jika Anda tidak menentukannya, area memori dengan ukuran yang sama dengan jumlah panjang semua elemen struktur akan dialokasikan begitu saja.

    daftar nilai- daftar nilai awal elemen struktur yang diapit tanda kurung siku, dipisahkan dengan koma.

    Penugasannya juga opsional.

    Jika daftar tidak sepenuhnya ditentukan, maka semua bidang struktur untuk variabel ini diinisialisasi dengan nilai dari templat, jika ada yang ditentukan.

    Dimungkinkan untuk menginisialisasi masing-masing bidang, tetapi dalam kasus ini bidang yang hilang harus dipisahkan dengan koma. Bidang yang dihilangkan akan diinisialisasi dengan nilai dari templat struktur. Jika, ketika mendefinisikan variabel baru dengan tipe struktur tertentu, kita setuju dengan semua nilai bidang dalam templatnya (yaitu, yang ditentukan secara default), maka kita hanya perlu menulis tanda kurung sudut.

    Misalnya: pekerja pemenang.

Sebagai contoh, mari kita definisikan beberapa variabel dengan tipe struktur yang dijelaskan di atas.

Metode untuk bekerja dengan struktur

Ide untuk memperkenalkan tipe terstruktur ke dalam bahasa pemrograman apa pun adalah dengan menggabungkan variabel dari tipe yang berbeda ke dalam satu objek.

Bahasa harus memiliki sarana untuk mengakses variabel-variabel ini dalam struktur tertentu. Untuk merujuk ke bidang struktur tertentu dalam suatu perintah, operator khusus digunakan - simbol ". " (titik). Ini digunakan dalam sintaks berikut:

    alamat_ekspresi- pengidentifikasi variabel dari beberapa tipe struktural atau ekspresi dalam tanda kurung sesuai dengan aturan sintaksis yang ditunjukkan di bawah ini (Gbr. 1);

    nama_bidang_struktur- nama bidang dari templat struktur.

    Faktanya, ini juga merupakan alamat, atau lebih tepatnya, offset bidang dari awal struktur.

Jadi operatornya" . " (titik) mengevaluasi ekspresi

Beras. 5. Sintaks ekspresi alamat dalam operator akses bidang struktur

Mari kita tunjukkan dengan menggunakan contoh struktur yang telah kita definisikan. pekerja beberapa teknik untuk bekerja dengan struktur.

Misalnya, ekstrak ke kapak nilai bidang seiring bertambahnya usia. Karena kecil kemungkinan usia seseorang yang bekerja akan lebih dari 99 tahun, maka setelah memasukkan isi kolom karakter ini ke dalam register kapak Akan lebih mudah untuk mengubahnya menjadi representasi biner dengan perintah iklan.

Hati-hati karena prinsip penyimpanan data “byte rendah pada alamat rendah” digit usia tertinggi akan ditempatkan al, dan yang termuda - masuk Ah.

Untuk melakukan penyesuaian cukup gunakan perintah xchg al, ah:

mov ax,word ptr sotr1.age ;di al age sotr1

atau Anda dapat melakukannya seperti ini:

Pekerjaan lebih lanjut dengan array struktur dilakukan dengan cara yang sama seperti array satu dimensi. Beberapa pertanyaan muncul di sini:

Apa yang harus dilakukan dengan ukuran dan cara mengatur pengindeksan elemen array?

Mirip dengan pengidentifikasi lain yang ditentukan dalam program, penerjemah memberikan atribut tipe ke nama tipe struktur dan nama variabel dengan tipe struktur. Nilai atribut ini adalah ukuran dalam byte yang ditempati oleh bidang struktur ini. Anda dapat mengambil nilai ini menggunakan operator jenis.

Setelah ukuran instance struktur diketahui, pengorganisasian pengindeksan dalam array struktur tidaklah terlalu sulit.

Misalnya:

Bagaimana cara menyalin bidang dari satu struktur ke bidang terkait di struktur lain? Atau bagaimana cara menyalin seluruh struktur? Mari kita salin bidangnya nama karyawan ketiga di lapangan nama karyawan kelima:

pekerja mas_sotr 10 dup()

pindah bx, offset mas_sotr

mov si,(ketik pekerja)*2 ;si=77*2

mov di,(ketik pekerja)*4 ;si=77*4

Bagi saya, menjadi seorang programmer cepat atau lambat akan membuat seseorang terlihat seperti ibu rumah tangga yang baik. Dia, seperti dia, terus-menerus mencari tempat untuk menyimpan sesuatu, memotong dan membuat makan siang yang enak dari makanan yang minimal. Dan jika ini berhasil, maka kepuasan moral yang Anda peroleh tidak kalah, bahkan mungkin lebih, dibandingkan dari makan malam yang menyenangkan bersama seorang ibu rumah tangga. Derajat kepuasan ini, menurut saya, tergantung pada derajat kecintaan seseorang terhadap profesinya.

Di sisi lain, keberhasilan dalam pengembangan perangkat lunak dan perangkat keras agak membuat programmer rileks, dan sering kali ada situasi yang mirip dengan pepatah terkenal tentang lalat dan gajah - untuk menyelesaikan beberapa masalah kecil, alat berat digunakan, efektivitasnya, secara umum, hanya signifikan ketika pelaksanaan proyek yang relatif besar.

Kehadiran dua jenis data berikut dalam bahasa tersebut mungkin dijelaskan oleh keinginan “ibu rumah tangga” untuk memanfaatkan area kerja meja (RAM) seefisien mungkin saat menyiapkan makanan atau untuk menempatkan produk (program data).

Pemrograman pada level instruksi mesin adalah level minimum dimana program dapat ditulis. Sistem instruksi mesin harus memadai untuk melaksanakan tindakan yang diperlukan dengan mengeluarkan instruksi ke perangkat keras komputer.

Setiap perintah mesin terdiri dari dua bagian:

  • operasional - menentukan “apa yang harus dilakukan”;
  • operan - mendefinisikan objek pemrosesan, "apa yang harus dilakukan".

Perintah mesin mikroprosesor yang ditulis dalam bahasa assembly berbentuk satu baris dengan bentuk sintaksis sebagai berikut:

label perintah/direktif operan ;komentar

Pada saat yang sama bidang yang diperlukan sejalan adalah perintah atau arahan.

Label, perintah/direktif, dan operan (jika ada) dipisahkan oleh setidaknya satu karakter spasi atau tab.

Jika suatu perintah atau arahan perlu dilanjutkan pada baris berikutnya, digunakan karakter garis miring terbalik: \.

Secara default, bahasa assembly tidak membedakan huruf besar dan huruf kecil saat menulis perintah atau arahan.

Contoh baris kode:

Hitung db 1 ;Nama, arahan, satu operan
bergerak eax,0 ;Perintah, dua operan
cbw; Tim

Tag

Label dalam bahasa assembly dapat berisi simbol-simbol berikut:

  • semua huruf alfabet Latin;
  • angka dari 0 hingga 9;
  • karakter khusus: _, @, $, ?.

Titik dapat digunakan sebagai karakter pertama label, namun beberapa kompiler tidak menyarankan penggunaan karakter ini. Nama Reserved Assembler (arahan, operator, nama perintah) tidak dapat digunakan sebagai label.

Karakter pertama pada label harus berupa huruf atau karakter khusus (bukan angka). Panjang label maksimum adalah 31 karakter. Semua label yang ditulis pada baris yang tidak mengandung direktif assembler harus diakhiri dengan titik dua: .

Tim

Tim memberi tahu penerjemah tindakan apa yang harus dilakukan mikroprosesor. Di segmen data, perintah (atau arahan) mendefinisikan bidang, ruang kerja, atau konstanta. Di segmen kode, perintah menentukan tindakan, seperti memindahkan (mov) atau menambahkan (add).

Arahan

Assembler memiliki sejumlah operator yang memungkinkan Anda mengontrol proses perakitan dan pencatatan. Operator-operator ini disebut arahan . Mereka hanya bertindak selama proses perakitan program dan, tidak seperti perintah, tidak menghasilkan kode mesin.

Operan

Operan – objek tempat perintah mesin atau pernyataan bahasa pemrograman dijalankan.
Sebuah instruksi mungkin memiliki satu atau dua operan, atau tidak ada operan sama sekali. Jumlah operan secara implisit ditentukan oleh kode instruksi.
Contoh:

  • Tidak ada operan ret ;Kembali
  • Satu operan termasuk ecx ;Tingkatkan ecx
  • Dua operan menambahkan eax,12 ;Tambahkan 12 ke eax

Label, perintah (direktif), dan operan tidak harus dimulai pada posisi tertentu dalam baris. Namun disarankan untuk menuliskannya dalam kolom agar program lebih mudah dibaca.

Operannya bisa saja

  • pengidentifikasi;
  • rangkaian karakter yang diapit tanda kutip tunggal atau ganda;
  • bilangan bulat dalam biner, oktal, desimal atau sistem heksadesimal Perhitungan.
Pengidentifikasi

Pengidentifikasi – rangkaian karakter valid yang digunakan untuk menunjukkan objek program seperti kode operasi, nama variabel, dan nama label.

Aturan untuk merekam pengidentifikasi.

  • Pengidentifikasi dapat terdiri dari satu atau lebih karakter.
  • Sebagai simbol Anda dapat menggunakan huruf alfabet Latin, angka dan lain-lain tanda-tanda khusus: _, ?, $, @.
  • Pengidentifikasi tidak boleh dimulai dengan karakter digit.
  • Panjang pengidentifikasi bisa mencapai 255 karakter.
  • Penerjemah menerima 32 karakter pertama dari pengidentifikasi dan mengabaikan sisanya.
Komentar

Komentar dipisahkan dari baris yang dapat dieksekusi berdasarkan karakter; . Dalam hal ini, semua yang ditulis setelah titik koma hingga akhir baris adalah komentar. Menggunakan komentar dalam suatu program meningkatkan kejelasannya, terutama ketika tujuan dari serangkaian perintah tidak jelas. Komentar dapat berisi karakter apa pun yang dapat dicetak, termasuk spasi. Sebuah komentar dapat mencakup seluruh baris atau mengikuti perintah pada baris yang sama.

Struktur program perakitan

Suatu program yang ditulis dalam bahasa assembly dapat terdiri dari beberapa bagian yang disebut modul . Setiap modul dapat memiliki satu atau lebih segmen data, tumpukan, dan kode yang ditentukan. Setiap program assembler yang lengkap harus menyertakan satu modul utama, atau utama, dari mana eksekusinya dimulai. Sebuah modul dapat berisi segmen kode, segmen data, dan segmen tumpukan, yang dideklarasikan menggunakan arahan yang sesuai. Sebelum mendeklarasikan segmen, Anda perlu menentukan model memori menggunakan direktif .MODEL.

Contoh program “tidak melakukan apa-apa” dalam bahasa assembly:

686P
.MODEL DATAR, STDCALL
.DATA
.KODE
AWAL:

MEMBASAHI
AKHIR MULAI

Program ini hanya berisi satu perintah mikroprosesor. Perintah ini adalah RET. Ini memastikan bahwa program berakhir dengan benar. Secara umum, perintah ini digunakan untuk keluar dari suatu prosedur.
Program selanjutnya berkaitan dengan pengoperasian penerjemah.
.686P - Perintah mode terproteksi Pentium 6 (Pentium II) diperbolehkan. Arahan ini memilih kumpulan instruksi assembler yang didukung, yang menunjukkan model prosesor. Huruf P yang ditunjukkan di akhir arahan memberi tahu penerjemah bahwa prosesor beroperasi dalam mode terlindungi.
.MODEL FLAT, stdcall - model memori datar. Model memori ini digunakan di sistem operasi Windows. panggilan std
.DATA adalah segmen program yang berisi data.
.CODE adalah blok program yang berisi kode.
MULAI - label. Dalam assembler, tag memainkan peran besar, yang tidak dapat dikatakan tentang bahasa tingkat tinggi modern.
END START - akhir program dan pesan kepada penerjemah bahwa pelaksanaan program harus dimulai dengan label START.
Setiap modul harus berisi arahan END, yang menandai akhir dari kode sumber program. Semua baris yang mengikuti arahan END diabaikan. Jika Anda menghilangkan direktif END, kesalahan akan terjadi.
Label yang ditentukan setelah direktif END memberi tahu penerjemah nama modul utama tempat eksekusi program dimulai. Jika program berisi satu modul, label setelah direktif END dapat dihilangkan.

Struktur perintah dalam bahasa rakitan Pemrograman pada tingkat perintah mesin adalah tingkat minimum yang memungkinkan pemrograman komputer. Sistem komando mesin harus mampu melaksanakan tindakan yang diperlukan dengan mengeluarkan instruksi kepada peralatan mesin. Setiap instruksi mesin terdiri dari dua bagian: bagian operasional, yang menentukan “apa yang harus dilakukan” dan operan, yang menentukan objek pemrosesan, yaitu “apa yang harus dilakukan”. Instruksi mesin mikroprosesor, ditulis dalam bahasa Majelis, adalah satu baris yang memiliki bentuk berikut: perintah label/operan direktif; komentar Label, perintah/direktif, dan operan dipisahkan oleh setidaknya satu karakter spasi atau tab. Operan perintah dipisahkan dengan koma.

Struktur Perintah Bahasa Majelis Perintah assembler memberi tahu penerjemah tindakan apa yang harus dilakukan mikroprosesor. Arahan perakitan adalah parameter yang ditentukan dalam teks program yang memengaruhi proses perakitan atau properti file keluaran. Operan menentukan nilai awal data (di segmen data) atau elemen tempat tindakan perintah dilakukan (di segmen kode). Sebuah instruksi mungkin memiliki satu atau dua operan, atau tidak ada operan. Jumlah operan secara implisit ditentukan oleh kode instruksi. Jika suatu perintah atau arahan perlu dilanjutkan pada baris berikutnya, karakter garis miring terbalik digunakan: "" . Secara default, assembler tidak membedakan huruf besar dan kecil saat menulis perintah dan arahan. Contoh arahan dan perintah Hitung db 1 ; Nama, arahan, satu operan mov eax, 0 ; Perintah, dua operan

Pengidentifikasi adalah urutan karakter valid yang digunakan untuk menunjukkan nama variabel dan nama label. Pengidentifikasi dapat terdiri dari satu atau lebih karakter berikut: semua huruf alfabet Latin; angka dari 0 hingga 9; karakter khusus: _, @, $, ? . Titik dapat digunakan sebagai karakter pertama pada label. Nama assembler yang dicadangkan (arahan, operator, nama perintah) tidak dapat digunakan sebagai pengidentifikasi. Karakter pertama pengenal harus berupa huruf atau karakter khusus. Panjang maksimum pengenal adalah 255 karakter, tetapi penerjemah menerima 32 karakter pertama dan mengabaikan sisanya. Semua label yang ditulis pada baris yang tidak mengandung direktif assembler harus diakhiri dengan titik dua ":". Label, perintah (direktif), dan operan tidak harus dimulai pada posisi tertentu dalam baris. Disarankan untuk menuliskannya dalam kolom agar program lebih mudah dibaca.

Label Semua label yang ditulis pada baris yang tidak mengandung direktif assembler harus diakhiri dengan titik dua ":". Label, perintah (direktif), dan operan tidak harus dimulai pada posisi tertentu dalam baris. Disarankan untuk menuliskannya dalam kolom agar program lebih mudah dibaca.

Komentar Menggunakan komentar dalam suatu program meningkatkan kejelasannya, terutama ketika tujuan dari serangkaian perintah tidak jelas. Komentar dimulai pada baris mana saja modul sumber dengan simbol titik koma (;). Semua karakter di sebelah kanan "; " di akhir baris ada komentar. Komentar dapat berisi karakter apa pun yang dapat dicetak, termasuk spasi. Sebuah komentar dapat mencakup seluruh baris atau mengikuti perintah pada baris yang sama.

Struktur Program Bahasa Rakitan Sebuah program yang ditulis dalam bahasa rakitan dapat terdiri dari beberapa bagian yang disebut modul, yang masing-masing dapat mendefinisikan satu atau lebih data, tumpukan, dan segmen kode. Setiap program lengkap dalam bahasa assembly harus menyertakan satu modul utama, atau utama, dari mana eksekusinya dimulai. Sebuah modul dapat berisi segmen program, data, dan tumpukan, yang dideklarasikan menggunakan arahan yang sesuai.

Model memori Sebelum mendeklarasikan segmen, Anda perlu menentukan model memori menggunakan direktif. Pengubah MODEL memory_model, call_convention, OS_type, stack_parameter Model memori dasar bahasa assembly: Model memori Pengalamatan kode Pengalamatan data sistem operasi Menyisipkan kode dan data TINY DEKAT MS-DOS Dapat diterima KECIL DEKAT MS-DOS, Windows Tidak SEDANG JAUH DEKAT MS-DOS, Windows Tidak KOMPAK DEKAT JAUH MS-DOS, Windows Tidak BESAR JAUH MS-DOS, Windows Tidak BESAR JAUH MS-DOS, Windows Tidak DEKAT Windows 2000, Windows XP, Windows Dapat Diterima FLAT DEKAT NT,

Model Memori Model kecil ini hanya bekerja pada aplikasi MS-DOS 16-bit. Dalam model ini, semua data dan kode ditempatkan pada satu segmen fisik. Ukuran berkas program dalam hal ini tidak melebihi 64 KB. Model kecil mendukung satu segmen kode dan satu segmen data. Data dan kode ditangani sedekat mungkin saat menggunakan model ini. Model medium mendukung beberapa segmen kode dan satu segmen data, dengan semua referensi dalam segmen kode dianggap jauh secara default, dan referensi dalam segmen data dianggap dekat. Model kompak mendukung beberapa segmen data yang menggunakan pengalamatan data jauh (far), dan satu segmen kode yang menggunakan pengalamatan dekat (dekat). Model besar mendukung banyak segmen kode dan beberapa segmen data. Secara default, semua referensi ke kode dan data dianggap jauh. Model besar hampir setara dengan model memori besar.

Model memori Model datar mengasumsikan konfigurasi program tidak tersegmentasi dan hanya digunakan dalam sistem operasi 32-bit. Model ini mirip dengan model kecil di mana data dan kode ditempatkan dalam satu segmen, namun 32-bit. Untuk mengembangkan program untuk model datar sebelum arahan. model flat harus menempatkan salah satu arahan: . 386, . 486, . 586 atau. 686. Pilihan arahan pemilihan prosesor menentukan kumpulan instruksi yang tersedia saat menulis program. Huruf p setelah arahan pemilihan prosesor berarti mode operasi terlindungi. Pengalamatan data dan kode sudah dekat, dengan semua alamat dan penunjuk 32-bit.

Model memori. Pengubah MODEL memory_model, call_convention, OS_type, stack_parameter Parameter pengubah digunakan untuk menentukan tipe segmen dan dapat mengambil nilai berikut: gunakan 16 (segmen dari model yang dipilih digunakan sebagai 16-bit) gunakan 32 (segmen dari model yang dipilih digunakan sebagai 32-bit). Parameter call_convention digunakan untuk menentukan metode penerusan parameter saat memanggil prosedur dari bahasa lain, termasuk bahasa tingkat tinggi (C++, Pascal). Parameter dapat mengambil nilai berikut: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

Model memori. Pengubah MODEL memory_model, call_convention, OS_type, stack_parameter Parameter OS_type adalah OS_DOS secara default, dan aktif saat ini ini adalah satu-satunya nilai yang didukung untuk parameter ini. Parameter stack_parameter diatur ke: NEARSTACK (register SS sama dengan DS, area data dan tumpukan dialokasikan dalam segmen fisik yang sama) FARSTACK (register SS tidak sama dengan DS, area data dan tumpukan dialokasikan dalam segmen fisik berbeda). Nilai defaultnya adalah NEARSTACK.

Contoh program yang tidak melakukan apa pun. 686 P. MODEL DATAR, STDCALL. DATA. KODE MULAI: RET END START RET - perintah mikroprosesor. Ini memastikan bahwa program berakhir dengan benar. Program selanjutnya berkaitan dengan pengoperasian penerjemah. . 686 P - Perintah mode terproteksi Pentium 6 (Pentium II) diperbolehkan. Arahan ini memilih kumpulan instruksi assembler yang didukung, yang menunjukkan model prosesor. . MODEL FLAT, stdcall - model memori datar. Model memori ini digunakan di sistem operasi Windows. stdcall - konvensi pemanggilan prosedur yang digunakan.

Contoh program yang tidak melakukan apa pun. 686 P. MODEL DATAR, STDCALL. DATA. KODE MULAI: RET AKHIR MULAI. DATA adalah segmen program yang berisi data. Program ini tidak menggunakan stack, jadi segment. STACK hilang. . CODE adalah segmen program yang berisi kode. MULAI - label. END START - akhir program dan pesan ke compiler bahwa eksekusi program harus dimulai dengan label START. Setiap program harus berisi arahan END, yang menandai akhir dari kode sumber program. Semua baris yang mengikuti direktif END akan diabaikan. Label yang ditentukan setelah direktif END memberi tahu penerjemah nama modul utama tempat eksekusi program dimulai. Jika program berisi satu modul, label setelah direktif END dapat dihilangkan.

Penerjemah bahasa rakitan Penerjemah - program atau sarana teknis, yang mengubah suatu program dalam salah satu bahasa pemrograman menjadi program dalam bahasa target, yang disebut kode objek. Selain mendukung mnemonik perintah mesin, setiap penerjemah memiliki seperangkat arahan dan alat makronya sendiri, yang seringkali tidak kompatibel dengan apa pun. Jenis utama penerjemah bahasa rakitan: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - assembler multi-pass yang didistribusikan secara gratis yang ditulis oleh Tomasz Gryshtar (Polandia), NASM (Netwide Assembler) - gratis perakit untuk Arsitektur Intel x 86, dibuat oleh Simon Tatham bersama Julian Hall dan saat ini sedang dikembangkan oleh tim kecil pengembang di Source. Menempa. bersih.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="Menerjemahkan program di Microsoft Visual Studio 2005 1) Buat proyek dengan memilih File->Baru- >Menu proyek Dan"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В !} opsi tambahan Di wizard proyek, tentukan "Proyek Kosong".

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="Menerjemahkan program dalam Microsoft Visual Studio 2005 2) Di pohon proyek (Lihat->Solution Explorer) menambahkan"> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Menerjemahkan program ke Microsoft Visual Studio 2005 3) Pilih jenis file Code C++, tetapi tentukan nama dengan ekstensi. asma:

Menerjemahkan program ke Microsoft Visual Studio 2005 5) Mengatur parameter kompiler. Pilih berdasarkan tombol kanan di file proyek menu Custom Build Rules...

Terjemahkan program ke Microsoft Visual Studio 2005 dan pilih Microsoft Macro Assembler di jendela yang muncul.

Terjemahan program di Microsoft Visual Studio 2005 Periksa dengan tombol kanan pada file hello. pohon proyek asm dari menu Properties dan instal General->Tool: Microsoft Macro Assembler.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="Menerjemahkan program di Microsoft Visual Studio 2005 6) Kompilasi file dengan memilih Build->Build hello. prj."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Pemrograman sistem operasi Pemrograman Windows di OS Windows didasarkan pada penggunaan fungsi API (Application Program Interface, yaitu aplikasi perangkat lunak). Jumlahnya mencapai 2000. Program Windows sebagian besar terdiri dari panggilan semacam itu. Semua interaksi dengan perangkat eksternal dan sumber daya sistem operasi biasanya terjadi melalui fungsi tersebut. ruang operasi sistem jendela menggunakan model memori datar. Alamat sel memori mana pun akan ditentukan oleh isi satu register 32-bit. Ada 3 jenis struktur program untuk Windows: dialog (jendela utama adalah dialog), struktur konsol atau tanpa jendela, struktur klasik (berjendela, bingkai).

Panggilan fungsi jendela API Dalam file bantuan, fungsi API apa pun disajikan dalam bentuk tipe nama_fungsi (FA 1, FA 2, FA 3) Tipe – tipe nilai kembalian; FAx – daftar argumen formal sesuai urutan kemunculannya. Kotak(HWND h.Wnd, LPCTSTR lp. Teks, LPCTSTR lp. Caption, UINT u. Type); Fungsi ini menampilkan jendela dengan pesan dan tombol keluar (atau tombol). Arti parameter: h. Wnd adalah deskriptor jendela di mana jendela pesan akan muncul, lp. Teks - teks yang akan muncul di jendela, lp. Caption - teks pada judul jendela, u. Tipe - tipe jendela; khususnya, Anda dapat menentukan jumlah tombol keluar.

Memanggil fungsi Pesan int Windows API. Kotak(HWND h.Wnd, LPCTSTR lp. Teks, LPCTSTR lp. Caption, UINT u. Type); Hampir semua parameter fungsi API sebenarnya adalah bilangan bulat 32-bit: HWND adalah bilangan bulat 32-bit, LPCTSTR adalah penunjuk 32-bit ke string, UINT adalah bilangan bulat 32-bit. Akhiran "A" sering kali ditambahkan ke nama fungsi untuk berpindah ke versi fungsi yang lebih baru.

Memanggil fungsi Pesan int Windows API. Kotak(HWND h.Wnd, LPCTSTR lp. Teks, LPCTSTR lp. Caption, UINT u. Type); Saat menggunakan MASM, Anda harus menambahkan @N N di akhir nama - jumlah byte yang ditempati oleh argumen yang diteruskan di tumpukan. Untuk fungsi Win 32 API, angka ini dapat didefinisikan sebagai jumlah argumen n dikalikan 4 (byte dalam setiap argumen): N=4*n. Untuk memanggil suatu fungsi, gunakan instruksi assembler CALL. Dalam hal ini, semua argumen ke fungsi diteruskan melalui tumpukan (perintah PUSH). Arah penyampaian argumen: KIRI KE KANAN - BAWAH ATAS. Argumen u akan didorong ke tumpukan terlebih dahulu. Jenis. Panggilan fungsi yang ditentukan akan terlihat seperti ini: Pesan PANGGILAN. Kotak. A@16

Memanggil fungsi Pesan int Windows API. Kotak(HWND h.Wnd, LPCTSTR lp. Teks, LPCTSTR lp. Caption, UINT u. Type); Hasil dari mengeksekusi fungsi API apa pun biasanya berupa bilangan bulat yang dikembalikan dalam register EAX. Arahan OFFSET mewakili "offset dalam segmen", atau, diterjemahkan ke dalam istilah bahasa tingkat tinggi, "penunjuk" ke awal baris. Direktif EQU, seperti #define dalam SI, mendefinisikan sebuah konstanta. Direktif EXTERN memberi tahu penerjemah bahwa fungsi atau pengidentifikasi berada di luar modul ini.

Contoh program “Halo semuanya!” . 686 P. MODEL DATAR, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "Program pertamaku", 0 STR 2 DB "Halo semuanya!", 0 HW DD ? Pesan EKSTERN. Kotak. A@16: DEKAT. KODE MULAI: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Pesan. Kotak. A@16 RET AKHIR MULAI

Direktif INVOKE Penerjemah bahasa MASM juga memungkinkan Anda menyederhanakan pemanggilan fungsi menggunakan alat makro - direktif INVOKE: fungsi INVOKE, parameter1, parameter2, ... Tidak perlu menambahkan @16 ke pemanggilan fungsi; parameter ditulis persis sesuai urutan yang diberikan dalam deskripsi fungsi. Melalui makro penerjemah, parameter ditempatkan pada tumpukan. Untuk menggunakan direktif INVOKE, Anda harus memiliki gambaran prototipe fungsi menggunakan direktif PROTO dalam bentuk: Pesan. Kotak. PROTO: DWORD, : DWORD Jika suatu program menggunakan banyak fungsi Win 32 API, disarankan untuk menggunakan direktif include C: masm 32includeuser 32.inc

Informasi umum tentang bahasa assembly

Bahasa rakitan simbolik sebagian besar dapat menghilangkan kelemahan pemrograman bahasa mesin.

Keuntungan utamanya adalah dalam bahasa assembly semua elemen program disajikan dalam bentuk simbolis. Mengubah nama perintah simbolik menjadi kode biner adalah tanggung jawabnya program khusus- assembler, yang membebaskan programmer dari pekerjaan padat karya dan menghilangkan kesalahan yang tak terhindarkan.

Nama simbolis yang dimasukkan saat pemrograman dalam bahasa assembly biasanya mencerminkan semantik program, dan singkatan perintah mencerminkan fungsi utamanya. Misalnya: PARAM - parameter, TABLE - tabel, MASK - mask, ADD - penjumlahan, SUB - pengurangan, dll. dll. Nama-nama seperti itu mudah diingat oleh seorang programmer.

Untuk pemrograman dalam bahasa rakitan, diperlukan alat yang lebih rumit daripada pemrograman dalam bahasa mesin: Anda memerlukan sistem komputer berbasis mikrokomputer atau PC dengan seperangkat perangkat periferal(keyboard alfanumerik, tampilan karakter, penggerak pelampung, dan perangkat pencetakan), serta sistem pemrograman residen atau lintas pemrograman untuk jenis mikroprosesor yang diperlukan. Bahasa rakitan memungkinkan Anda menulis dan men-debug program yang jauh lebih kompleks secara efektif daripada bahasa mesin (hingga 1 - 4 KB).

Bahasa rakitan berorientasi pada mesin, yaitu bergantung pada bahasa mesin dan struktur mikroprosesor yang sesuai, karena di dalamnya setiap instruksi mikroprosesor diberi nama simbolis tertentu.

Bahasa rakitan memberikan peningkatan produktivitas pemrogram yang signifikan dibandingkan dengan bahasa mesin dan pada saat yang sama mempertahankan kemampuan untuk menggunakan semua sumber daya perangkat keras mikroprosesor yang tersedia perangkat lunak. Hal ini memungkinkan pemrogram terampil untuk menulis program yang berjalan dalam waktu lebih singkat dan menggunakan lebih sedikit memori dibandingkan program yang ditulis dalam bahasa tingkat tinggi.

Dalam hal ini, hampir semua program untuk mengendalikan perangkat input/output (driver) ditulis dalam bahasa assembly, meskipun terdapat banyak bahasa tingkat tinggi.

Dengan menggunakan bahasa assembly, programmer dapat menentukan parameter berikut:

mnemonik (nama simbolis) dari setiap perintah bahasa mesin mikroprosesor;

format standar untuk baris program yang dijelaskan dalam assembler;

format untuk menunjukkan dalam berbagai cara varian pengalamatan dan perintah;

format untuk menentukan konstanta karakter dan konstanta bilangan bulat dalam berbagai sistem bilangan;

perintah semu yang mengontrol proses perakitan (penerjemahan) suatu program.

Dalam bahasa assembly, suatu program ditulis baris demi baris, yaitu satu baris dialokasikan untuk setiap perintah.

Untuk mikrokomputer yang dibangun berdasarkan jenis mikroprosesor yang paling umum, mungkin terdapat beberapa varian bahasa rakitan, tetapi biasanya ada satu varian yang banyak digunakan dalam praktik - inilah yang disebut bahasa rakitan standar.

Pemrograman pada level instruksi mesin adalah level minimum dimana program dapat ditulis. Sistem instruksi mesin harus memadai untuk melaksanakan tindakan yang diperlukan dengan mengeluarkan instruksi ke perangkat keras komputer.

Setiap perintah mesin terdiri dari dua bagian:

· ruang operasi - menentukan “apa yang harus dilakukan”;

· operan - mendefinisikan objek pemrosesan, "apa yang harus dilakukan".

Perintah mesin mikroprosesor yang ditulis dalam bahasa assembly berbentuk satu baris dengan bentuk sintaksis sebagai berikut:

label perintah/operan direktif ;komentar

Dalam hal ini, bidang yang diperlukan pada baris tersebut adalah perintah atau arahan.

Label, perintah/direktif, dan operan (jika ada) dipisahkan oleh setidaknya satu karakter spasi atau tab.

Jika suatu perintah atau arahan perlu dilanjutkan pada baris berikutnya, digunakan karakter garis miring terbalik: \.

Secara default, bahasa assembly tidak membedakan huruf besar dan huruf kecil saat menulis perintah atau arahan.

Pengalamatan langsung: Alamat efektif ditentukan langsung oleh bidang offset instruksi mesin, yang dapat berukuran 8, 16, atau 32 bit.

pindahkan eax, jumlah; eax = jumlah

Assembler mengganti sum dengan alamat terkait yang disimpan dalam segmen data (dialamatkan oleh register ds secara default) dan menempatkan nilai yang disimpan di sum dalam register eax.

Pengalamatan tidak langsung pada gilirannya memiliki jenis berikut:

· pengalamatan dasar (registrasi) tidak langsung;

· pengalamatan dasar (register) tidak langsung dengan offset;

· pengalamatan indeks tidak langsung;

· pengalamatan indeks dasar tidak langsung.

Pengalamatan dasar (registrasi) tidak langsung. Dengan pengalamatan ini, alamat efektif operan dapat ditempatkan di salah satu register tujuan umum, kecuali sp/esp dan bp/ebp (ini adalah register khusus untuk bekerja dengan segmen tumpukan). Secara sintaksis dalam sebuah perintah, mode pengalamatan ini dinyatakan dengan mengapit nama register dalam tanda kurung siku.

pindahkan eax, ; eax = *esi; *nilai esi di alamat esi