Arahan perhimpunan. Arahan Definisi Data. LISTMAC – Dayakan pengembangan makro dalam penyenaraian

Tag
Label dalam bahasa himpunan boleh mengandungi simbol berikut:


Huruf: A hingga Z dan a hingga z
Nombor: 0 hingga 9
Watak istimewa: tanda soal (?)
titik (.) (aksara pertama sahaja)
tanda "komersial" (@)
garis bawah (_)
dolar ($)

Aksara pertama dalam label mestilah huruf atau aksara khas. Nombor tidak boleh menjadi aksara pertama label, dan aksara $ dan ? kadangkala mempunyai makna yang istimewa dan secara amnya tidak disyorkan untuk digunakan. Huruf besar dan huruf kecil tidak dibezakan secara lalai, tetapi pembezaan boleh didayakan dengan menetapkan satu atau pilihan lain dalam baris arahan penghimpun Panjang maksimum tag - 31 aksara. Contoh label: COUNT, PAGE25, $E10. Adalah disyorkan untuk menggunakan label deskriptif dan semantik. Nama daftar seperti AX, DI atau AL dikhaskan dan digunakan hanya untuk menunjukkan daftar yang sepadan.
Jika label terletak sebelum arahan pemproses, sejurus selepas itu sentiasa terdapat simbol ":" (titik bertitik), yang memberitahu pemasang untuk mencipta pembolehubah dengan nama ini mengandungi alamat arahan semasa:
some_loop:

loopne some_loop
Apabila label muncul sebelum arahan pemasang, ia biasanya merupakan salah satu operan arahan tersebut dan titik bertindih tidak disertakan:

segmen codesg
lodsw ; membaca perkataan daripada rentetan,
cmp kapak,7; jika ia adalah 7 - keluar dari gelung
codesg tamat
Mari lihat arahan yang berfungsi secara langsung dengan label dan nilainya: LABEL, EQU dan =.

Arahan LABEL

Jenis label Arahan LABEL mentakrifkan label dan menentukan jenisnya. Jenis boleh menjadi salah satu daripada: BYTE (bait), WORD (perkataan), DWORD (perkataan ganda), FWORD (6 bait), QWORD (perkataan empat segi), TBYTE (10 bait), NEAR (berhampiran label), FAR (jauh label). Label diberikan nilai yang sama dengan alamat arahan seterusnya atau data seterusnya, dan jenis yang dinyatakan secara eksplisit. Bergantung kepada jenis arahan
label mov,0 akan menulis bait (perkataan, kata ganda, dll.) yang diisi dengan sifar ke dalam ingatan, dan arahan
label panggilan akan membuat panggilan pendek atau panjang ke subrutin.

Menggunakan arahan LABEL, adalah mudah untuk mengatur akses kepada data yang sama, kedua-dua bait dan perkataan, dengan mentakrifkan dua label dengan jenis yang berbeza di hadapan data.

Arahan EQU

Arahan EQU memberikan nilai kepada label, yang ditentukan sebagai hasil ungkapan integer di sebelah kanan. Hasil ungkapan ini boleh menjadi integer, alamat atau sebarang rentetan aksara:
label ungkapan persamaan

kebenaran sama 1
message1 equ "Cuba lagi$"
var2 equ 4
cmp kapak,kebenaran ; cmp kapak,1
db mesej1 ; db "Cuba lagi$"
mov ax,var2 ; mov ax, 4 Arahan EQU paling kerap digunakan untuk memperkenalkan parameter yang biasa kepada keseluruhan program, serupa dengan perintah #define bagi prapemproses C.

Arahan =

Arahan = adalah bersamaan dengan EQU, tetapi label yang ditakrifkannya hanya boleh menerima nilai integer. Selain itu, label yang ditentukan oleh arahan ini boleh ditindih.

Setiap pemasang menawarkan satu set keseluruhan label khas yang dipratentukan - ini boleh Tarikh semasa(@tarikh atau ??tarikh), jenis pemproses (@cpu), atau nama segmen program tertentu, tetapi satu-satunya label pratakrif yang disokong oleh semua pemasang yang telah kami lihat ialah $ . Ia sentiasa sepadan dengan alamat semasa. Sebagai contoh, arahan

Jmp$

melakukan cawangan tanpa syarat pada dirinya sendiri, supaya gelung kekal dicipta daripada satu arahan.

Untuk lebih memahami keseluruhan perkara ini, saya menulis program kecil. Masih sama "Hello World", tetapi dengan cara yang baharu :) Teks di bawah:

Program ini dipasang oleh TASM dan MASM, tetapi fail EXE yang dipasang oleh MASM adalah satu bait lebih besar. Kami mendapati bahawa perintah mov dx,offset msg telah digantikan dengan arahan lea dx,msgb. LEA meletakkan alamat offset bagi data yang ditentukan dalam DX, i.e. melakukan perkara yang sama seperti arahan mov dengan offset. Saya mengesyorkan melihat ini di bawah penyahpepijat.



Mari lihat dengan teliti senarai pemasangan dan cari perbezaannya.



Menariknya, TASM mengumpulkan arahan LEA ke dalam dalam kes ini sebagai arahan MOV (opcode BA), dan MASM memasang arahan LEA ke dalam opcode lain - 8D16, yang meningkatkan saiz program sebanyak 1 bait. Saya tidak tahu mengapa dia memutuskan untuk melakukan ini lagi, tetapi ia akan menjadi menarik untuk mengetahui.

Pemasang MASM, TASM dan WASM berbeza antara satu sama lain. Walau bagaimanapun, mencipta program mudah untuk mereka hampir tidak mempunyai perbezaan, kecuali pemasangan dan menghubungkannya sendiri.

Jadi program pertama kami untuk MASM, TASM dan WASM yang menghasilkan surat Inggeris"A" pada kedudukan kursor semasa, iaitu, di sebelah kiri bucu atas skrin:

Model kecil .kod ORG 100j mula: MOV AH,2 MOV DL,41j INT 21j INT 20j END mula Teks ini boleh ditaip dalam mana-mana bahasa mudah penyunting teks- contohnya, dalam NotePad daripada WINDOWS (tetapi bukan dalam Word atau yang lain "canggih"). Walau bagaimanapun, saya mengesyorkan editor teks "lanjutan" dengan penyerlahan sintaks, seperti PSPad (lihat bahagian). Kemudian kami menyimpan fail ini dengan sambungan .asm, sebagai contoh, dalam folder MYPROG. Mari kita panggil fail atest. Jadi, kami mendapat: C:\MYPROG\atest.asm.

CATATAN
Sila ambil perhatian bahawa dalam arahan pertama kami menulis 2 dan bukannya 02h. MASM, TASM dan WASM, seperti Emu8086, membenarkan "kebebasan" sedemikian. Walaupun anda boleh menulis 02h - tidak akan ada ralat.

Penerangan untuk program:

.model kecik– baris pertama. Arahan .model mentakrifkan model memori untuk jenis fail tertentu. Dalam kes kami, ini ialah fail dengan sambungan COM, jadi kami memilih model kecil, yang menggabungkan kod, data dan segmen tindanan. Model kecil direka untuk mencipta fail jenis COM.

.kod– baris ke-2. Arahan ini memulakan segmen kod.

ORG 100j– baris ke-3. Perintah ini menetapkan pembilang program kepada 100j kerana apabila memuatkan fail COM ke dalam memori, DOS memperuntukkan 256 bait pertama kepada blok data PSP ( nombor perpuluhan 256 adalah sama dengan 100h perenambelasan). Kod program terletak hanya selepas blok ini. Semua program yang disusun ke dalam fail jenis COM mesti bermula dengan arahan ini.

mula: MOV AH, 02h– baris ke-4. Label mula diletakkan sebelum arahan pertama dalam program dan akan digunakan dalam arahan END untuk menunjukkan arahan yang mana program bermula. Arahan MOV meletakkan nilai operan kedua ke dalam operan pertama. Iaitu, nilai 02h diletakkan dalam daftar AN. Mengapa ini dilakukan? 02h ialah fungsi DOS yang memaparkan watak pada skrin. Kami sedang menulis program untuk DOS, jadi kami menggunakan arahan ini sistem operasi(OS). Dan kami menulis fungsi ini (atau lebih tepat nombornya) dalam daftar AH, kerana interrupt 21h menggunakan daftar ini.

MOV DL, 41j– baris ke-5. Kod aksara "A" dimasukkan ke dalam daftar DL. Kod ASCII untuk aksara "A" ialah 41j.

INT 21j– baris ke-6. Ini adalah gangguan yang sama 21j - arahan yang menyebabkan fungsi sistem DOS yang dinyatakan dalam daftar AN (dalam contoh kami ini ialah fungsi 02h). Perintah INT 21h ialah cara utama interaksi antara program dan OS.

INT 20j– baris ke-7. Ini ialah gangguan yang memberitahu sistem pengendalian untuk keluar dari program dan memindahkan kawalan ke aplikasi konsol. Jika program telah disusun dan dilancarkan daripada OS, arahan INT 20h akan mengembalikan kita kepada OS (contohnya, kepada DOS).

TAMAT permulaan– baris ke-8. Arahan END menamatkan program sambil menunjukkan pada titik mana pelaksanaannya harus bermula.

Apabila menulis atur cara dalam bahasa Himpunan, arahan digunakan yang menunjukkan kepada pengkompil lokasi program dalam ingatan, mentakrifkan makro, memulakan ingatan, dsb. Senarai arahan dan penerangannya diberikan dalam Jadual. 1.8. Semua arahan bermula dengan titik. Mari kita senaraikan secara ringkas fungsi yang dilakukan oleh arahan dalam setiap segmen.

Segmen program dibuka dengan arahan .CSEG. Jika program bermula dengan segmen ini, arahan itu mungkin tiada. Dalam segmen program, anda boleh menggunakan arahan .ORG untuk menunjukkan permulaan segmen.

Arahan .DB dalam segmen mentakrifkan satu bait atau kumpulan bait pemalar yang ditulis ke memori Flash. Arahan .DW mentakrifkan perkataan atau kumpulan perkataan yang ditulis ke ingatan sebagai pemalar. Permulaan pemalar rakaman ditentukan oleh label sebelum arahan yang sepadan. Pemalar terhitung dipisahkan dengan koma.

Arahan .DEF memberikan nama simbolik kepada daftar. Arahan .EQU, .SET memberikan nilai kepada nama. Nama yang diberikan nilai oleh arahan .EQU tidak boleh ditetapkan semula dan nilai tidak boleh ditukar. Nama yang diberikan oleh arahan .SET boleh ditukar oleh arahan .SET yang lain.

Arahan .DEVICE menentukan jenis pengawal mikro sasaran yang akan digunakan untuk melaksanakan program. Kehadiran arahan ini membolehkan kawalan untuk arahan program berhubung dengan peranti fizikal, memberi amaran tentang kemustahilan melaksanakan arahan tertentu, saiz memori yang digunakan, dsb.

Arahan .INCLUDE dengan nama fail digunakan untuk memasukkan fail lain dalam teks program.

Jadual 1.8. Senarai arahan

Arahan

Penerangan

Simpan bait dalam RAM

Segmen program

Tentukan bait - pemalar dalam memori Flash atau

Berikan nama simbolik kepada daftar

Menentukan peranti yang mana ia disusun

program

Segmen data

Mentakrifkan perkataan dalam memori Flash atau EEPROM

Tamat makro

Tetapkan ekspresi malar

segmen EEPROM

Keluar fail

Lampirkan fail lain

Dayakan penjanaan penyenaraian

Dayakan pengembangan makro dalam penyenaraian

Permulaan makro

Matikan penjanaan penyenaraian

Tetapkan kedudukan dalam segmen

Tetapkan pembolehubah kepada ungkapan yang setara

Arahan .MACRO dan .ENDMACRO merangka definisi makro. Definisi makro boleh mempunyai sehingga 10 parameter dengan nama tetap@0,…,@9. Apabila memanggil definisi makro, parameter ditentukan sebagai senarai dalam susunan berangka.

Segmen data bermula dengan arahan .DSEG. Arahan .ORG dan .BYTE boleh digunakan dalam segmen. Arahan.BYTE menentukan bilangan bait yang akan diakses semasa pelaksanaan program. Kawasan rizab bermula pada alamat yang ditentukan oleh label sebelum arahan.

Segmen jenis EEPROM bermula dengan arahan .ESEG. Arahan .ORG, .DB, .DW boleh digunakan dalam segmen. Arahan .DB dalam segmen menentukan satu atau sekumpulan bait untuk ditulis ke EEPROM. Arahan.DW mentakrifkan perkataan atau kumpulan perkataan yang ditulis ke memori EEPROM dalam pasangan 2 bait. Permulaan bait rakaman dan perkataan ditentukan oleh label sebelum arahan yang sepadan.

Arahan .LIST, .NOLIST, .LISTMAC digunakan untuk mengawal output penyenaraian.

Arahan ialah arahan kawalan pengkompil. Pengisytiharan setiap daripada mereka mesti dimulakan dengan tempoh. Amalan menunjukkan bahawa dalam mana-mana pemasang hanya kira-kira 10...20 arahan yang paling intensif digunakan. Semua yang lain adalah sama ada pilihan atau bertanggungjawab untuk mengawal sifat pengkompil kecil sahaja. Arahan "asas", yang juga tipikal untuk pemasang pemproses lain, termasuk arahan .equ, .org, .def, .сseg, .dseg, dsb. Nah, arahan seperti .dq, .exit, .listmac in program sebenar adalah sangat jarang berlaku. Di bawah ialah senarai, penerangan dan contoh penggunaan arahan daripada pemasang proprietari mikropengawal AVR.

Pengganti arahan .termasuk fail teks ke tempat dalam program di mana ia digunakan. Di samping itu, fail penggantian itu sendiri juga mungkin mengandungi arahan .include. Jika fail itu terletak dalam direktori projek atau dalam salah satu folder perkhidmatan, maka bukannya laluan penuh, ia dibenarkan untuk menunjukkan hanya pautan kepada namanya.

Arahan.termasuk
Sintaks penulisan:
.include "(laluan fail)"
Contoh penggunaan:

Sertakan "m8def.inc" ;masukkan fail pengepala standard

Arahan .exit memberitahu penghimpun tempat fail berakhir teks sumber. Semua pernyataan selepas arahan menjadi tidak kelihatan kepada pengkompil. Jika .exit berlaku dalam fail yang disertakan, maka binaan projek berakhir dengan baris di mana arahan .include berada. Jika tiada arahan .keluar, titik akhir binaan dipertimbangkan baris terakhir teks sumber.

Arahan.keluar
Sintaks penulisan:
.keluar
Contoh penggunaan:

Keluar ;akhir fail

Arahan .nolist dan .list mengawal fail penyenaraian, yang biasanya dijana selepas projek dibina. Yang pertama daripada mereka melarang, dan yang lain, dengan sewajarnya, membenarkan output maklumat ke fail. Arahan .list mengatasi tindakan .nolist dan sebaliknya.

Directives.nolist, .list
Sintaks penulisan:
.nolist, .list
Contoh penggunaan:

Nolist ;melarang output teks fail “m8def.inc” .masukkan "m8def.inc" ;ke dalam fail penyenaraian program.list ;teruskan output maklumat

Arahan .equ memberikan nama simbolik kepada sesetengah orang nilai angka. Nama simbolik mestilah unik dan tidak boleh ditukar semasa program sedang ditulis. Arahan tidak boleh digunakan untuk memberikan nama simbolik kepada daftar tujuan am.

Directive.equ
Sintaks penulisan:
.equ (nama simbolik) = (ungkapan)
Contoh penggunaan:

Equ DDRB = 0x17 ;tetapkan nama DDRB kepada 0x17 .equ PORTB = DDRB + 1 ;tetapkan nama PORTB kepada 0x18

Arahan .set mempunyai kesan yang sama seperti .equ. Tetapi tidak seperti yang terakhir, nama simbolik boleh ditakrifkan semula di mana-mana dalam program.

Directive.set
Sintaks penulisan:
.set (nama simbolik) = (ungkapan)
Contoh penggunaan:

Tetapkan OFFSET = 0x100 ; memberikan nama nilai OFFSET 0x100 . .set OFFSET = OFFSET + 1 ;tolak nilai OFFSET

Arahan .def memberikan nama simbolik kepada salah satu daftar tujuan umum. Dalam perjalanan program selanjutnya nama diberi boleh ditindih oleh arahan .undef.

Arahan .def, .undef
Sintaks penulisan:
.def (nama simbolik) = (huruf besar)
.undef (nama simbolik)
Contoh penggunaan:

Def temp = R16 ;menyerahkan daftar R16 nama temp .undef temp ;batalkan penggunaan selanjutnya bagi nama temp

Arahan .db, .dw, .dd, .dq bertujuan untuk menyimpan memori mikropengawal untuk data yang dimulakan. Kesemuanya hanya boleh digunakan dalam kod dan segmen memori EEPROM. Perbezaan antara arahan ini ialah kedalaman bit data yang diwakili. Arahan .db rizab bait, .dw rizab perkataan, .dd rizab kata ganda. Dalam kes yang jarang berlaku, ia juga mungkin mudah untuk menggunakan arahan .dq, yang menyimpan data 64-bit.

Directives.db, .dw, .dd, .dq
Sintaks penulisan:
(label): .db (data 8-bit)
(label): .dw (data 16-bit)
(label): .dd (data 32-bit)
(label): .dq (data 64-bit)
Contoh penggunaan:

Label: .db 0xFA, 250, -6, 0b11111010 .dw 0xFADE, 64222, -1314, 0b1111101011011110 .dd 0xFADEEFCA, 4208914378, -DE918FCAF , 1 8077149609196178927, -521103510453211

Arahan .byte menyimpan memori untuk data yang tidak dimulakan dalam segmen SRAM dan EEPROM.

Arahan.bait
Sintaks penulisan:
(label): .byte (jumlah data untuk ditempah)
Contoh penggunaan:

Equ PAGESIZE = 0x20 buffer: . bait 2*PAGESIZE ;simpan 64 bait dalam SRAM

Arahan .dseg, .eseg, .cseg mentakrifkan permulaan data, EEPROM dan segmen kod, masing-masing. Dalam fail sumber, setiap segmen boleh diwakili dalam satu salinan sahaja. Jika semua arahan ini tiada dalam atur cara, pengkompil secara lalai menganggap bahawa semua pernyataan terletak dalam bahagian kod.

Arahan .dseg, .eseg, .cseg
Sintaks penulisan:
.dseg
.eseg
.cseg
Contoh penggunaan:

Dseg ;permulaan penimbal segmen data: . bait 32 ;menempah 32 bait untuk penimbal dalam SRAM .cseg ;permulaan segmen kod rjmp awal. rentetan: .db "ATmega8",0 ;rentetan disimpan dalam memori FLASH.eseg ;permulaan segmen memori EEPROM _var: .bait 2 ;menetapkan 2 bait untuk pembolehubah _var _cnst: .db 0xAA ;menetapkan bait untuk pembolehubah _cnst = 0xAA

Arahan The.org membolehkan anda menetapkan alamat permulaan pengkompil dalam segmen kod, data dan EEPROM. Apabila digunakan dalam segmen kod, arahan tersebut menentukan alamat lokasi perkataan program 16-bit.

Directive.org
Sintaks penulisan:
.org (alamat permulaan)
Contoh penggunaan:

Equ SRAM_START = 0x60 .equ RAMEND = 0x045F .dseg ;permulaan segmen data.org SRAM_START ;menempah 32 bait dalam SRAM untuk penimbal, penimbal: . bait 32 ;bermula pada alamat 0x60 .cseg ;permulaan segmen kod.org 0 ;set semula vektor pada alamat 0 rjmp awal . .org 0x50 ;mulakan program utama di alamat 0x50 awal: ldi temp,high(RAMEND) ;stack initialization out SPH,temp ldi temp,low(RAMEND) out SPL,temp .

Arahan .macro, .endmacro (.endm) mentakrifkan permulaan dan akhir makro, masing-masing.

Directives.macro, .endmacro (.endm)
Sintaks penulisan:
.makro (nama makro)
Contoh penggunaan:

Set_bit makro ;pengisytiharan makro untuk menetapkan bit port sbi @0,@1 ;set bit @1 daftar port @0 sbi @0-1,@1 ;konfigurasi baris @1 daftar DDRx .endm untuk output . set_bit PORTB,0 ;setkan port B logik 1 pada baris 0

Arahan .listmac membenarkan paparan lanjutan teks makro dalam fail penyenaraian. Dalam kes ini, kandungan setiap definisi makro yang ditemui dalam program dipaparkan secara keseluruhannya. Jika arahan tidak digunakan, maka kod di dalam makro tidak diberikan.

Directive.listmac
Sintaks penulisan:
.listmac
Contoh penggunaan:

Listmac ; benarkan mengembangkan teks makro dalam fail penyenaraian

Arahan .message, .warning, .error bertujuan untuk menjadi output kepada tetingkap binaan projek maklumat tambahan tentang kemajuan penyusunan program. Arahan .message menjana mesej untuk talian di mana panggilannya ditemui. Menggunakan .warning menghasilkan amaran, dan .error menghasilkan mesej ralat. Dalam kes kedua, pembinaan projek berhenti.

Arahan .mesej, .amaran, .ralat
Sintaks penulisan:
.message "(mesej teks)"
.warning "(teks amaran)"
.error "(teks mesej ralat)"
Contoh penggunaan:

Mesej "Makros telah dipanggil di sini." .amaran "Kekerapan terlalu tinggi!" .error "Hujah makro yang salah!"

Sekumpulan arahan kompilasi bersyarat.ifdef, .ifndef, .if, .else, elif, .endif digunakan untuk sisipan kod program bergantung kepada pelbagai syarat. Arahan .ifdef menyemak kehadiran pengisytiharan nama simbolik. Arahan boleh diikuti dengan satu set arahan yang akan dimasukkan ke dalam teks jika keadaan ujian adalah "benar" (nama telah diisytiharkan). Arahan .ifndef adalah bertentangan dengan .ifdef, yang menyemak ketiadaan perisytiharan nama simbolik. Arahan .if melakukan penggantian kod apabila syarat perbandingan yang dinyatakan sebagai parameternya dipenuhi. Perintah yang mesti dilaksanakan jika keadaan arahan .if adalah "palsu" terletak selepas arahan .else. Bercabang seperti "jika" - "maka" boleh mempunyai beberapa peringkat sarang berkat arahan .elif. Setiap blok semak bermula dengan .ifdef, .ifndef, .if mesti ditutup dengan arahan .endif.

Arahan jika, .ifdef, .ifndef, .else, elif, .endif
Sintaks penulisan:
.ifdef (watak) (atau .ifndef (watak))
.jika (syarat)
.else (ungkapan) (atau .elif (keadaan))
.endif
Contoh penggunaan:

Macro del_ms ;makro yang menjana kelewatan masa dalam ms.ifndef FREQ ;jika pemalar FREQ (frekuensi dalam Hz) tidak diisytiharkan, .warning "Undefined FREQ constan!" ;keluarkan amaran dan.equ FREQ = 1000000 ;tetapkan nilai lalai kepada 1 MHz.endif .equ DELAY = (@0*FREQ)/4000 ;nilai tetapan kelewatan masa.jika DELAY > 65535 ;jika DELAY lebih besar daripada 2 bait , kemudian ralat "Limpahan integer dalam DELAY!" ;pelaksanaan makro tidak dapat dilakukan.selain itu, tolak XL ;simpan daftar yang berfungsi XL, XH tolak XH ldi XH,tinggi(KELEWATAN) ;kitaran kelewatan masa ldi XL,rendah(KELEWATAN) sbiw XH:XL,1 brne PC-1 pop XH pop XL ;pulihkan daftar yang berfungsi XH, XL .endif .endm daripada tindanan. .equ FREQ = 2000000 ;ad kekerapan jam 2 MHz. del_ms 25 ;pembentukan kelewatan masa 25 ms

Tentukan peranti yang mana ia disusun

Parameter yang dihantar kepada arahan ialah urutan ungkapan yang dipisahkan dengan koma. Setiap ungkapan mestilah sama ada nombor dalam julat (-128..255) atau

hasil pengiraan mesti memberikan hasil dalam julat yang sama, jika tidak nombor itu dipotong kepada bait, dan TANPA mengeluarkan amaran.

Jika arahan menerima lebih daripada satu parameter dan segmen atur cara semasa adalah maka parameter tersebut dibungkus ke dalam perkataan (parameter pertama ialah bait rendah), dan jika

bilangan parameter adalah ganjil, maka ungkapan terakhir akan dipotong kepada bait dan ditulis sebagai perkataan dengan bait paling ketara sama dengan sifar, walaupun ada yang lain akan datang seterusnya

Arahan DB.

Sintaks:
LABEL: .senarai_ekspresi DB

Contoh:
.CSEG
const: .DB 0, 255, 0b01010101, -128, 0xaa

Parameter yang dihantar kepada arahan ialah urutan ungkapan yang dipisahkan dengan koma. Setiap ungkapan mestilah sama ada nombor dalam julat (-32768..65535) atau

sebagai hasil pengiraan, ia mesti memberikan hasil dalam julat yang sama, jika tidak nombor itu dipotong kepada perkataan, dan TANPA mengeluarkan amaran.

Sintaks:
LABEL: .senarai ekspresi DW

Contoh:
.CSEG
senarai var: .DW 0, 0xffff, 0b1001110001010101, -32768, 65535

Sintaks:
.ENDMACRO

Contoh:
.MAKRO SUBI16 ; Memulakan Definisi Makro
subi r16,rendah(@0) ; Kurangkan bait rendah parameter pertama
sbci r17,tinggi(@0) ; Kurangkan bait tinggi bagi parameter pertama
.ENDMACRO

EQU – Tetapkan ungkapan malar

Arahan EQU memberikan nilai kepada label. Label ini kemudiannya boleh digunakan dalam ungkapan. Label yang nilainya diberikan oleh arahan ini tidak boleh

ditetapkan semula dan nilainya tidak boleh diubah.

Sintaks:
.EQU label = ungkapan

Contoh:
.EQU io_offset = 0x23
.EQU porta = io_offset + 2

CSEG ; Permulaan segmen data
clr r2 ; Kosongkan daftar r2
keluar porta,r2; Tulis ke port A

ESEG – segmen EEPROM

Arahan ESEG mentakrifkan permulaan segmen EEPROM. Fail asal mungkin terdiri daripada beberapa segmen EEPROM, yang digabungkan menjadi satu segmen semasa penyusunan.

Segmen EEPROM biasanya hanya terdiri daripada arahan,

href="#DW - Tentukan perkataan tetap dalam memori program dan EEPROM">DW

dan markah. Segmen EEPROM mempunyai segmennya sendiri

pembilang kedudukan bait. Arahan boleh digunakan untuk meletakkan

pembolehubah di tempat yang diperlukan dalam EEPROM. Arahan tidak mempunyai parameter.

Sintaks:
.ESEG

Contoh:
var1: .BYTE 1 ; simpan 1 bait untuk var1
jadual: .BYTE tab_size ; simpan bait saiz_tab.

ESEG
eevar1: .DW 0xffff ; mulakan 1 perkataan dalam EEPROM

EXIT – Keluar dari fail

Setelah bertemu Arahan KELUAR pengkompil berhenti menyusun daripada fail ini. Jika arahan digunakan dalam fail yang dilampirkan (lihat arahan

href="#INCLUDE - Sertakan fail lain">SERTAKAN

), kemudian kompilasi diteruskan dari baris berikutan arahan INCLUDE.

Jika fail tidak bersarang, maka kompilasi berhenti.

Sintaks:
.KELUAR

Contoh:
.KELUAR ; Keluar dari fail ini

INCLUDE – Lampirkan fail lain

Setelah menemui arahan INCLUDE, pengkompil membuka fail yang ditentukan di dalamnya, menyusunnya sehingga fail tamat atau arahan itu ditemui

href="#EXIT - Keluar dari fail ini">KELUAR

, kemudian terus menyusun fail awal dari baris mengikut arahan

TERMASUKKAN. Fail yang dilampirkan juga mungkin mengandungi arahan INCLUDE.

Sintaks:
.SERTAKAN "nama fail"

Contoh:
; fail iodefs.asm:
.EQU sreg = 0x3f ; Daftar status
.EQU sphigh = 0x3e ; Bait tinggi penuding tindanan
Aliran EQU = 0x3d ; Bait rendah penuding tindanan

; fail incdemo.asm
.SERTAKAN iodefs.asm ; Takrif pelabuhan sarang
dalam r0,sreg ; Baca daftar status

LIST – Dayakan penjanaan penyenaraian

Arahan LIST memberitahu pengkompil untuk membuat penyenaraian. Penyenaraian adalah gabungan kod pemasangan, alamat dan opcode. Oleh

Secara lalai, penjanaan penyenaraian didayakan, tetapi arahan ini digunakan bersama dengan arahan untuk mendapatkan penyenaraian bahagian individu fail sumber.

Sintaks:
.SENARAI

Contoh:

LISTMAC – Dayakan pengembangan makro dalam penyenaraian

Selepas arahan LISTMAC, pengkompil akan menunjukkan kandungan makro dalam penyenaraian. Secara lalai, penyenaraian hanya menunjukkan panggilan makro dan yang dihantar

pilihan.

Sintaks:
.LISTMAC

Contoh:
.MACRO MACX ; Definisi Makro
tambah r0,@0 ; Badan makro
eor r1,@1

LISTMAC; Dayakan pengembangan makro
MACX r2,r1 ; Memanggil makro (badan makro akan ditunjukkan dalam penyenaraian)

MAKRO – Permulaan makro

Arahan MACRO memulakan definisi makro. Nama makro diserahkan kepada arahan sebagai parameter. Jika anda menemui nama makro kemudian dalam teks program,

pengkompil menggantikan nama ini dengan badan makro. Makro boleh mempunyai sehingga 10 parameter, yang diakses melalui @0-@9 dalam kandungannya. Apabila dipanggil, parameter disenaraikan

dipisahkan dengan koma. Definisi makro berakhir dengan arahan.

Secara lalai, hanya panggilan makro yang disertakan dalam penyenaraian untuk mengembangkan makro, anda mesti menggunakan arahan. Makro dalam penyenaraian ditunjukkan dengan tanda +.

Sintaks:
.MACRO nama makro

Contoh:
.MAKRO SUBI16 ; Permulaan definisi makro
subi @1,rendah(@0) ; Kurangkan bait rendah parameter 0 daripada parameter 1
sbci @2,tinggi(@0) ; Tolak bait tinggi parameter 0 daripada parameter 2
.ENDMACRO ; Akhir definisi makro

CSEG; Permulaan segmen program
SUBI16 0x1234,r16,r17 ; Tolak 0x1234 daripada r17:r16

NOLIST – Lumpuhkan penjanaan penyenaraian

Arahan NOLIST memberitahu pengkompil untuk berhenti menjana penyenaraian. Penyenaraian adalah gabungan kod pemasangan, alamat dan

kod operasi. Secara lalai, penjanaan penyenaraian didayakan, tetapi boleh dilumpuhkan oleh arahan ini. Di samping itu, arahan ini boleh digunakan

bersama-sama dengan arahan untuk mendapatkan penyenaraian bahagian individu

fail sumber

Sintaks:
.NOLIST

Contoh:
.NOLIST ; Lumpuhkan penjanaan penyenaraian
.SERTAKAN "makro.inc" ; Fail yang dilampirkan tidak akan
.SERTAKAN "const.def" ; ditunjukkan dalam penyenaraian
.SENARAI ; Dayakan penjanaan penyenaraian

ORG – Tetapkan kedudukan dalam segmen

Arahan ORG menetapkan pembilang kedudukan kepada nilai yang diberikan, yang diluluskan sebagai parameter. Untuk segmen data, ia menetapkan pembilang kedudukan kepada

SRAM (RAM), untuk segmen program ini adalah kaunter program, dan untuk segmen EEPROM ini adalah kedudukan dalam EEPROM. Jika arahan itu didahului oleh label (pada baris yang sama) maka

Label diletakkan pada alamat yang dinyatakan dalam parameter arahan. Sebelum penyusunan bermula, pembilang program dan pembilang EEPROM adalah sama dengan sifar, dan pembilang RAM adalah sama dengan 32

(memandangkan alamat 0-31 diduduki oleh daftar). Sila ambil perhatian bahawa pembilang bait digunakan untuk RAM dan EEPROM, dan pembilang perkataan digunakan untuk segmen program.

Sintaks:
.Ungkapan ORG

Contoh:
.DSEG ; Permulaan segmen data

ORG 0x37 ; Tetapkan alamat SRAM kepada 0x37
pembolehubah: .BYTE 1 ; Tempah bait di alamat 0x37H

CSEG
.ORG 0x10 ; Tetapkan pembilang program kepada 0x10
mov r0,r1 ; Perintah ini akan ditempatkan di alamat 0x10

SET – Tetapkan persamaan simbolik pembolehubah bagi ungkapan

Arahan SET memberikan nilai kepada nama. Nama ini kemudiannya boleh digunakan dalam ungkapan. Lebih-lebih lagi, berbeza dengan arahan

href="#EQU - Tetapkan simbol yang sama dengan ungkapan">EQU

nilai nama boleh ditukar oleh arahan SET yang lain.

Sintaks:
.SET nama = ungkapan

Contoh:
.SET io_offset = 0x23
.SET porta = io_offset + 2

CSEG; Permulaan segmen kod
clr r2 ; Kosongkan daftar 2