АссСмблСр db. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² язык ассСмблСра для процСссоров x86

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ язык ассСмблСра ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Как выглядит синтаксис ассСмблСра. Из ΠΊΠ°ΠΊΠΈΡ… основных частСй состоит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° ассСмблСрС. КакиС инструмСнты Π½ΡƒΠΆΠ½Ρ‹ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° ассСмблСрС. Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ «Hello World» Π½Π° ассСмблСрС.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ язык ассСмблСра

АссСмблСр — это Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ прямоС соотвСтствиС с ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ процСссора. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ особСнности ассСмблСра:

  • Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ процСссора сущСствуСт свой ассСмблСр
  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с рСгистрами ΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ процСссора
  • ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ассСмблСра (ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠΈ) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции процСссора
  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ эффСктивный ΠΊΠΎΠ΄, Π½ΠΎ слоТСн Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ½Π° максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Для эффСктивного программирования Π½Π° ассСмблСрС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ процСссора ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π² Ρ†Π΅Π»ΠΎΠΌ.

Бинтаксис языка ассСмблСра

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° ассСмблСрС состоит ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… строк, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:


[ΠΌΠ΅Ρ‚ΠΊΠ°:] [ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ°] [ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹] [; ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ]

Π“Π΄Π΅:

  • ΠœΠ΅Ρ‚ΠΊΠ° — Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ символьноС имя строки ΠΊΠΎΠ΄Π°
  • МнСмоника — Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ процСссора
  • ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ — Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (рСгистры, адрСса памяти, константы)
  • ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ — пояснСния ΠΊ ΠΊΠΎΠ΄Ρƒ (послС символа πŸ˜‰

НС всС поля ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ зависят ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ процСссора.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ассСмблСрС

Випичная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° ассСмблСрС для x86 процСссоров состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… основных частСй:

  • Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ассСмблСра (модСль памяти, Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка ΠΈ Ρ‚.Π΄.)
  • Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… (.data) — для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
  • Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° (.code) — содСрТит исполняСмый ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ стСка (.stack) — для выдСлСния памяти ΠΏΠΎΠ΄ стСк
  • Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ стСк ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² памяти. МодСль памяти опрСдСляСт, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° ассСмблСрС

Для создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ассСмблСрС Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ инструмСнты:

  • АссСмблСр — транслируСт исходный ΠΊΠΎΠ΄ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TASM, NASM)
  • ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ — связываСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TLINK)
  • ВСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ — для написания исходного ΠΊΠΎΠ΄Π°
  • ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ — для пошаговой ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, TD)

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (IDE), ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠ΅ всС эти инструмСнты.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ простой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ассСмблСрС

Рассмотрим ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ «Hello World» Π½Π° ассСмблСрС для DOS:

.model small
.stack 100h

.data
    hello db 'Hello, World!$'

.code
start:
    mov ax, @data
    mov ds, ax
    
    mov ah, 09h
    mov dx, offset hello
    int 21h
    
    mov ax, 4C00h
    int 21h
end start

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран строку «Hello, World!» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DOS. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ шаги:

  1. ОбъявлСниС ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка
  2. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ строки Π² сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ…
  3. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ сСгмСнтного рСгистра DS
  4. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DOS для Π²Ρ‹Π²ΠΎΠ΄Π° строки
  5. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ рСгистры процСссора x86

ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρ‹ x86 ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ основныС рСгистры:

  • РСгистры ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния: AX, BX, CX, DX
  • Π˜Π½Π΄Π΅ΠΊΡΠ½Ρ‹Π΅ рСгистры: SI, DI
  • Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ: SP (стСк), BP (ΠΊΠ°Π΄Ρ€ стСка)
  • Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ рСгистры: CS, DS, SS, ES
  • РСгистр Ρ„Π»Π°Π³ΠΎΠ²: FLAGS
  • Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄: IP

ПониманиС назначСния ΠΈ использования этих рСгистров критичСски Π²Π°ΠΆΠ½ΠΎ для программирования Π½Π° ассСмблСрС.

Бпособы адрСсации Π² ассСмблСрС

АссСмблСр x86 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы адрСсации ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ²:


  • РСгистровая адрСсация — ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ находится Π² рСгистрС
  • НСпосрСдствСнная адрСсация — ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Π·Π°Π΄Π°Π½ Π² самой ΠΊΠΎΠΌΠ°Π½Π΄Π΅
  • ΠŸΡ€ΡΠΌΠ°Ρ адрСсация — адрСс ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π·Π°Π΄Π°Π½ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅
  • КосвСнная адрСсация — адрСс ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° вычисляСтся Π²ΠΎ врСмя выполнСния
  • Базовая адрСсация — адрСс вычисляСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ рСгистра
  • ИндСксная адрСсация — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ индСксный рСгистр

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ способа адрСсации ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ассСмблСра x86

НСкоторыС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ассСмблСра x86:

  • MOV — ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…
  • ADD, SUB — слоТСниС ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅
  • INC, DEC — ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ Π½Π° 1
  • AND, OR, XOR — ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
  • CMP — сравнСниС
  • JMP — бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄
  • Jcc — условныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ (JE, JNE, JG ΠΈ Ρ‚.Π΄.)
  • CALL, RET — Π²Ρ‹Π·ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • PUSH, POP — Ρ€Π°Π±ΠΎΡ‚Π° со стСком

КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности использования ΠΈ влияния Π½Π° Ρ„Π»Π°Π³ΠΈ процСссора.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

АссСмблСр — ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для создания высокоэффСктивного ΠΊΠΎΠ΄Π°, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ процСссора ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π² Ρ†Π΅Π»ΠΎΠΌ. НСсмотря Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½Π°Π²Ρ‹ΠΊΠΈ программирования Π½Π° ассСмблСрС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с высокоуровнСвыми языками, особСнно ΠΏΡ€ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ критичСских участков ΠΊΠΎΠ΄Π°.



2.2. ПсСвдо-инструкции

2.2. ПсСвдо-инструкции

ПсСвдо-инструкции Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ инструкциями Ρ…86 процСссора, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»Π΅ инструкций, Ρ‚.ΠΊ. это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящСС мСсто для Π½ΠΈΡ…. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ псСвдо-инструкциями ΡΠ²Π»ΡΡŽΡ‚ΡΡ

DB, DW, DD, DQ, DT, DDQ ΠΈ DO, ΠΈΡ… ΠΊΠΎΠΏΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ RESB, RESW, RESD, RESQ, REST, RESDDQ ΠΈ RESO, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ INCBIN, EQU ΠΈ прСфикс TIMES.

2.2.1.

DB ΠΈ Π΅Π΅ Π΄Ρ€ΡƒΠ·ΡŒΡ: ОбъявлСниС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

DB, DW, DD, DQ, DT, DDQ ΠΈ DO ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для объявлСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ достаточно ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ способами:

        db      0x55                ; просто Π±Π°ΠΉΡ‚ 0x55
        db      0x55,0x56,0x57      ; ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ 3 Π±Π°ΠΉΡ‚Π°
        db      'a',0x55            ; символьная константа
        db      'hello',13,10,'$'   ; это строковая константа
        dw      0x1234              ; 0x34 0x12
        dw      'a'                 ; 0x41 0x00 (это просто число)
        dw      'ab'                ; 0x41 0x42 (символьная константа)
        dw      'abc'               ; 0x41 0x42 0x43 0x00 (строка)
        dd      0x12345678          ; 0x78 0x56 0x34 0x12
        dq      0x1122334455667788  ;0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
        ddq      0x112233445566778899aabbccddeeff00
        ; 0x00 0xff 0xee 0xdd 0xcc 0xbb 0xaa 0x99
        ; 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
        do      0x112233445566778899aabbccddeeff00 ;Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ
        dd      1.
234567e20 ; константа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ dq 1.234567e20 ; Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности dt 1.234567e20 ; Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ точности

DT Π½Π΅ допускаСт Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² числовыС константы, Π° DDQ — констант с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. Π›ΡŽΠ±ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ большС Ρ‡Π΅ΠΌ

DD Π½Π΅ допускаСт строк Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ².

2.2.2.

RESB ΠΈ Π΅Π΅ Π΄Ρ€ΡƒΠ·ΡŒΡ: ОбъявлСниС Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

RESB, RESW, RESD, RESQ, REST, RESDQ ΠΈ RESO Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ для использования Π² BSS-сСкции модуля: ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ пространство для хранСния Π΄Π°Π½Π½Ρ‹Ρ…. КаТдая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ числом Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π±Π°ΠΉΡ‚, слов, Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов ΠΈ Ρ‚.Π΄. NASM Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ синтаксис рСзСрвирования Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ пространства, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² MASM/TASM, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ DW ? ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ: это Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ. ΠžΠΏΠ΅Ρ€Π°Π½Π΄ псСвдо-инструкций класса RESB являСтся критичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ: см. Π Π°Π·Π΄Π΅Π»Β 2.8.

НапримСр:

buffer:         resb    64      ; Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ 64 Π±Π°ΠΉΡ‚
wordvar:        resw    1       ; Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ слова
realarray       resq    10      ; массив ΠΈΠ· 10 чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ

2.2.3.

INCBIN: Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²

INCBIN дословно Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠΈ нСпосрСдствСнно Π² исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ³Ρ€ΡƒΡˆΠΊΠΈ. Однако, это рСкомСндуСтся Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для _Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ…_ ΠΏΠΎΡ€Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚Π° псСвдо-инструкция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° трСмя Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами:

        incbin "file.dat"        ; Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ
        incbin "file.dat",1024   ; пропуск ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 1024 Π±Π°ΠΉΡ‚
        incbin "file.dat",1024,512 ; пропуск ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 1024 ΠΈ
                                 ; Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… 512 Π±Π°ΠΉΡ‚

2.

2.4. EQU: ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант

EQU опрСдСляСт символ для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ константного значСния: Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ EQU, Π² этой строкС ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠ°. Бмысл `EQU`β€” ΡΠ²ΡΠ·Π°Ρ‚ΡŒ имя ΠΌΠ΅Ρ‚ΠΊΠΈ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΅Π΅ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. Π”Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. НапримСр,

message db 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Ρ„ΡƒΡ„Π΅Π»'
msglen  equ $-message

опрСдСляСт msglen ΠΊΠ°ΠΊ константу 13. msglen Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ прСпроцСссора: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ msglen обрабатываСтся здСсь Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ значСния $ (Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ $ – см. Π Π°Π·Π΄Π΅Π»Β 2.6) Π² мСстС опрСдСлСния, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ обрабатыватся Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π½Π° это ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ значСния $ Π² мСстС ссылки. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ EQU Ρ‚Π°ΠΊΠΆΠ΅ являСтся критичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (Π Π°Π·Π΄Π΅Π»Β 2.8).

2.2.5.

TIMES: ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ инструкций ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ

TIMES заставляСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколько Ρ€Π°Π·. Данная псСвдо-инструкция отчасти прСдставляСт NASM-эквивалСнт синтаксиса DUP, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ MASM-совмСстимыми ассСмблСрами. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€

zerobuf:        times 64 db 0

ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅; ΠΎΠ΄Π½Π°ΠΊΠΎ TIMES Π±ΠΎΠ»Π΅Π΅ разносторонняя инструкция. АргумСнт TIMES β€” Π½Π΅ просто числовая константа, Π° числовоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ:

buffer: db 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Ρ„ΡƒΡ„Π΅Π»'
        times 64-$+buffer db ' '

ΠŸΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ пространство, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ buffer Π΄ΠΎ 64 Π±Π°ΠΉΡ‚. НаконСц, TIMES ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… инструкциях, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹:

        times 100 movsb

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ times 100 resb 1 ΠΈ resb 100 Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ послСдняя инструкция Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 100 Ρ€Π°Π· быстрСС ΠΈΠ·-Π·Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ассСмблСра.

ΠžΠΏΠ΅Ρ€Π°Π½Π΄ псСвдо-инструкции TIMES, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ EQU, RESB ΠΈ Π΅Π΅ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, являСтся критичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (Π Π°Π·Π΄Π΅Π»Β 2.8).

Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ TIMES Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Π² макросах: ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ слуТит Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ TIMES обрабатываСтся послС ΠΌΠ°ΠΊΡ€ΠΎ-Ρ„Π°Π·Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ TIMES ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ 64-$+buffer. Для повторСния Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π² слоТных макросах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ прСпроцСссора %rep.

TASM

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° языкС АссСмблСра

Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ языка ассСмблСра цСлСсообразнСС всСго Π½Π°Ρ‡Π°Ρ‚ΡŒ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ простой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΎΠΉ:


text    segment            ;(1)Начало сСгмСнта ΠΊΠΎΠΌΠ°Π½Π΄ 
assume  CS:text,DS:data    ;(2)Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹ΠΉ рСгистр CS Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° сСгмСнт 
			   ;ΠΊΠΎΠΌΠ°Π½Π΄, Π° сСгмСнтный рСгистр DS - Π½Π° сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ… 
begin: 	mov AX,data        ;(3)АдрСс сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… сначала Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π² АΠ₯, 
	mov DS,AX          ;(4)Π° Π·Π°Ρ‚Π΅ΠΌ пСрСнСсСм ΠΈΠ· АΠ₯ Π² DS 
	mov AH,09h         ;(5)Ѐункция DOS 9h Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран 
	mov DX,offset mesg ;(6)АдрСс Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ сообщСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² DX 
	int 21h            ;(7)Π’Ρ‹Π·ΠΎΠ² DOS 
	mov AH,4Ch         ;(8)Ѐункция 4Ch Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 
	mov AL, 0          ;(9)Код 0 ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ 
	int 21h            ;(10)Π’Ρ‹Π·ΠΎΠ² DOS 
text    ends               ;(11)ΠšΠΎΠ½Π΅Ρ† сСгмСнта ΠΊΠΎΠΌΠ°Π½Π΄ 
data    segment            ;(12)Начало сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… 
mesg    db 'НачинаСм!$'    ;(13)Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ тСкст 
data    ends               ;(14)ΠšΠΎΠ½Π΅Ρ† сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… 
stk     segment stack      ;(15)Начало сСгмСнта стСка 
        db 256 dup (0)     ;(16)Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅ΠΌ 256 Π±Π°ΠΉΡ‚ для стСка 
stk     ends               ;(17)ΠšΠΎΠ½Π΅Ρ† сСгмСнта стСка 
        end begin          ;(18)ΠšΠΎΠ½Π΅Ρ† тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° 

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ вычисляСт ΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, Π° всСго лишь Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° строку с Ρ„Ρ€Π°Π·ΠΎΠΉ «ΠΠ°Ρ‡ΠΈΠ½Π°Π΅ΠΌ!».

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Turbo Assembler, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ· прСдставлСнного исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ исполнимый Ρ„Π°ΠΉΠ», ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Π³ΠΎΡ‚ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π° исполнСниС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ располоТСн Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ TASM. Если Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π½Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ здСсь. Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» прСдставляСт собой Π°Ρ€Ρ…ΠΈΠ², содСрТащий ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ этот ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для вас мСстС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π‘Π»ΠΎΠΊΠ½ΠΎΡ‚ создайтС Π² этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Ρ„Π°ΠΉΠ», содСрТащий ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ сохранитС Π΅Π³ΠΎ с ΠΏΡ€ΠΎΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ asm.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ прописныС, Ρ‚Π°ΠΊ ΠΈ строчныС Π±ΡƒΠΊΠ²Ρ‹: транслятор воспринимаСт ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ строк достаточно Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π½Π°Ρ‡Π°Π»ΠΎ коммСнтария.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит 18 строк-ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ языка ассСмблСра. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° segment ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ сСгмСнт ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Ρƒ даСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ имя text. Π’ ΠΊΠΎΠ½Ρ†Π΅ прСдлоТСния послС Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой располагаСтся ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ языка ассСмблСра ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΏΠΎΠ»Π΅ΠΉ: ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΈ коммСнтария, располагаСмых Π² пСрСчислСнном порядкС. НС всС поля ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹; Ρ‚Π°ΠΊ, Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 1 Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚; ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3 Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС 4 ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: имя begin, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (ΠΊΠΎΠΌΠ°Π½Π΄Π° процСссора) mov, ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ АΠ₯ ΠΈ data ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, послС Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ; Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 4 (ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…) отсутствуСт имя.

Π›ΡŽΠ±Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· сСгмСнтов — Π±Π΅Π· сСгмСнтов ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ сСгмСнта: ΠΊΠΎΠΌΠ°Π½Π΄, Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка. Π’ сСгмСнтС ΠΊΠΎΠΌΠ°Π½Π΄ располагаСтся собствСнно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ‚. Π΅. описаниС (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора) ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… дСйствий. Π’ сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°; Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это строка тСкста. НазначСниС сСгмСнта стСка Π±ΡƒΠ΄Π΅Ρ‚ описано Π½ΠΈΠΆΠ΅.

Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 2 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° assume сообщаСтся ассСмблСру (ассСмблСром называСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-транслятор, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π°Ρ исходный тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΊΠΎΠ΄Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора), Ρ‡Ρ‚ΠΎ сСгмСнтный рСгистр CS Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° сСгмСнт ΠΊΠΎΠΌΠ°Π½Π΄ text, Π° сСгмСнтный рСгистр DS — Π½Π° сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ… data. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ рСгистры (Π° всСго ΠΈΡ… Π² процСссорС 4) ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ. Когда ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° загруТаСтся Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ становится извСстно, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ адрСсам памяти ΠΎΠ½Π° располагаСтся, Π² сСгмСнтныС рСгистры заносятся Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ адрСса Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Ρ… Π·Π° Π½ΠΈΠΌΠΈ сСгмСнтов. Π’ дальнСйшСм Π»ΡŽΠ±Ρ‹Π΅ обращСния ΠΊ ячСйкам ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ указания сСгмСнта, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π°Ρ нас ячСйка, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ сСгмСнта, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ. Π­Ρ‚ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€ носит Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса ΠΈΠ»ΠΈ смСщСния. Вранслятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΈΠ΅ сСгмСнтныС рСгистры Π±ΡƒΠ΄ΡƒΡ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒΡΡ ячСйки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ ΠΌΡ‹ сообщаСм Π΅ΠΌΡƒ ΠΎΠ± этом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° assume (assume — ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ). ΠŸΡ€ΠΈ этом Π² рСгистр CS адрСс Π½Π°Ρ‡Π°Π»Π° сСгмСнта Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ автоматичСски, Π° рСгистр DS Π½Π°ΠΌ придСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ стСку осущСствляСтся особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Π² соотвСтствиС сСгмСнтный рСгистр (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ — сСгмСнтный рСгистр SS) Π½Π΅Ρ‚ нСобходимости.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° прСдлоТСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ слуТат для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ слуТСбной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ассСмблСра. АссСмблСр воспринимаСт ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Сю Π² своСй дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Π΅. Однако Π² состав Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, состоящСй ΠΈΠ· ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ², эти строки Π½Π΅ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ процСссору, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠ½ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ segment ΠΈ assume Π½Π΅ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ лишь самим ассСмблСром Π½Π° этапС трансляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠ΅ нСтранслируСмыС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ псСвдоопСраторами ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ ассСмблСра Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ истинных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² — ΠΊΠΎΠΌΠ°Π½Π΄ языка.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ с ΠΌΠ΅Ρ‚ΠΊΠΈ begin, являСтся ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠΉ строкой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ процСссор Π·Π½Π°Π», с ΠΊΠ°ΠΊΠΎΠ³ΠΎ прСдлоТСния Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ послС Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ ΠΌΠ΅Ρ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ указываСтся Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° самого послСднСго ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ end (см. ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 18).

Начиная ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся строка Π·Π° строкой Ρ‚ΠΎΡ‡Π½ΠΎ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠ°ΠΊΠΎΠΌ эти строки написаны программистом.

Π’ прСдлоТСниях 3 ΠΈ 4 выполняСтся инициализация сСгмСнтного рСгистра DS. Π‘Π½Π°Ρ‡Π°Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ text (Ρ‚. Π΅. адрСс сСгмСнта text) загруТаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ mov (ΠΎΡ‚ move — ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ) Π² рСгистр ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния процСссора АΠ₯, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· рСгистра’ АΠ₯ пСрСносится Π² рСгистр DS. Вакая двухступСнчатая опСрация Π½ΡƒΠΆΠ½Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ процСссор Π² силу Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… особСнностСй своСй Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ нСпосрСдствСнной Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ адрСса Π² сСгмСнтный рСгистр. ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ рСгистром АΠ₯ Π² качСствС «ΠΏΠ΅Ρ€Π΅Π²Π°Π»ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π°».

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ 5, 6 ΠΈ 7 Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ сущСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран строки тСкста. ДСлаСтся это Π½Π΅ нСпосрСдствСнно, Π° ΠΏΡƒΡ‚Π΅ΠΌ обращСния ΠΊ слуТСбным ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы MS-DOS. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² составС ΠΊΠΎΠΌΠ°Π½Π΄ процСссора ΠΈ, соотвСтствСнно, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² языка ассСмблСра Π½Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° экран (ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π²ΠΎΠ΄Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, записи Π² Ρ„Π°ΠΉΠ» Π½Π° дискС ΠΈ Ρ‚. Π΄.). Π’Ρ‹Π²ΠΎΠ΄ Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа Π½Π° экран Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прСдставляСт собой довольно ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, для выполнСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ трСбуСтся длинная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, эту ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. Π’ состав DOS Π²Ρ…ΠΎΠ΄ΠΈΡ‚ большоС количСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΡ… стандартныС ΠΈ часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран ΠΈ Π²Π²ΠΎΠ΄ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, запись Π² Ρ„Π°ΠΉΠ» ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ установка Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ освобоТдСниС памяти ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ DOS, Π½Π°Π΄ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² рСгистр ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния АН Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ рСгистры — исходныС Π΄Π°Π½Π½Ρ‹Π΅ для выполнСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, послС Ρ‡Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ int 2lh, (int — ΠΎΡ‚ interrupt — ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅), которая пСрСдаст ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ DOS. Π’Ρ‹Π²ΠΎΠ΄ Π½Π° экран строки тСкста ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ DOS; ΠΌΡ‹ воспользовались Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ 09h, которая Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² рСгистрС DX содСрТался адрСс Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ строки. Π’ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 6 адрСс строки mesg загруТаСтся Π² рСгистр DX, Π° Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 7 осущСствляСтся Π²Ρ‹Π·ΠΎΠ² DOS.

Π’ прСдлоТСниях 5 ΠΈ 7 ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ числа ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π·Π½Π°ΠΊΠΎΠΌ h. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π² языкС ассСмблСра ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ (Π΄Π°Π»Π΅Π΅ — 16-Ρ€ΠΈΡ‡Π½Ρ‹Π΅) числа, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ дСсятичных, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ Π·Π½Π°ΠΊΠ° Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚.

ПослС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ DOS Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слуТСбныС дСйствия. Надо ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡƒΡŽ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Надо Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран запрос DOS (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Π²ΠΈΠ΄Π΅ символа >, прСдваряСмого ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°) ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. ВсС эти дСйствия выполняСт функция DOS с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 4Ch. Π­Ρ‚Π° функция ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² рСгистрС AL находится ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° пСрСдаст DOS. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΊΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, поэтому Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 9 ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ 0 Π² рСгистр AL ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ DOS ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΉ Π½Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ int 21h. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ выполняСмая Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° этом Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ, ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ Π½ΡƒΠΆΠ½ΠΎ) Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ сСгмСнт ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‡Ρ‚ΠΎ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ends (ΠΎΡ‚ end segment, ΠΊΠΎΠ½Π΅Ρ† сСгмСнта), ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ для наглядности ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ указываСтся имя Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ сСгмСнта, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС сСгмСнта text.

ВслСд Π·Π° сСгмСнтом ΠΊΠΎΠΌΠ°Π½Π΄ описываСтся сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…. Он, ΠΊΠ°ΠΊ ΠΈ сСгмСнт ΠΊΠΎΠΌΠ°Π½Π΄, начинаСтся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ segment, прСдваряСмой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ нашСго сСгмСнта, ΠΈ заканчиваСтся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ends. Π£ нас Π² качСствС Π΄Π°Π½Π½Ρ‹Ρ… выступаСт строка тСкста. ВСкстовыС строки вводятся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ассСмблСра db (ΠΎΡ‚ define byte, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚) ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² апострофы ΠΈΠ»ΠΈ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, поля Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π’ нашСм случаС Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ являСтся Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ mesg (ΠΎΡ‚ message, сообщСниС), с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 13.

Π’Ρ‹ΡˆΠ΅, Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 6, ΠΌΡ‹ Ρ‡Π΅Ρ€Π΅Π· рСгистр DX ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ DOS адрСс Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π½Π° экран строки тСкста. Но ΠΊΠ°ΠΊ DOS ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚, Π³Π΄Π΅ эта строка Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ? Π₯отя Π½Π°ΠΌ ΠΊΠΎΠ½Π΅Ρ† строки Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π»ΠΈΠ²ΠΎ Π²ΠΈΠ΄Π΅Π½, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠ΄Π°Ρ…, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоит выполнимая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΎΠ½ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½, ΠΈ DOS, вывСдя Ρ‡Π° экран послСдний символ строки — Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π²Ρ‹Π²ΠΎΠ΄ Π±Π°ΠΉΡ‚ΠΎΠ² памяти, располоТСнных Π·Π° Ρ„Ρ€Π°Π·ΠΎΠΉ «ΠΠ°Ρ‡ΠΈΠ½Π°Π΅ΠΌ!». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ DOS слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ кончаСтся строка тСкста. НСкоторыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DOS Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ указания Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· рСгистров Π΄Π»ΠΈΠ½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ строки, ΠΎΠ΄Π½Π°ΠΊΠΎ функция 09h Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Π°Ρ‡Π΅. Она Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ тСкст Π΄ΠΎ Π·Π½Π°ΠΊΠ° Π΄ΠΎΠ»Π»Π°Ρ€Π° ($), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ Π½Π°ΡˆΡƒ Ρ„Ρ€Π°Π·Ρƒ.

Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ стСка, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΡ‹ Π΄Π°Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ имя stk, начинаСтся, ΠΊΠ°ΠΊ ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ сСгмСнты, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ segment ΠΈ заканчиваСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ends. Π‘Ρ‚Π΅ΠΊ прСдставляСт собой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ нСбольшого объСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ просто рСзСрвируСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство пустых Π±Π°ΠΉΡ‚ΠΎΠ². Для выдСлСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструкция

db Ρ€Π°Π·ΠΌΠ΅Ρ€ dup (Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ)

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для стСка Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ 256 Π±Π°ΠΉΡ‚, Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… нулями.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ segment, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ сСгмСнт стСка, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ stack. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ этого обозначСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ рСгистры процСссора, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со стСком, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ систСмой Π΄ΠΎΠ»ΠΆΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, сСгмСнтный рСгистр стСка SS Π±ΡƒΠ΄Π΅Ρ‚ настроСн Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта стСка, Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка SP — Π½Π° Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅Ρ† (стСк заполняСтся Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ).

ПослСдняя строка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТит Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ end, которая Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ассСмблСра, Ρ‡Ρ‚ΠΎ закончился Π²ΠΎΠΎΠ±Ρ‰Π΅ вСсь тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ большС Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π’ качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ указываСтся Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚. Π΅. адрСс ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ строки. Π’ нашСм случаС это ΠΌΠ΅Ρ‚ΠΊΠ° begin.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² язык АссСмблСра | Assembler | Π‘Ρ‚Π°Ρ‚ΡŒΠΈ | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Realcoding.Net

<!—StartFragment —>

Автор: Π‘Π°Ρ€Π΄ΠΈΠ½ П.Π‘., http://proger.ru
mailto:[email protected]
8 октября 2003 Π³.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ АссСмблСр

АссСмблСр — Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ язык программирования. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ процСссора сущСствуСт свой ассСмблСр. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡ Π½Π° ассСмблСрС Π²Ρ‹ нСпосрСдствСнно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€ΠΎΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст Π½Π° языкС ассСмблСра состоит ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ (ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ послС компиляции ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° ассСмблСрС — ΠΎΡ‡Π΅Π½ΡŒ тяТёлая ΡˆΡ‚ΡƒΠΊΠ°. Π’Π·Π°ΠΌΠ΅Π½ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ассСмблСрС ΠΏΠΈΡˆΡƒΡ‚, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ΅Π½ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΡ‚ процСссора. На ассСмблСрС Π²Ρ‹ Π΄Π°Ρ‘Ρ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ процСссору ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ лишнСго мусора. Π­Ρ‚ΠΈΠΌ ΠΈ достигаСтся высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ассСмблСр Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ модСль микропроцСссорной систСмы. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста микропроцСссорная систСма состоит ΠΈΠ·:

  1. ΠœΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π°
  2. ΠŸΠ°ΠΌΡΡ‚ΠΈ
  3. Устройств Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль Ρ…ΠΎΡ€ΠΎΡˆΠΎ описана Π² Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ [1].

Бинтаксис АссСмблСра

ΠžΠ±Ρ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ строки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ассСмблСрС

<ΠœΠ΅Ρ‚ΠΊΠ°>: <ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€> <ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹> ; <ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ>

ПолС ΠΌΠ΅Ρ‚ΠΊΠΈ. ΠœΠ΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· символов ΠΈ Π·Π½Π°ΠΊΠΎΠ² подчёркивания. ΠœΠ΅Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² опСрациях условного ΠΈ бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°.

ПолС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’ этом ΠΏΠΎΠ»Π΅ содСрТится ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. НапримСр ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° mov

ПолС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли присутствуСт ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°). ΠžΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько. ΠžΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ дСйствия (ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ, ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈ Ρ‚.Π΄.).

ПолС коммСнтария. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π½ΡƒΠΆΠ΅Π½ для словСсного сопровоТдСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Всё, Ρ‡Ρ‚ΠΎ стоит Π·Π° символом ; считаСтся ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° языкС АссСмблСра

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ассСмблСр для i80x86 процСссора ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС:

  • TASM — Borland Turbo Assembler — компилятор
  • TLINK — Borland Turbo Linker — Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ связСй ( ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ )

Если Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ, Ρ‚ΠΎ Tasm 2.0.

По Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ наша пСрвая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ строку «Hello world!» Π½Π° экран.

Π€Π°ΠΉΠ» sample.asm

	.model small	; МодСль памяти
	.stack 100h	; Установка Ρ€Π°Π·ΠΌΠ΅Ρ€Π° стСка
	.data		; Начало сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
	HelloMsg DB "Hello World!",13,10,"$"
	
	. code	; Начало сСгмСнта ΠΊΠΎΠ΄Π°
	
	mov ax,@DATA	; ΠŸΠ΅Ρ€Π΅ΡΡ‹Π»Π°Π΅ΠΌ адрСс сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… Π² рСгистр AX
	mov ds,ax	; Установка рСгистра DS Π½Π° сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…

	mov ah,09h	; DOS функция Π²Ρ‹Π²ΠΎΠ΄Π° строки Π½Π° экран
	mov dx,offset HelloMsg	; Π—Π°Π΄Π°Ρ‘ΠΌ смСщСниС ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ строки
	int 21h	; Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌ строку
	
	mov ax,4C00h	; DOS функция Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
	int 21h	; Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
	
	end

Как Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° сСгмСнты: сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…, сСгмСнт ΠΊΠΎΠ΄Π° ΠΈ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ стСковый сСгмСнт.

Рассмотрим всё ΠΏΠΎ порядку.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° .model small Π·Π°Π΄Π°Ρ‘Ρ‚ модСль памяти. МодСль small — это 1 сСгмСнт для ΠΊΠΎΠ΄Π°, 1 сСгмСнт для Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ стСка Ρ‚.Π΅. Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ стСк находятся Π² ΠΎΠ΄Π½ΠΎΠΌ сСгмСнтС. Π‘Ρ‹Π²Π°ΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: tiny, medium, compact. Π’ зависимости ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π²Π°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти сСгмСнты вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСгмСнты Π² памяти.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° .stack 100h Π·Π°Π΄Π°Ρ‘Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка. Π‘Ρ‚Π΅ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для сохранСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π΅Ρ‘ восстановлСниСм. Π’ частности стСк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ прСрываниях. Π’ этом случаС содСрТимоС рСгистра Ρ„Π»Π°Π³ΠΎΠ² FLAGS, рСгистра CS ΠΈ рСгистра IP ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² стСкС. Π”Π°Π»Π΅Π΅ ΠΈΠ΄Ρ‘Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ΄Ρ‘Ρ‚ восстановлСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ этих рСгистров.

  • РСгистр Ρ„Π»Π°Π³ΠΎΠ² FLAGS содСрТит ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ послС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ процСссором.
  • РСгистр CS (Code Segment) содСрТит адрСс сСгмСнта ΠΊΠΎΠ΄Π°.
  • РСгистр IP (Instruction Pointer) — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄. Он содСрТит адрСс ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, которая долТная Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ (АдрСс ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сСгмСнта ΠΊΠΎΠ΄Π° CS).

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ простой ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° .data опрСдСляСт Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ «ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅» Ρ‚.Π΅. ΠΈΠ΄Ρ‘Ρ‚ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. ПослС .data ΠΈΠ΄Ρ‘Ρ‚ строка
HelloMsg DB «Hello World!»,13,10,»$»

Π—Π΄Π΅ΡΡŒ HelloMsg — это символьноС имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт Π½Π°Ρ‡Π°Π»Ρƒ строки «Hello World!» (Π±Π΅Π· ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ). Π’ΠΎ Π΅ΡΡ‚ΡŒ это адрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа нашСй строки ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DB (Define Byte) опрСдСляСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΏΠΎ-Π±Π°ΠΉΡ‚Π½ΠΎ. 13,10 — ΠΊΠΎΠ΄Ρ‹ символов Новая строка ΠΈ Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ, Π° символ $ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ DOS Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 09h. Π˜Ρ‚Π°ΠΊ, наша строка Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π² памяти 15 Π±Π°ΠΉΡ‚.

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° .code опрСдСляСт Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта ΠΊΠΎΠ΄Π° (CS — Code Segment) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Π°Π»Π΅Π΅ ΠΈΠ΄ΡƒΡ‚ строки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТащиС ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄.

РасскаТу ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ mov.

mov <ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ>, <источник>

Команда mov — ΠΊΠΎΠΌΠ°Π½Π΄Π° пСрСсылки. Она пСрСсылаСт содСрТимоС источника Π² ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ. ΠŸΠ΅Ρ€Π΅ΡΡ‹Π»ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ рСгистр-рСгистр, рСгистр-ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΏΠ°ΠΌΡΡ‚ΡŒ-рСгистр, Π° Π²ΠΎΡ‚ пСрСсылки ΠΏΠ°ΠΌΡΡ‚ΡŒ-ΠΏΠ°ΠΌΡΡ‚ΡŒ Π½Π΅Ρ‚ Ρ‚.Π΅. всё ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· рСгистры процСссора.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ рСгистр сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…. Настройка состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ записываСм адрСс сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… @DATA Π² рСгистр DS (Data Segment). НСпосрСдствСнно Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ адрСс Π² этот рСгистр нСльзя — Ρ‚Π°ΠΊΠΎΠ²Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, поэтому ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ рСгистр AX. Π’ AX ΠΌΡ‹ записываСм адрСс сСгмСнта ΠΊΠΎΠ΄Π°

mov ax,@DATA

Π° ΠΏΠΎΡ‚ΠΎΠΌ пСрСсылаСм содСрТимоС рСгистра AX Π² рСгистр DS.

mov ds, ax

ПослС этого рСгистр DS Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ адрСс Π½Π°Ρ‡Π°Π»Π° сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…. По адрСсу DS:0000h Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ символ H. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΎ сСгмСнтах ΠΈ смСщСниях.

АдрСс состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… <Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚>:<Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅>, Π³Π΄Π΅ Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ это 2 Π±Π°ΠΉΡ‚Π° ΠΈ смСщСниС — 2 Π±Π°ΠΉΡ‚Π°. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ 4 Π±Π°ΠΉΡ‚Π° для доступа ΠΊ любой ячСйкС памяти.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ:

mov ah,09h
mov dx,offset HelloMsg
int 21h

Π’ΡƒΡ‚ ΠΌΡ‹ Π² рСгистр AH записываСм число 09h — Π½ΠΎΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 21-Π³ΠΎ прСрывания, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку Π½Π° экран.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС ΠΌΡ‹ Π² рСгистр DX записываСм адрСс(смущСниС) ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ нашСй строки.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ 21h — это ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ DOS. ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ — ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°ΡΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прСрываСтся ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ выполнятся ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. По Π½ΠΎΠΌΠ΅Ρ€Ρƒ прСрывания опрСдСляСтся адрСс ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ DOS, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку символов Π½Π° экран.

Π£ вас навСрняка Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ вопрос: А ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ записываСм Π½ΠΎΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 09h Π² рСгистр AH ? И ΠΏΠΎΡ‡Π΅ΠΌΡƒ смСщСниС ΠΊ строкС записываСм Π² рСгистр DX ?
ΠžΡ‚Π²Π΅Ρ‚ простой: для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ рСгистры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ рСгистры Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ функциям Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π² help’Π΅.

Π˜Π΄Ρ‘ΠΌ дальшС:

mov ax,4C00h
int 21h

end

mov ax,4C00h — пСрСсылаСм Π½ΠΎΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² рСгистр AX. Ѐункция 4C00h — Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

int 21h — выполняСм ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ (собствСнно Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ)

end — ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ПослС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ end компилятор всё ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚, поэтому ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ πŸ™‚

Если Π²Ρ‹ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°, Ρ‚ΠΎ Π²Ρ‹ Π³Π΅Ρ€ΠΎΠΉ!

РСкомСндуСмая Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

[1]. Майко Π“.Π’. АссСмблСр для IBM PC: — М.: «Π‘изнСс-Π˜Π½Ρ„ΠΎΡ€ΠΌ», «Π‘ΠΈΡ€ΠΈΠ½» 1999 Π³. — 212 с.

АссСмблСр-EQU Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ? — CodeRoad



Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅:

section .data
    sa db ’abxdefghxl’,0
    la  EQU $ - sa
    sb db ’abcdexghil’,0
section .text

Как я Π²ΠΈΠ΄Π΅Π» Π² своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° я дСлаю mov ecx, la-Ρ‚ΠΎΠ³Π΄Π° я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ число 11 Π² ECX. Π― Π½Π΅ понял ΠΏΠΎΡ‡Π΅ΠΌΡƒ-число abxdefghxl Π½Π΅ Ρ€Π°Π²Π½ΠΎ 10. ΠœΡ‹ Ρ‚ΠΎΠΆΠ΅ считаСм 0?

assembly x86
ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Adam Sh Β  Β  24 ΠΌΠ°Ρ€Ρ‚Π° 2012 Π² 11:30

2 ΠΎΡ‚Π²Π΅Ρ‚Π°


  • Assembly 8086 EQU Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°

    Π£ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ EQU Π² ассСмблСрС (8086). abc EQU xyz Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ EQU Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ мСняСт мСстами abc, ΠΊΠΎΠ³Π΄Π° встрСчаСтся Π² ΠΊΠΎΠ΄Π΅ с xyz, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ прСдставляСт xyz, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Ρ‚. Π΄.? Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ³Ρƒ Π»ΠΈ я ΠΏΠΈΡΠ°Ρ‚ΡŒ? varA EQU [bp+4] mov ax,…

  • АссСмблСр sysTime Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ

    я ΠΈΠ·ΡƒΡ‡Π°ΡŽ ассСмблСр (Nasm, Linux, Ubuntu 16.4, x86_64) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с использованиСм Π²Ρ‹Π·ΠΎΠ²Π° sys_time (mov eax, 13). section .bss time: resb 30; section .data msg: db The Time is:; msgLen: equ $-msg; blank: db 0x0a; blankLen: equ $-blank; section .text global _start: _start: mov eax, 13; mov…



2

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ sa начинаСтся с 0x400 . Π’Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ 10 ( abxdefghxl ) плюс 1 ( 0 Π² ΠΊΠΎΠ½Ρ†Π΅ ) И, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, la wwould start at 0x40B . $ прСдставляСт Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ адрСс инструкции/Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, $-sa = 0xB ΠΈΠ»ΠΈ 11

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Pavan Manjunath Β  Β  24 ΠΌΠ°Ρ€Ρ‚Π° 2012 Π² 11:39



1

$ прСдставляСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ. И ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ тСкущая позиция находится послС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ объявлСния «sa», Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ $-sa Ρ€Π°Π²Π½ΠΎ 11. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² assembly Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… «string», «sa»-это просто Π½Π°Π±ΠΎΡ€ Π±Π°ΠΉΡ‚ΠΎΠ².

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Ville Krumlinde Β  Β  24 ΠΌΠ°Ρ€Ρ‚Π° 2012 Π² 11:37


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:


Боздавая простыС Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (Π½Π΅ ELF, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ символов ΠΈ Ρ‚. Π΄.), Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ассСмблСр

Π― Ρ…ΠΎΡ‡Ρƒ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого: .data .org 0 .equ foo, 42 .asciz foo label: .long 0xffffffff .long 0x12345678 .byte foo .long label .long bar .equ bar,…


ассСмблСр avr: #define ΠΏΡ€ΠΎΡ‚ΠΈΠ² .equ, это ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅?

Π­Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° avr-c #define baudrate 9600 Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° avr-asm .equ BAUD = 9600 ??


Π§Ρ‚ΠΎ EQU Π΄Π΅Π»Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Π² этом ΠΊΠΎΠ΄Π΅?

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ этот Ρ„Π°ΠΉΠ» Π² старой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ DOS. IDATE EQU I/1/8/0 Date : MM/DD/YY ITIME EQU I/9/8/0 Time : HH:MM:SS IUSER EQU I/17/6/0 User ID : XXX999 ITERM EQU…


Assembly 8086 EQU Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°

Π£ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ EQU Π² ассСмблСрС (8086). abc EQU xyz Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ EQU Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ мСняСт мСстами abc, ΠΊΠΎΠ³Π΄Π° встрСчаСтся Π² ΠΊΠΎΠ΄Π΅ с xyz, нСзависимо ΠΎΡ‚…


АссСмблСр sysTime Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ

я ΠΈΠ·ΡƒΡ‡Π°ΡŽ ассСмблСр (Nasm, Linux, Ubuntu 16.4, x86_64) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с использованиСм Π²Ρ‹Π·ΠΎΠ²Π° sys_time (mov eax, 13). section .bss time: resb 30; section .data msg: db The Time is:; msgLen: equ…


Как я ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшний EQU Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π² MASM 5.10

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ большой Ρ„Π°ΠΉΠ» .ASM Π½Π° нСсколько Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, оставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ мою ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² main.asm. Π­Ρ‚ΠΎ ΠΈΠ³Ρ€Π°,поэтому я надСялся Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²Π²ΠΎΠ΄Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π½Π° input.asm,…


ЭкспрСсс-константа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΈΠ· символичСского ΠΈΠΌΠ΅Π½ΠΈ EQU

Π― ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽ Π² ARM assembly Π² DS-5 5.28, Π½Π°Ρ†Π΅Π»ΠΈΠ²Π°ΡΡΡŒ Π½Π° cortex-a8 с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΈ Π½Π΅ΠΎΠ½ΠΎΠΌ. ΠŸΡ€ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ констант с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EQU, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ M EQU 5 Ρ‚ΠΎΠ³Π΄Π° я ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ константу Π² rest…


Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «000000q»?

Π― ΠΈΠ·ΡƒΡ‡Π°ΡŽ x86_64 ассСмблСр ( yasm ) с этим ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠΌ. Π’Π°ΠΌ я встрСтил ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ„Π»Π°Π³ΠΈ доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ: O_RDONLY equ 000000q O_WRONLY equ 000001q O_RDWR equ 000002q Вопрос Π²…


Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ L EQU 0AH ΠΈ T EQU 09H Π² assembly?

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ,Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅(L Equ 0AH ΠΈ T equ 09h) Π² assembly, поТалуйста?


БохраняСт Π»ΠΈ EQU Π² 68K Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² памяти?

Π― дСлаю Π·Π°Π΄Π°Π½ΠΈΠ΅, Π³Π΄Π΅ я Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ памяти, ΠΈ ΠΎΠ½Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ C EQU 4, я знаю, Ρ‡Ρ‚ΠΎ EQU присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4 C, Π½ΠΎ Ρ‡Ρ‚ΠΎ это Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ?

Atmel AVR Assembler

Atmel AVR Assembler

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅:

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, содСрТащими инструкции, ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ².

Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π΄Π»ΠΈΠ½Π½Π΅Π΅ 120 символов.

Π›ΡŽΠ±Π°Ρ строка ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с ΠΌΠ΅Ρ‚ΠΊΠΈ, которая являСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ символов Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΡΡ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. ΠœΠ΅Ρ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания мСста, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пСрСдаётся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ для задания ΠΈΠΌΡ‘Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Входная строка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ… Ρ„ΠΎΡ€ΠΌ:

[ΠΌΠ΅Ρ‚ΠΊΠ°:] Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° [ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹] [ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ]
[ΠΌΠ΅Ρ‚ΠΊΠ°:] инструкция [ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹] [ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ]
ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ
ΠŸΡƒΡΡ‚Π°Ρ строка

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

; [ВСкст]

ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹. ВСкст послС Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой (;) ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки игнорируСтся компилятором. ΠœΠ΅Ρ‚ΠΊΠΈ, инструкции ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

label:════ .EQU var1=100 ; УстанавливаСт var1 Ρ€Π°Π²Π½Ρ‹ΠΌ 100 (Π­Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°)
══════════ .EQU var2=200 ; УстанавливаСт var2 Ρ€Π°Π²Π½Ρ‹ΠΌ 200

test:═════ rjmp test════ ; БСсконСчный Ρ†ΠΈΠΊΠ» (Π­Ρ‚ΠΎ инструкция)
════════════════════════ ; Π‘Ρ‚Ρ€ΠΎΠΊΠ° с ΠΎΠ΄Π½ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ

════════════════════════ ; Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° строка с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΊΠΈ, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΠ»ΠΈ инструкции Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ строки.

β•Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ процСссоров AVR

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ процСссоров AVR, Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ описаниС ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² AVR Data Book.
═

АрифмСтичСскиС ΠΈ логичСскиС инструкции

МнСмоника ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ОписаниС ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π€Π»Π°Π³ΠΈ Π¦ΠΈΠΊΠ»Ρ‹
ADD═ Rd,Rr═ Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π΅Π· пСрСноса Rd = Rd + Rr═ Z,C,N,V,H,S═ 1
ADC Rd,Rr Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с пСрСносом Rd = Rd + Rr + C Z,C,N,V,H,S 1
SUB Rd,Rr Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Π±Π΅Π· пСрСноса Rd = Rd — Rr Z,C,N,V,H,S 1
SUBI Rd,K8 Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ константы Rd = Rd — K8 Z,C,N,V,H,S 1
SBC Rd,Rr Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ с пСрСносом Rd = Rd — Rr - C Z,C,N,V,H,S 1
SBCI Rd,K8 Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ константы с пСрСносом Rd = Rd — K8 - C Z,C,N,V,H,S 1
AND Rd,Rr ЛогичСскоС И Rd = Rd β•₯ Rr Z,N,V,S═ 1
ANDI Rd,K8 ЛогичСскоС И с константой Rd = Rd β•₯ K8 Z,N,V,S 1
OR Rd,Rr ЛогичСскоС Π˜Π›Π˜ Rd = Rd V Rr Z,N,V,S 1
ORI Rd,K8 ЛогичСскоС Π˜Π›Π˜ с константой Rd = Rd V K8 Z,N,V,S 1
EOR Rd,Rr ЛогичСскоС ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜ Rd = Rd EOR Rr Z,N,V,S 1
COM Rd ΠŸΠΎΠ±ΠΈΡ‚Π½Π°Ρ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ Rd = $FF — Rd Z,C,N,V,S 1
NEG Rd ИзмСнСниС Π·Π½Π°ΠΊΠ° (Π”ΠΎΠΏ. ΠΊΠΎΠ΄) Rd = $00 — Rd Z,C,N,V,H,S 1
SBR Rd,K8 Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ (Π±ΠΈΡ‚Ρ‹) Π² рСгистрС Rd = Rd V K8 Z,C,N,V,S 1
CBR Rd,K8 Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π±ΠΈΡ‚ (Π±ΠΈΡ‚Ρ‹) Π² рСгистрС Rd = Rd β•₯ ($FF — K8) Z,C,N,V,S 1
INC Rd Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистра Rd = Rd + 1 Z,N,V,S 1
DEC Rd Π”Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистра Rd = Rd -1 Z,N,V,S 1
TST Rd ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ноль Π»ΠΈΠ±ΠΎ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Rd = Rd β•₯ Rd Z,C,N,V,S 1
CLR Rd ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ рСгистр Rd = 0 Z,C,N,V,S 1
SER Rd Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ рСгистр Rd = $FF None 1
ADIW Rdl,K6 Π‘Π»ΠΎΠΆΠΈΡ‚ΡŒ константу ΠΈ слово Rdh:Rdl = Rdh:Rdl + K6═ Z,C,N,V,S 2
SBIW Rdl,K6 Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ константу ΠΈΠ· слова Rdh:Rdl = Rdh:Rdl — K 6 Z,C,N,V,S 2
MUL Rd,Rr Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ° R1:R0 = Rd * Rr Z,C 2
MULS Rd,Rr Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ чисСл со Π·Π½Π°ΠΊΠΎΠΌ R1:R0 = Rd * Rr Z,C 2
MULSU Rd,Rr Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ числа со Π·Π½Π°ΠΊΠΎΠΌ с числом Π±Π΅Π· Π·Π½Π°ΠΊΠ° R1:R0 = Rd * Rr Z,C 2
FMUL Rd,Rr Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ° R1:R0 = (Rd * Rr) << 1 Z,C 2
FMULS Rd,Rr Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… чисСл со Π·Π½Π°ΠΊΠΎΠΌ R1:R0 = (Rd *Rr) << 1 Z,C 2
FMULSU Rd,Rr Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ числа со Π·Π½Π°ΠΊΠΎΠΌ с числом Π±Π΅Π· Π·Π½Π°ΠΊΠ° R1:R0 = (Rd * Rr) << 1 Z,C 2

═

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ вСтвлСния

МнСмоника ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ОписаниС ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π€Π»Π°Π³ΠΈ Π¦ΠΈΠΊΠ»Ρ‹
RJMP k ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ PC = PC + k +1 None 2
IJMP НСт ΠšΠΎΡΠ²Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° (Z) PC = Z None 2
EIJMP НСт Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ косвСнный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND None 2
JMP k ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ PC = k None 3
RCALL k ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ STACK = PC+1, PC = PC + k + 1 None 3/4*
ICALL НСт ΠšΠΎΡΠ²Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² (Z) STACK = PC+1, PC = Z═ None 3/4*
EICALL НСт Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ косвСнный Π²Ρ‹Π·ΠΎΠ² (Z) STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND None 4*
CALL k Π’Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ STACK = PC+2, PC = k None 4/5*
RET НСт Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ PC = STACK None 4/5*
RETI НСт Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· прСрывания PC = STACK I 4/5*
CPSE Rd,Rr Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ссли равны═ if (Rd ==Rr) PC = PC 2 or 3 None 1/2/3
CP Rd,Rr Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ Rd -Rr Z,C,N,V,H,S 1
CPC Rd,Rr Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ с пСрСносом Rd — Rr — C Z,C,N,V,H,S 1
CPI Rd,K8 Π‘Ρ€Π°Π²Π½ΠΈΡ‚ΡŒ с константой Rd — K Z,C,N,V,H,S 1
SBRC Rr,b ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ссли Π±ΠΈΡ‚ Π² рСгистрС ΠΎΡ‡ΠΈΡ‰Π΅Π½ if(Rr(b)==0) PC = PC + 2 or 3 None 1/2/3
SBRS Rr,b ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ссли Π±ΠΈΡ‚ Π² рСгистрС установлСн if(Rr(b)==1) PC = PC + 2 or 3 None 1/2/3
SBIC P,b ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ссли Π±ΠΈΡ‚ Π² ΠΏΠΎΡ€Ρ‚Ρƒ ΠΎΡ‡ΠΈΡ‰Π΅Π½ if(I/O(P,b)==0) PC = PC + 2 or 3 None 1/2/3
SBIS P,b ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ссли Π±ΠΈΡ‚ Π² ΠΏΠΎΡ€Ρ‚Ρƒ установлСн if(I/O(P,b)==1) PC = PC + 2 or 3 None 1/2/3
BRBC s,k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ Π² SREG ΠΎΡ‡ΠΈΡ‰Π΅Π½ if(SREG(s)==0) PC = PC + k + 1 None 1/2
BRBS s,k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ Π² SREG установлСн if(SREG(s)==1) PC = PC + k + 1 None 1/2
BREQ k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ€Π°Π²Π½ΠΎ if(Z==1) PC = PC + k + 1 None 1/2
BRNE k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Π½Π΅ Ρ€Π°Π²Π½ΠΎ if(Z==0) PC = PC + k + 1 None 1/2
BRCS k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли пСрСнос установлСн if(C==1) PC = PC + k + 1 None 1/2
BRCC k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли пСрСнос ΠΎΡ‡ΠΈΡ‰Π΅Π½ if(C==0) PC = PC + k + 1 None 1/2
BRSH k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ€Π°Π²Π½ΠΎ ΠΈΠ»ΠΈ большС if(C==0) PC = PC + k + 1 None 1/2
BRLO k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли мСньшС if(C==1) PC = PC + k + 1 None 1/2
BRMI k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли минус if(N==1) PC = PC + k + 1 None 1/2
BRPL k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли плюс if(N==0) PC = PC + k + 1 None 1/2
BRGE k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ (со Π·Π½Π°ΠΊΠΎΠΌ) if(S==0) PC = PC + k + 1 None 1/2
BRLT k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли мСньшС (со Π·Π½Π°ΠΊΠΎΠΌ) if(S==1) PC = PC + k + 1 None 1/2
BRHS k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ пСрСноса установлСн if(H==1) PC = PC + k + 1 None 1/2
BRHC k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ пСрСноса ΠΎΡ‡ΠΈΡ‰Π΅Π½ if(H==0) PC = PC + k + 1 None 1/2
BRTS k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ T установлСн if(T==1) PC = PC + k + 1 None 1/2
BRTC k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ T ΠΎΡ‡ΠΈΡ‰Π΅Π½ if(T==0) PC = PC + k + 1 None 1/2
BRVS k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ пСрСполнСния установлСн if(V==1) PC = PC + k + 1 None 1/2
BRVC k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли Ρ„Π»Π°Π³ пСрСполнСния ΠΎΡ‡ΠΈΡ‰Π΅Π½ if(V==0) PC = PC + k + 1 None 1/2
BRIE k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли прСрывания Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ if(I==1) PC = PC + k + 1 None 1/2
BRID k ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Ссли прСрывания Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ if(I==0) PC = PC + k + 1 None 1/2

* Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ количСство Ρ†ΠΈΠΊΠ»ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡ€ΠΈ условии доступа ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ памяти Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с внСшним ΠžΠ—Π£. Для инструкций CALL, ICALL, EICALL, RCALL, RET ΠΈ RETI, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° плюс ΠΏΠΎ Π΄Π²Π° Ρ†ΠΈΠΊΠ»Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ оТидания Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… с PC мСньшим 16 Π±ΠΈΡ‚ (128KB памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ). Для устройств с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΡΠ²Ρ‹ΡˆΠ΅ 128KB , Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡΡ‚ΡŒ Ρ†ΠΈΠΊΠ»ΠΎΠ² плюс ΠΏΠΎ Ρ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

МнСмоника ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ОписаниС ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π€Π»Π°Π³ΠΈ Π¦ΠΈΠΊΠ»Ρ‹
MOV Rd,Rr Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСгистр Rd = Rr None 1
MOVW Rd,Rr Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ рСгистров Rd+1:Rd = Rr+1:Rr, r,d even None 1
LDI Rd,K8 Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ константу Rd = K None 1
LDS Rd,k ΠŸΡ€ΡΠΌΠ°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Rd = (k) None 2*
LD Rd,X КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Rd = (X) None 2*
LD Rd,X+ КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Rd = (X), X=X+1 None 2*
LD Rd,-X КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с ΠΏΡ€Π΅-Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ X=X-1, Rd = (X) None 2*
LD Rd,Y КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Rd = (Y) None 2*
LD Rd,Y+ КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Rd = (Y), Y=Y+1 None 2*
LD Rd,-Y КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с ΠΏΡ€Π΅-Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Y=Y-1, Rd = (Y) None 2*
LDD Rd,Y+q КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Rd = (Y+q) None 2*
LD Rd,Z КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Rd = (Z) None 2*
LD Rd,Z+ КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Rd = (Z), Z=Z+1 None 2*
LD Rd,-Z КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с ΠΏΡ€Π΅-Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Z=Z-1, Rd = (Z) None 2*
LDD Rd,Z+q КосвСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° с Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Rd = (Z+q) None 2*
STS k,Rr ΠŸΡ€ΡΠΌΠΎΠ΅ сохранСниС (k) = Rr None 2*
ST X,Rr КосвСнноС сохранСниС (X) = Rr None 2*
ST X+,Rr КосвСнноС сохранСниС с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ (X) = Rr, X=X+1 None 2*
ST -X,Rr КосвСнноС сохранСниС с ΠΏΡ€Π΅-Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ X=X-1, (X)=Rr None 2*
ST Y,Rr КосвСнноС сохранСниС (Y) = Rr None 2*
ST Y+,Rr КосвСнноС сохранСниС с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ (Y) = Rr, Y=Y+1 None 2
ST -Y,Rr КосвСнноС сохранСниС с ΠΏΡ€Π΅-Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Y=Y-1, (Y) = Rr None 2
ST Y+q,Rr КосвСнноС сохранСниС с Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ (Y+q) = Rr None 2
ST Z,Rr КосвСнноС сохранСниС (Z) = Rr None 2
ST Z+,Rr КосвСнноС сохранСниС с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ (Z) = Rr, Z=Z+1 None 2
ST -Z,Rr КосвСнноС сохранСниС с ΠΏΡ€Π΅-Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Z=Z-1, (Z) = Rr None 2
ST Z+q,Rr КосвСнноС сохранСниС с Π·Π°ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ (Z+q) = Rr None 2
LPM НСт Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти R0 = (Z) None 3
LPM Rd,Z Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти Rd = (Z) None 3
LPM Rd,Z+ Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Rd = (Z), Z=Z+1 None 3
ELPM НСт Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти R0 = (RAMPZ:Z) None 3
ELPM Rd,Z Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти Rd = (RAMPZ:Z) None 3
ELPM Rd,Z+ Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти с пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Rd = (RAMPZ:Z), Z = Z+1 None 3
SPM НСт Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти (Z) = R1:R0 None
ESPM НСт Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ сохранСниС Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти (RAMPZ:Z) = R1:R0 None
IN Rd,P Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Π° Rd = P None 1
OUT P,Rr Π—Π°ΠΏΠΈΡΡŒ Π² ΠΏΠΎΡ€Ρ‚ P = Rr None 1
PUSH Rr ЗанСсСниС рСгистра Π² стСк STACK = Rr None 2
POP Rd Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ рСгистра ΠΈΠ· стСка Rd = STACK None 2

* Для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ количСство Ρ†ΠΈΠΊΠ»ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΏΡ€ΠΈ условии доступа ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ памяти Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с внСшним ΠžΠ—Π£. Для инструкций LD, ST, LDD, STD, LDS, STS, PUSH ΠΈ POP, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ» плюс ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ†ΠΈΠΊΠ»Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ оТидания.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±ΠΈΡ‚Π°ΠΌΠΈ

МнСмоника ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ОписаниС ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π€Π»Π°Π³ΠΈ Π¦ΠΈΠΊΠ»Ρ‹
LSL Rd ЛогичСский сдвиг Π²Π»Π΅Π²ΠΎ Rd(n+1)=Rd(n), Rd(0)=0, C=Rd(7) Z,C,N,V,H,S 1
LSR Rd ЛогичСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ Rd(n)=Rd(n+1), Rd(7)=0, C=Rd(0) Z,C,N,V,S 1
ROL Rd ЦикличСский сдвиг Π²Π»Π΅Π²ΠΎ Ρ‡Π΅Ρ€Π΅Π· C Rd(0)=C, Rd(n+1)=Rd(n), C=Rd(7) Z,C,N,V,H,S 1
ROR Rd ЦикличСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ Ρ‡Π΅Ρ€Π΅Π· C Rd(7)=C, Rd(n)=Rd(n+1), C=Rd(0) Z,C,N,V,S 1
ASR Rd АрифмСтичСский сдвиг Π²ΠΏΡ€Π°Π²ΠΎ Rd(n)=Rd(n+1), n=0,…,6 Z,C,N,V,S 1
SWAP Rd ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Ρ‚Π΅Ρ‚Ρ€Π°Π΄ Rd(3..0) = Rd(7..4), Rd(7..4) = Rd(3..0) None 1
BSET═ s Установка Ρ„Π»Π°Π³Π° SREG(s) = 1 SREG(s) 1
BCLR s ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Ρ„Π»Π°Π³Π° SREG(s) = 0 SREG(s) 1
SBI P,b Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ Π² ΠΏΠΎΡ€Ρ‚Ρƒ I/O(P,b) = 1 None 2
CBI P,b ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ Π² ΠΏΠΎΡ€Ρ‚Ρƒ I/O(P,b) = 0 None 2
BST Rr,b Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ ΠΈΠ· рСгистра Π² T T = Rr(b) T 1
BLD Rd,b Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ ΠΈΠ· T Π² рСгистр Rd(b) = T None 1
SEC НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ пСрСноса C =1 C 1
CLC НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ пСрСноса C = 0 C 1
SEN НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа N = 1 N 1
CLN НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа N = 0 N 1
SEZ НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ нуля Z = 1 Z 1
CLZ НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ нуля Z = 0 Z 1
SEI НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ I = 1 I 1
CLI НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ I = 0 I 1
SES НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ числа со Π·Π½Π°ΠΊΠΎΠΌ S = 1 S 1
CLN НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ числа со Π·Π½Π°ΠΊΠΎΠΌ S = 0 S 1
SEV НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ пСрСполнСния V = 1 V 1
CLV НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ пСрСполнСния V = 0 V 1
SET НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ T T = 1 T 1
CLT НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ T T = 0 T 1
SEH НСт Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ пСрСноса H = 1 H 1
CLH НСт ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ пСрСноса H = 0 H 1
NOP НСт НСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ НСт None 1
SLEEP НСт Π‘ΠΏΠ°Ρ‚ΡŒ (ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ энСргопотрСблСниС) Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ описаниС инструкции None 1
WDR НСт Бброс стороТСвого Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ описаниС инструкции None 1

═
АссСмблСр Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ рСгистр символов.

ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… Π²ΠΈΠ΄ΠΎΠ²:

Rd: Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ (ΠΈ исходный) рСгистр Π² рСгистровом Ρ„Π°ΠΉΠ»Π΅
Rr: Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ рСгистр Π² рСгистровом Ρ„Π°ΠΉΠ»Π΅
b: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° (3 Π±ΠΈΡ‚Π°), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
s: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° (3 Π±ΠΈΡ‚Π°), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
P: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° (5-6 Π±ΠΈΡ‚), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
K6; ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° (6 Π±ΠΈΡ‚), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
K8: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° (8 Π±ΠΈΡ‚), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
k: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° (Ρ€Π°Π·ΠΌΠ΅Ρ€ зависит ΠΎΡ‚ инструкции), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
q: ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° (6 Π±ΠΈΡ‚), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
Rdl:═ R24, R26, R28, R30. Для инструкций ADIW ΠΈ SBIW
X,Y,Z: РСгистры косвСнной адрСсации (X=R27:R26, Y=R29:R28, Z=R31:R30)

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ассСмблСра

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ряд Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π½Π΅ Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ нСпосрСдствСнно Π² ΠΊΠΎΠ΄. ВмСсто этого ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для указания полоТСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти, опрСдСлСния макросов, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ памяти ΠΈ Ρ‚.Π΄. Бписок Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
═

ВсС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

BYTE - Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹ Π² ΠžΠ—Π£

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° BYTE Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π°ΠΉΡ‚Ρ‹ Π² ΠžΠ—Π£. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° BYTE Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½Π° ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ количСство выдСляСмых Π±Π°ΠΉΡ‚. Π­Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ…(ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ CSEG ΠΈ DSEG). Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Бинтаксис:
ΠœΠ•Π’ΠšΠ: .BYTE Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.DSEG
var1:═══ .BYTE 1═══════════ ; Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ 1 Π±Π°ΠΉΡ‚ для var1
table:══ .BYTE tab_size════ ; Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ tab_size Π±Π°ΠΉΡ‚

.CSEG
════════ ldi r30,low(var1)═ ; Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ младший Π±Π°ΠΉΡ‚ рСгистра Z
════════ ldi r31,high(var1) ; Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚ рСгистра Z
════════ ld r1,Z═══════════ ; Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ VAR1 Π² рСгистр 1

CSEG - ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ сСгмСнт

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° CSEG опрСдСляСт Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ сСгмСнта. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… сСгмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ сСгмСнт ΠΏΡ€ΠΈ компиляции. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ сСгмСнт являСтся сСгмСнтом ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ сСгмСнты ΠΈΠΌΠ΅ΡŽΡ‚ свои собствСнныС счётчики полоТСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π½Π΅ ΠΏΠΎΠ±Π°ΠΉΡ‚Π½ΠΎ, Π° ΠΏΠΎ словно. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ORG ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для размСщСния ΠΊΠΎΠ΄Π° ΠΈ констант Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ мСстС сСгмСнта. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° CSEG Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Бинтаксис:
.CSEG

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.DSEG══════════════════════ ; Начало сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…
vartab: .BYTE 4════════════ ; Π Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ 4 Π±Π°ΠΉΡ‚Π° Π² ΠžΠ—Π£

.CSEG══════════════════════ ; Начало ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ сСгмСнта
const:═ .DW 2══════════════ ; Π Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ константу 0x0002 Π² памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
═══════ mov r1,r0══════════ ; Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствия

DB — ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹ Π²ΠΎ Ρ„Π»ΡΡˆ ΠΈΠ»ΠΈ EEPROM

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DB Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π±Π°ΠΉΡ‚ Π² памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ Π² EEPROM. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DB Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½Π° ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DB Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Данная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сСгмСнтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (CSEG) ΠΈΠ»ΠΈ Π² сСгмСнтС EEPROM (ESEG).

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… запятыми. КаТдоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ числом Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (-128..255), ΠΈΠ»ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ вычислСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² этом ΠΆΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС число усСкаСтся Π΄ΠΎ Π±Π°ΠΉΡ‚Π°, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π‘Π•Π— Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Если Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ сСгмСнт, Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² слова (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — младший Π±Π°ΠΉΡ‚), ΠΈ Ссли число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅Ρ‡Ρ‘Ρ‚Π½ΠΎ, Ρ‚ΠΎ послСднСС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ усСчСно Π΄ΠΎ Π±Π°ΠΉΡ‚Π° ΠΈ записано ΠΊΠ°ΠΊ слово со ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ, Π΄Π°ΠΆΠ΅ Ссли Π΄Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DB.

Бинтаксис:
ΠœΠ•Π’ΠšΠ:═ .DB список_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.CSEG
consts: .DB 0, 255, 0b01010101, -128, 0xaa

.ESEG
const2: .DB 1,2,3

DEF - ΠΠ°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ рСгистру символичСскоС имя

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DEF позволяСт ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° рСгистр Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ символичСскоС имя. НазначСнноС имя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎ всСй Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡƒ рСгистру. РСгистр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. БимволичСскоС имя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Бинтаксис:
.DEF БимволичСскоС_имя = РСгистр

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.DEF temp=R16
.DEF ior=R0

.CSEG
═ldi temp,0xf0═ ; Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ 0xf0 Π² рСгистр temp (R16)
═in ior,0x3f═ ; ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ SREG Π² рСгистр ior (R0)
═eor temp,ior═ ; РСгистры temp ΠΈ ior ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΈΠ»ΠΈ

DEVICE — ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ устройство для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ компилируСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DEVICE позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ для ΠΊΠ°ΠΊΠΎΠ³ΠΎ устройства компилируСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. ΠŸΡ€ΠΈ использовании Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ компилятор выдаст ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π° инструкция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ сСгмСнт, Π»ΠΈΠ±ΠΎ сСгмСнт EEPROM прСвысят Ρ€Π°Π·ΠΌΠ΅Ρ€ допускаСмый устройством. Если ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎ всС инструкции ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ допустимыми, ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ограничСния Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ сСгмСнтов.

Бинтаксис:
.DEVICE AT90S1200 |AT90S2313 | AT90S2323 | AT90S2333 | AT90S2343 | AT90S4414 | AT90S4433 | AT90S4434 | AT90S8515 | AT90S8534 | AT90S8535 | ATtiny11 | ATtiny12 | ATtiny22 | ATmega603 | ATmega103

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.DEVICE AT90S1200═ ; Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ AT90S1200

.CSEG
═══════ push r30══ ; Π­Ρ‚Π° инструкция Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
══════════════════ ; ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ AT90S1200 Π΅Ρ‘ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚

DSEG — Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DSEG опрСдСляСт Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСгмСнтов Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ сСгмСнт ΠΏΡ€ΠΈ компиляции. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² BYTE ΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅ΡŽΡ‚ свои собствСнныС ΠΏΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Π΅ счётчики полоТСния. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ORG ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для размСщСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ мСстС ΠžΠ—Π£. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Бинтаксис:
.DSEG═

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.DSEG═══════════════════════ ; Начало сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…
var1:═ .BYTE 1══════════════ ; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 1 Π±Π°ΠΉΡ‚ для var1
table:═ .BYTE tab_size══════ ; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ tab_size Π±Π°ΠΉΡ‚.

.CSEG
═══════ ldi r30,low(var1)═══ ; Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ младший Π±Π°ΠΉΡ‚ рСгистра Z
═══════ ldi r31,high(var1)══ ; Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚ рСгистра Z
═══════ ld r1,Z═════════════ ; Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ var1 Π² рСгистр r1

DW — ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ слова Π²ΠΎ Ρ„Π»ΡΡˆ ΠΈΠ»ΠΈ EEPROM

Β 

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DW Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство слов Π² памяти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ Π² EEPROM. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DW Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€Π΅Π½Π° ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DW Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Данная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сСгмСнтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (CSEG) ΠΈΠ»ΠΈ Π² сСгмСнтС EEPROM (ESEG).

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ — это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… запятыми. КаТдоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ числом Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (-32768..65535), ΠΈΠ»ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ вычислСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² этом ΠΆΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС число усСкаСтся Π΄ΠΎ слова, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π‘Π•Π— Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ.

Бинтаксис:
ΠœΠ•Π’ΠšΠ: .DW expressionlist

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.CSEG
varlist:═ .DW 0, 0xffff, 0b1001110001010101, -32768, 65535

.ESEG
eevarlst: .DW 0,0xffff,10

ENDMACRO — ΠšΠΎΠ½Π΅Ρ† макроса

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° опрСдСляСт ΠΊΠΎΠ½Π΅Ρ† макроопрСдСлСния, ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ макросов смотритС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ MACRO.

Бинтаксис:
.ENDMACRO═

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.MACRO SUBI16══════════════ ; Начало опрСдСлСния макроса
═══════ subi r16,low(@0)═══ ; Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ младший Π±Π°ΠΉΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°
═══════ sbci r17,high(@0)══ ; Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°
.ENDMACRO

EQU - Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ постоянноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° EQU присваиваСт ΠΌΠ΅Ρ‚ΠΊΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚Π° ΠΌΠ΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² выраТСниях. ΠœΠ΅Ρ‚ΠΊΠ° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΈ Π΅Ρ‘ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ.

Бинтаксис:
.EQU ΠΌΠ΅Ρ‚ΠΊΠ° = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.EQU io_offset = 0x23
.EQU porta════ = io_offset + 2

.CSEG════════════════ ; Начало сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…
═══════ clr r2═══════ ; ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ рСгистр r2
═══════ out porta,r2═ ; Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠΎΡ€Ρ‚ A

ESEG — Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ EEPROM

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ESEG опрСдСляСт Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта EEPROM. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСгмСнтов EEPROM, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½ сСгмСнт ΠΏΡ€ΠΈ компиляции. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ EEPROM ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² DB, DW ΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ. Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹ EEPROM ΠΈΠΌΠ΅ΡŽΡ‚ свои собствСнныС ΠΏΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Π΅ счётчики полоТСния. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ORG ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для размСщСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌ мСстС EEPROM. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Бинтаксис:
.ESEG═══

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.DSEG═══════════════════ ; Начало сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…
var1:══ .BYTE 1═════════ ; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 1 Π±Π°ΠΉΡ‚ для var1
table:═ .BYTE tab_size══ ; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ tab_size Π±Π°ΠΉΡ‚.

.ESEG
eevar1: .DW 0xffff═══════ ; ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 1 слово Π² EEPROM

EXIT — Π’Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

ВстрСтив Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ EXIT компилятор ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Если Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° использована Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ (см. Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ INCLUDE), Ρ‚ΠΎ компиляция продолТаСтся со строки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ послС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ INCLUDE. Если ΠΆΠ΅ Ρ„Π°ΠΉΠ» Π½Π΅ являСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ компиляция прСкращаСтся.

Бинтаксис:
.EXIT

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.EXIT═ ; Π’Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

INCLUDE - Π’Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ»

ВстрСтив Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ INCLUDE компилятор ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Π½Π΅ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΠΊΠ° Ρ„Π°ΠΉΠ» Π½Π΅ закончится ΠΈΠ»ΠΈ Π½Π΅ встрСтится Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° EXIT, послС этого ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° со строки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ INCLUDE. Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ INCLUDE.

Бинтаксис:
.INCLUDE «ΠΈΠΌΡ_Ρ„Π°ΠΉΠ»Π°»

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
; Ρ„Π°ΠΉΠ» iodefs.asm:
.EQU sreg══ = 0x3f════ ; РСгистр статуса
.EQU sphigh = 0x3e════ ; Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚ указатСля стСка
.EQU splow═ = 0x3d════ ; Младший Π±Π°ΠΉΡ‚ указатСля стСка

; Ρ„Π°ΠΉΠ» incdemo.asm
.INCLUDE iodefs.asm═══ ; Π’Π»ΠΎΠΆΠΈΡ‚ΡŒ опрСдСлСния ΠΏΠΎΡ€Ρ‚ΠΎΠ²
═══════ in r0,sreg════ ; ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ рСгистр статуса

LIST - Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ листинга

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° LIST ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ создания листинга. Листинг прСдставляСт ΠΈΠ· сСбя ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ассСмблСрного ΠΊΠΎΠ΄Π°, адрСсов ΠΈ ΠΊΠΎΠ΄ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ гСнСрация листинга Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ данная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ совмСстно с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ NOLIST для получСния листингов ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй исходных Ρ„Π°ΠΉΠ»ΠΎΠ².

Бинтаксис:
.LIST

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.NOLIST═══════════════ ; ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ листинга
.INCLUDE «macro.inc»β•β• ; Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚
.INCLUDE «const.def»β•β• ; ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² листингС
.LIST═════════════════ ; Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ листинга

LISTMAC - Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ макросов Π² листингС

ПослС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ LISTMAC компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² листингС содСрТимоС макроса. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² листингС показываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·ΠΎΠ² макроса ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Бинтаксис:
.LISTMAC

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.MACRO MACX════════ ; ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макроса
═══════ add═ r0,@0═ ; Π’Π΅Π»ΠΎ макроса
═══════ eor═ r1,@1═
.ENDMACRO══════════ ; ΠšΠΎΠ½Π΅Ρ† макроопрСдСлСния

.LISTMAC═══════════ ; Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ макросов
═══════ MACX r2,r1═ ; Π’Ρ‹Π·ΠΎΠ² макроса (Π² листингС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ‚Π΅Π»ΠΎ макроса)

MACRO — Начало макроса

Π‘ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ MACRO начинаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макроса. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ пСрСдаётся имя макроса. ΠŸΡ€ΠΈ встрСчС ΠΈΠΌΠ΅Π½ΠΈ макроса ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, компилятор замСняСт это имя Π½Π° Ρ‚Π΅Π»ΠΎ макроса. ΠœΠ°ΠΊΡ€ΠΎΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎ 10 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² Π΅Π³ΠΎ Ρ‚Π΅Π»Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· @0-@9. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· запятыС. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макроса заканчиваСтся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ENDMACRO.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² листинг Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·ΠΎΠ² макроса, для разворачивания макроса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ LISTMAC. ΠœΠ°ΠΊΡ€ΠΎΡ Π² листингС показываСтся Π·Π½Π°ΠΊΠΎΠΌ +.
═
Бинтаксис:
.MACRO макроимя

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.MACRO SUBI16══════════════════ ; Начало макроопрСдСлСния
═══════ subi @1,low(@0)════════ ; Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ младший Π±Π°ΠΉΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° 0 ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° 1
═══════ sbci @2,high(@0)═══════ ; Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° 0 ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° 2
.ENDMACRO══════════════════════ ; ΠšΠΎΠ½Π΅Ρ† макроопрСдСлСния

.CSEG══════════════════════════ ; Начало ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ сСгмСнта
═══════ SUBI16 0x1234,r16,r17══ ; Π’Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ 0x1234 ΠΈΠ· r17:r16

NOLIST - Π’Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ листинга

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° NOLIST ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ компилятору Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ прСкращСния Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ листинга. Листинг прСдставляСт ΠΈΠ· сСбя ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ассСмблСрного ΠΊΠΎΠ΄Π°, адрСсов ΠΈ ΠΊΠΎΠ΄ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ гСнСрация листинга Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ данная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована совмСстно с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ LIST для получСния листингов ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй исходных Ρ„Π°ΠΉΠ»ΠΎΠ²

Бинтаксис:
.NOLIST

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.NOLIST═══════════════ ; ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ листинга
.INCLUDE «macro.inc»β•β• ; Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚
.INCLUDE «const.def»β•β• ; ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² листингС
.LIST═════════════════ ; Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ листинга

ORG - Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² сСгмСнтС

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ORG устанавливаСт счётчик полоТСния Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅, которая пСрСдаётся ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Для сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ½Π° устанавливаСт счётчик полоТСния Π² SRAM (ΠžΠ—Π£), для сСгмСнта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ счётчик, Π° для сСгмСнта EEPROM это ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² EEPROM. Если Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠ° (Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ строкС) Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΊΠ° размСщаСтся ΠΏΠΎ адрСсу ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹. ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ счётчик ΠΈ счётчик EEPROM Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, Π° счётчик ΠžΠ—Π£ Ρ€Π°Π²Π΅Π½ 32 (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ адрСса 0-31 заняты рСгистрами). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ для ΠžΠ—Π£ ΠΈ EEPROM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Π΅ счётчики Π° для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ сСгмСнта - пословный.

Бинтаксис:
.ORG Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.DSEG═══════════════ ; Начало сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…

.ORG 0x37═══════════ ; Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ адрСс SRAM Ρ€Π°Π²Π½Ρ‹ΠΌ 0x37
variable: .BYTE 1═══ ; Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΏΠΎ адрСсу 0x37H

.CSEG
.ORG 0x10═══════════ ; Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ счётчик Ρ€Π°Π²Π½Ρ‹ΠΌ 0x10
═════════ mov r0,r1═ ; Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° ΠΏΠΎ адрСсу 0x10

SET - Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ символичСский эквивалСнт выраТСния

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° SET присваиваСт ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ имя ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано Π² выраТСниях. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ EQU Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ SET.

Бинтаксис:
.SET имя = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
.SET io_offset = 0x23
.SET porta════ = io_offset + 2

.CSEG════════════════ ; Начало ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ сСгмСнта
═══════ clr r2═══════ ; ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ рСгистр 2
═══════ out porta,r2═ ; Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠΎΡ€Ρ‚ A

ВыраТСния

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ выраТСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², Π·Π½Π°ΠΊΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ВсС выраТСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ.

ΠžΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹

ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹:

  • ΠœΠ΅Ρ‚ΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Π΄Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ своСго полоТСния).
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ SET
  • ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ EQU
  • Числа Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅:
    • ДСсятичном (принят ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ): 10, 255
    • ШСстнадцатСричном (Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° записи): 0x0a, $0a, 0xff, $ff
    • Π”Π²ΠΎΠΈΡ‡Π½ΠΎΠΌ: 0b00001010, 0b11111111
    • Π’ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ (Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с нуля): 010, 077
  • PC — Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ счётчика (Programm Counter)

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ряд ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ пСрСчислСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ (Ρ‡Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ). ВыраТСния ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, Ρ‚Π°ΠΊΠΈΠ΅ выраТСния Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ выраТСниями Π·Π° скобками.

ЛогичСскоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅

Π‘ΠΈΠΌΠ²ΠΎΠ»: !
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 0, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 14
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r16, !0xf0═ ; Π’ r16 Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ 0x00

ΠŸΠΎΠ±ΠΈΡ‚Π½ΠΎΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅

Π‘ΠΈΠΌΠ²ΠΎΠ»: ~
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС Π±ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 14
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r16, ~0xf0═ ; Π’ r16 Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ 0x0f

ΠœΠΈΠ½ΡƒΡ

Π‘ΠΈΠΌΠ²ΠΎΠ»: —
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ арифмСтичСскоС ΠΎΡ‚Ρ€ΠΈΡ†Π°Π½ΠΈΠ΅ выраТСния
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 14
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r16,-2═ ; Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ -2(0xfe) Π² r16

Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π‘ΠΈΠΌΠ²ΠΎΠ»: *
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ умноТСния Π΄Π²ΡƒΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 13
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r30, label*2

Π”Π΅Π»Π΅Π½ΠΈΠ΅

Π‘ΠΈΠΌΠ²ΠΎΠ»: /
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° дСлСния Π»Π΅Π²ΠΎΠ³ΠΎ выраТСния Π½Π° ΠΏΡ€Π°Π²ΠΎΠ΅
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 13
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r30, label/2

Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π‘ΠΈΠΌΠ²ΠΎΠ»: +
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму Π΄Π²ΡƒΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 12
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r30, c1+c2

Π’Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅

Π‘ΠΈΠΌΠ²ΠΎΠ»: —
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычитания ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ выраТСния ΠΈΠ· Π»Π΅Π²ΠΎΠ³ΠΎ
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 12
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r17, c1-c2

Π‘Π΄Π²ΠΈΠ³ Π²Π»Π΅Π²ΠΎ

Π‘ΠΈΠΌΠ²ΠΎΠ»: <<
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сдвинутоС Π²Π»Π΅Π²ΠΎ Π½Π° число Π±ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ справа
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 11
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r17, 1<<bitmask═ ; Π’ r17 Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ 1 ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡƒΡŽ Π²Π»Π΅Π²ΠΎ bitmask Ρ€Π°Π·

Π‘Π΄Π²ΠΈΠ³ Π²ΠΏΡ€Π°Π²ΠΎ

Π‘ΠΈΠΌΠ²ΠΎΠ»: >>
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сдвинутоС Π²ΠΏΡ€Π°Π²ΠΎ Π½Π° число Π±ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ справа
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 11
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r17, c1>>c2═ ; Π’ r17 Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ c1 сдвинутоС Π²ΠΏΡ€Π°Π²ΠΎ c2 Ρ€Π°Π·

МСньшС Ρ‡Π΅ΠΌ

Π‘ΠΈΠΌΠ²ΠΎΠ»: <
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ мСньшС Ρ‡Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠ΅ (учитываСтся Π·Π½Π°ΠΊ), ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 10
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ori r18, bitmask*(c1<c2)+1

МСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ

Π‘ΠΈΠΌΠ²ΠΎΠ»: <=
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Ρ‡Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠ΅ (учитываСтся Π·Π½Π°ΠΊ), ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 10
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ori r18, bitmask*(c1<=c2)+1

Π‘ΠΎΠ»ΡŒΡˆΠ΅ Ρ‡Π΅ΠΌ

Π‘ΠΈΠΌΠ²ΠΎΠ»: >
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ большС Ρ‡Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠ΅ (учитываСтся Π·Π½Π°ΠΊ), ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 10
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ori r18, bitmask*(c1>c2)+1

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ

Π‘ΠΈΠΌΠ²ΠΎΠ»: >=
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Ρ‡Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠ΅ (учитываСтся Π·Π½Π°ΠΊ), ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 10
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ori r18, bitmask*(c1>=c2)+1

Π Π°Π²Π½ΠΎ

Π‘ΠΈΠΌΠ²ΠΎΠ»: ==
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ (учитываСтся Π·Π½Π°ΠΊ), ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 9
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: andi r19, bitmask*(c1==c2)+1

НС Ρ€Π°Π²Π½ΠΎ

Π‘ΠΈΠΌΠ²ΠΎΠ»: !=
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли Π»Π΅Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π²Π½ΠΎ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ (учитываСтся Π·Π½Π°ΠΊ), ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 9
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: .c2)

ΠŸΠΎΠ±ΠΈΡ‚Π½ΠΎΠ΅ Π˜Π›Π˜

Π‘ΠΈΠΌΠ²ΠΎΠ»: |
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π˜Π›Π˜ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 6
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r18, Low(c1|c2)

ЛогичСскоС И

Π‘ΠΈΠΌΠ²ΠΎΠ»: &&
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли ΠΎΠ±Π° выраТСния Π½Π΅ Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ, ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 5
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r18, Low(c1&&c2)

ЛогичСскоС Π˜Π›Π˜

Π‘ΠΈΠΌΠ²ΠΎΠ»: ||
ОписаниС: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, ΠΈ 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС
ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚: 4
ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ldi r18, Low(c1||c2)

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • LOW(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ младший Π±Π°ΠΉΡ‚ выраТСния
  • HIGH(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π°ΠΉΡ‚ выраТСния
  • BYTE2(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Ρ‚ΠΎ ΠΆΠ΅ Ρ‡Ρ‚ΠΎ ΠΈ функция HIGH
  • BYTE3(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π±Π°ΠΉΡ‚ выраТСния
  • BYTE4(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ Π±Π°ΠΉΡ‚ выраТСния
  • LWRD(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΈΡ‚Ρ‹ 0-15 выраТСния
  • HWRD(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΈΡ‚Ρ‹ 16-31 выраТСния
  • PAGE(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΈΡ‚Ρ‹ 16-21 выраТСния
  • EXP2(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 2 Π² стСпСни (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)
  • LOG2(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ†Π΅Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ log2(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)

ИспользованиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» описываСт использованиС компилятора ΠΈ встроСнного Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’ WAVRASM ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚Π°ΠΊ ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ памяти, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ±ΡŠΡ‘ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ 28 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ (Π² связи с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ MS-Windows). ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ встроСнным Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» открываСтся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅.

БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…

ПослС компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ появляСтся ΠΎΠΊΠ½ΠΎ сообщСний. ВсС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ компилятором ошибки Π±ΡƒΠ΄ΡƒΡ‚ пСрСчислСны Π² этом ΠΎΠΊΠ½Π΅. ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ строки с сообщСниСм ΠΎ ошибкС, строка исходного Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π° ошибка, становится красной. Если ΠΆΠ΅ ошибка находится Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Ρ‚ΠΎ этого подсвСчивания Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚.

Если ΠΏΠΎ строкС Π² ΠΎΠΊΠ½Π΅ сообщСний ΠΊΠ»Π°Ρ†Π½ΡƒΡ‚ΡŒ Π΄Π²Π°ΠΆΠ΄Ρ‹, Ρ‚ΠΎ ΠΎΠΊΠ½ΠΎ Ρ„Π°ΠΉΠ»Π° с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ошибкой становится Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, ΠΈ курсор помСщаСтся Π² Π½Π°Ρ‡Π°Π»Π΅ строки содСрТащСй ΠΎΡˆΠΈΠ±ΠΊΡƒ. Если ΠΆΠ΅ Ρ„Π°ΠΉΠ» с ошибкой Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ это Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ») Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚.

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ внСсли измСнСния Π² исходныС тСксты (Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ строки), Ρ‚ΠΎ информация ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π°Ρ… строк Π² ΠΎΠΊΠ½Π΅ сообщСний Π½Π΅ являСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ.

ΠžΠΏΡ†ΠΈΠΈ

НСкоторыС установки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡƒΠ½ΠΊΡ‚ мСню «Options».

Π’ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°, ΠΎΠ·Π°Π³Π»Π°Π²Π»Π΅Π½Π½ΠΎΠΌ «List-file extension», вводится Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ для Ρ„Π°ΠΉΠ»Π° листинга, Π° Π² ΠΏΠΎΠ»Π΅ «Output-file extension» находится Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для Ρ„Π°ΠΉΠ»ΠΎΠ² с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ΅ «Output file format» ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ интСловский). Однако это Π½Π΅ влияСт Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ AVR Studio), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ OBJ. Если Π² исходном Ρ„Π°ΠΉΠ»Π΅ присутствуСт сСгмСнт EEPROM Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ создан Ρ„Π°ΠΉΠ» с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ EEP. Установки Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° постоянно, ΠΈ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡ… Π½Π΅Ρ‚ нСобходимости ΠΏΠ΅Ρ€Π΅ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ.

ΠžΠΏΡ†ΠΈΡ «Wrap relative jumps» Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ «Π·Π°Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ» адрСса. Π­Ρ‚Π° опция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡ΠΈΠΏΠ°Ρ… с ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ памяти 4К слов (8К Π±Π°ΠΉΡ‚), ΠΏΡ€ΠΈ этом становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ (rjmp) ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (rcall) ΠΏΠΎ всСй памяти.

ΠžΠΏΡ†ΠΈΡ «Save before assemble» ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ автоматичСского сохранСния Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ) ΠΏΠ΅Ρ€Π΅Π΄ компиляциСй.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π»ΠΈΡΡŒ всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΎΠΊΠ½Π°, Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π³Π°Π»ΠΎΡ‡ΠΊΡƒ Π² ΠΏΠΎΠ»Π΅ «Close all windows before exit».


Atmel, AVR ΡΠ²Π»ΡΡŽΡ‚ΡΡ зарСгистрированными Ρ‚ΠΎΠ²Π°Ρ€Π½Ρ‹ΠΌΠΈ Π·Π½Π°ΠΊΠ°ΠΌΠΈ Ρ„ΠΈΡ€ΠΌΡ‹ Atmel Corporation

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» Руслан Π¨ΠΈΠΌΠΊΠ΅Π²ΠΈΡ‡, [email protected]

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ассСмблСра

Новости

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Β Β 

Turbo PascalΒ 

Π˜Π³Ρ€Ρ‹

ДокумСнтация   

Бтранности

FAQ

Бсылки

Π€ΠΎΡ€ΡƒΠΌ

ГостСвая ΠΊΠ½ΠΈΠ³Π°

Рассылка

Благодарности

Об Π°Π²Ρ‚ΠΎΡ€Π΅

Β 

Β 

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ассСмблСра 


             ВстроСнный ассСмблСр  Borland Pascal ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π΄ΠΈΡ€Π΅ΠΊ-
        Ρ‚ΠΈΠ²Ρ‹ ассСмблСра: DB (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚), DW (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ слово) ΠΈ DD
        (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово).  КаТдая ΠΈΠ· Π½ΠΈΡ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, со-
        ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ запятым ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌ,  ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚  Π·Π°
        Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ.

             Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DB Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅-
        Ρ€Π°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-константу со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚
        -128 Π΄ΠΎ 255, ΠΈΠ»ΠΈ строку символов любой Π΄Π»ΠΈΠ½Ρ‹. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-константа
        Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ 1 Π±Π°ΠΉΡ‚ ΠΊΠΎΠ΄Π°,  Π° строки  Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚  ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
        Π±Π°ΠΉΡ‚ со значСниями, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄Ρƒ ASCII ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа.

             Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DW Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ слов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅-
        Ρ€Π°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-константу со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚
        -32768 Π΄ΠΎ 65535,  ΠΈΠ»ΠΈ адрСсноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Для адрСсного выраТСния
        встроСнный ассСмблСр Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π±Π»ΠΈΠΆΠ½Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ
        слово, содСрТащиС смСщСния адрСса.

             Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° DD  Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚  ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ  Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ…  слов.
        ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ  собой  Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-константу  со
        Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ  ΠΎΡ‚  -2147483648  Π΄ΠΎ 4294967295 ΠΈΠ»ΠΈ адрСсноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
        Для адрСсного выраТСния встроСнный ассСмблСр Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ
        дальнСго Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ слово, содСрТащиС смСщСния адрСса, Π·Π° ΠΊΠΎ-
        Ρ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт слово, содСрТащСС ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ адрСса.

             Π”Π°Π½Π½Ρ‹Π΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌ DB, DW ΠΈ DD, всСгда Π·Π°ΠΏΠΈ-
        ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² сСгмСнт ΠΊΠΎΠ΄Π°,  Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΊΠΎΠ΄Ρƒ,  Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ
        ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ встроСнного ассСмблСра. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈ-
        Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π°ΠΌ
        слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ описания Паскаля Ρ‚ΠΈΠΏΠ° var ΠΈΠ»ΠΈ const.

             ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² DB, DW ΠΈ DD:

             asm
               DB      00FH                                   { 1 Π±Π°ΠΉΡ‚ }
               DB      0,99                                  { 2 Π±Π°ΠΉΡ‚Π° }
               DB      'A'                                   { Ord('A) }
               DB      'ΠŸΡ€ΠΈΠΌΠ΅Ρ€',0DH,OAH             { строка, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ
                              ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки }

         B.Pascal 7 & Objects/LR     - 416 -

               DB      12,"Borland Pascal"            { строка Паскаля }
               DW      0FFFFH                                { 1 слово }
               DW      0,9999                                { 2 слова }
               DW      'A'                     { эквивалСнтно DB 'A',0 }
               DW      'BA'                  { эквивалСнтно DB 'A','B' }
               DW      MyVar                          { смСщСниС MyVar }
               DW      MyProc                        { смСщСниС MyProc }
               DD      0FFFFFFFH                     { 1 двойноС слово }
               DD      0,99999999                    { 2 Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слова }
               DD      'A'                 { эквивалСнтно DB 'A',0,0,0 }
               DD      'DBCA'        { эквивалСнтно DS 'A','B','C','D' }
               DD      MyVar                      { ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° MyVar }
               DD      MyProc                    { ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° MyProc }
             end;

             Π’ Π’ΡƒΡ€Π±ΠΎ АссСмблСрС,  ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ указываСтся
        DB, DW ΠΈΠ»ΠΈ DD,  это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ‚ΠΎΠΌ мСстС, Π³Π΄Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°
        Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°,  ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π² Π±Π°ΠΉΡ‚,  слово ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово.
        НапримСр, Π’ΡƒΡ€Π±ΠΎ АссСмблСр допускаСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

             ByteVar        DB          ?
             WordVar        DW          ?
               .
               .
               .
                            mov         al,ByteVar
                            mov         bx,WordVar

             ВстроСнный ассСмблСр Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ описания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½-
        Π½Ρ‹Ρ…. Π’ Borland Pascal СдинствСнным Π²ΠΈΠ΄ΠΎΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°,  ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ
        ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²  ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅  встроСнного  ассСмблСра,  являСтся
        ΠΌΠ΅Ρ‚ΠΊΠ°.  ВсС  ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅  Π΄ΠΎΠ»ΠΆΠ½Ρ‹  ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса
        Паскаля, ΠΈ прСдыдущая конструкция соотвСтствуСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

             var
               ByteVar:    Byte;
               WordWat:    Word;
                 .
                 .
                 .
               asm
                 mov       al,ByteVar
                 mov       bx,WordVar
               end;



ЛСкция 10. ΠœΠ°ΡΡΠΈΠ²Ρ‹. — БистСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

массив — структурированный Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, состоящий ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ числа элСмСнтов ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² возмоТностях ΠΈ особСнностях ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массивов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° ассСмблСрС, Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Как ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ массивв ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅?

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Как ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния Π΅Π³ΠΎ элСмСнтов?

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Как ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ доступк элСмСнтам массива?

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Как ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ массивыс Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ?

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Как ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с массивами?

ОписаниС ΠΈ инициализация массива Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… срСдств описания массивов Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ассСмблСра, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅Ρ‚. ΠŸΡ€ΠΈ нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… способов:

1.Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ элСмСнтов массива Π² ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² описания Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈ пСрСчислСнии элСмСнты Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятыми. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

;массив ΠΈΠ· 5 элСмСнтов.Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта 4 Π±Π°ΠΉΡ‚Π°:

mas dd 1,2,3,4,5

2.Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ повторСния dup. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

;массив ΠΈΠ· 5 Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… элСмСнтов.

;Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта 2 Π±Π°ΠΉΡ‚Π°:

mas dw 5 dup (0)

Π’Π°ΠΊΠΎΠΉ способ опрСдСлСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для рСзСрвирования памяти с Ρ†Π΅Π»ΡŒΡŽ размСщСния ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ элСмСнтов массива.

3.Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹Β labelΠΈrept. ΠŸΠ°Ρ€Π° этих Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ описаниС Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π² памяти ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ описания. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°reptотносится ΠΊ макросрСдствам языка ассСмблСра ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ число Ρ€Π°Π· строк, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ ΠΈ строкой endm. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ массив Π±Π°ΠΉΡ‚ Π² области памяти, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌmas_b. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°labelопрСдСляСт символичСскоС имяmas_b, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ рСзСрвирования ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ памяти. Достоинство Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹labelΠ² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° лишь опрСдСляСт характСристики ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” это ячСйка памяти. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ нСсколько Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²label, записанных ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ сдСлано Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅:

n=0

mas_b label byte

mas_w label word

rept 4

dw 0f1f0h

endm

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π² памяти Π±ΡƒΠ΄Π΅Ρ‚ создана ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… слов f1f0. Π­Ρ‚Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ массив Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ слов Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ΅ имя области ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ β€”mas_bΠΈΠ»ΠΈmas_w.

4.Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  ИспользованиС Ρ†ΠΈΠΊΠ»Π° для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ значСниями области памяти, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ впослСдствии Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ массив.

5.Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ листинга 2, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это дСлаСтся.

Листинг 2 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива Π² Ρ†ΠΈΠΊΠ»Π΅

;prg_12_1.asm

MASM

MODEL small

STACK 256

.data

mes db 0ah,0dh,’Массив- ‘,’$’

mas db 10 dup (?) ;исходный массив

i db 0

.code

main:

mov ax,@data

mov ds,ax

xor ax,ax ;ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ ax

mov cx,10 ;Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Ρ†ΠΈΠΊΠ»Π° Π² cx

mov si,0 ;индСкс Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта Π² cx

go: ;Ρ†ΠΈΠΊΠ» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

mov bh,i ;i Π² bh

mov mas[si],bh ;запись в массив i

inc i ;ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ i

inc si ;ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту массива

loop go ;ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ»

;Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ массива

mov cx,10

mov si,0

mov ah,09h

lea dx,mes

int 21h

show:

mov ah,02h ;функция Π²Ρ‹Π²ΠΎΠ΄Π° значСния ΠΈΠ· al Π½Π° экран

mov dl,mas[si]

add dl,30h ;ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ числа Π² символ

int 21h

inc si

loop show

exit:

mov ax,4c00h ;стандартный Π²Ρ‹Ρ…ΠΎΠ΄

int 21h

end main ;ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ сСбС, Ρ‡Ρ‚ΠΎ всС элСмСнты массива Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π‘Π°ΠΌΠΎ ΠΏΠΎ сСбС Ρ‚Π°ΠΊΠΎΠ΅ располоТСниС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΈ порядкС использования этих элСмСнтов. И Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь программист с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ составлСнного ΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ опрСдСляСт, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… массив. Π’Π°ΠΊ, ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅ ΠΆΠ΅ самыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. ВсС зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π‘Π°ΠΌΠΈ ΠΏΠΎ сСбС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ нСсут Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΡΠ²ΠΎΠ΅ΠΌΒ β€œΡΠΌΡ‹ΡΠ»ΠΎΠ²ΠΎΠΌβ€, или логичСском, Ρ‚ΠΈΠΏΠ΅. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ± этом ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅.

Π­Ρ‚ΠΈ ΠΆΠ΅ сообраТСния ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ на индСксы элСмСнтов массива. АссСмблСр Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Π΅Ρ‚ ΠΎΠ± ΠΈΡ… сущСствовании ΠΈ Π΅ΠΌΡƒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ ΠΈΡ… числСнныС смысловыС значСния.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт массива, ΠΊ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΒ ΠΈΠ½Π΄Π΅ΠΊΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠ΅ΠΌ массив, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ индСкса. Π’ языкС ассСмблСра индСксы массивов β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ адрСса, Π½ΠΎ с Π½ΠΈΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ассСмблСрС ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± индСксС, Ρ‚ΠΎ скорСС ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ ΠΏΠΎΠ΄ этим Π½Π΅ Π½ΠΎΠΌΠ΅Ρ€ элСмСнта Π² массивС, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ адрСс.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π· обратимся ΠΊ описанию массива. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ статичСски ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…:

ΠŸΡƒΡΡ‚ΡŒ эта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл трактуСтся ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. Π Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта опрСдСляСтся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉΒ dw, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½Π° Ρ€Π°Π²Π½Π°2Π±Π°ΠΉΡ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ элСмСнту, Π½ΡƒΠΆΠ½ΠΎ ΠΊ адрСсу массива ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ6. НумСрация элСмСнтов массива Π² ассСмблСрС начинаСтся с нуля.

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π² нашСм случаС Ρ€Π΅Ρ‡ΡŒ, фактичСски, ΠΈΠ΄Π΅Ρ‚ ΠΎΒ 4-ΠΌ элСмСнтС массива β€” 3, Π½ΠΎ ΠΎΠ± этом Π·Π½Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ программист; микропроцСссору Π² Π΄Π°Π½Π½ΠΎΠΌ случаС всС Ρ€Π°Π²Π½ΠΎ β€” Π΅ΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ адрСс.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС для получСния адрСса элСмСнта Π² массивС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ (Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ) адрСс массива ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ с ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ индСкса (Π½ΠΎΠΌΠ΅Ρ€ элСмСнта минус Π΅Π΄ΠΈΠ½ΠΈΡ†Π°) этого элСмСнта Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта массива:

Π±Π°Π·Π° + (индСкс*Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта)

АрхитСктура микропроцСссора прСдоставляСт достаточно ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ срСдства для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами. К Π½ΠΈΠΌ относятся Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΈ индСксныС рСгистры, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² адрСсации Π΄Π°Π½Π½Ρ‹Ρ…. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ адрСсации, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с массивами Π² памяти. Вспомним эти Ρ€Π΅ΠΆΠΈΠΌΡ‹:

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  индСксная адрСсация со смСщСниСм — Ρ€Π΅ΠΆΠΈΠΌ адрСсации, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эффСктивный адрСс формируСтся ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

oΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  постоянного (Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ)β€” ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ прямого адрСса массива Π² Π²ΠΈΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ массива;

oΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ (индСксного)β€” ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ индСксного рСгистра.

oΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

mas dw 0,1,2,3,4,5

mov si,4

;ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ 3-ΠΉ элСмСнт массива mas Π² рСгистр ax:

mov ax,mas[si]

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  базовая индСксная адрСсация со смСщСниСм — Ρ€Π΅ΠΆΠΈΠΌ адрСсации, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эффСктивный адрСс формируСтся максимум ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

oΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  постоянного(Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚), Π² качСствС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ прямой адрСс массива Π² Π²ΠΈΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ массива, ΠΈΠ»ΠΈ нСпосрСдствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;

oΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ (Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ)β€” ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ рСгистра;

oΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ (индСксного)β€” ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ индСксного рСгистра.

Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ адрСсации ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования этой адрСсации ΠΌΡ‹ рассмотрим Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ особСнностСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами.

Напомним, Ρ‡Ρ‚ΠΎ Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ рСгистра ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ любой ΠΈΠ· восьми рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. Π’ качСствС индСксного рСгистра Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой рСгистр ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ esp/sp.

ΠœΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚Β ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ ΠΈΠ½Π΄Π΅ΠΊΡ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ послС ΠΈΠΌΠ΅Π½ΠΈ индСксного рСгистра Π·Π½Π°ΠΊ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡΒ β€œ*” с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 2, 4 ΠΈΠ»ΠΈ 8, Ρ‚ΠΎ содСрТимоС индСксного рСгистра Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒΡΡ Π½Π° 2, 4 ΠΈΠ»ΠΈ 8, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒΒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с массивами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнтов, Ρ€Π°Π²Π½Ρ‹ΠΉ 2, 4 ΠΈΠ»ΠΈ 8 Π±Π°ΠΉΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ микропроцСссор сам ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΡŽ индСкса для получСния адрСса ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ элСмСнта массива. Нам Π½ΡƒΠΆΠ½ΠΎ лишь Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² индСксный рСгистр Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ индСкса (считая ΠΎΡ‚ 0). ΠšΡΡ‚Π°Ρ‚ΠΈ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ появилась Π² микропроцСссорах Intel, начиная с ΠΌΠΎΠ΄Π΅Π»ΠΈ i486. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π² рассматриваСмом здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стоит Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Β .486. Π•Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½Π΅Π΅ использовавшСйся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹.386, Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ассСмблСру ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π° ΠΈ использования Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй систСмы ΠΊΠΎΠΌΠ°Π½Π΄ Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ микропроцСссоров.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° использования ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ рассмотрим листинг 3, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ просматриваСтся массив, состоящий ΠΈΠ· слов, ΠΈ производится сравнСниС этих элСмСнтов с Π½ΡƒΠ»Π΅ΠΌ. Выводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС.

Листинг 3. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ массива слов с использованиСм

ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ

;prg_12_2.asm

MASM

MODEL small

STACK 256

.data ;Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…

;тСксты сообщСний:

mes1 db ‘Π½Π΅ Ρ€Π°Π²Π΅Π½ 0!$’,0ah,0dh

mes2 db ‘Ρ€Π°Π²Π΅Π½ 0!$’,0ah,0dh

mes3 db 0ah,0dh,’Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ $’

mas dw 2,7,0,0,1,9,3,6,0,8 ;исходный массив

.code

.486 ;это ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ

main:

mov ax,@data

mov ds,ax ;связка ds с сСгмСнтом Π΄Π°Π½Π½Ρ‹Ρ…

xor ax,ax ;ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ ax

prepare:

mov cx,10 ;Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика Ρ†ΠΈΠΊΠ»Π° Π² cx

mov esi,0 ;индСкс в esi

compare:

mov dx,mas[esi*2] ;ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива Π² dx

cmp dx,0 ;сравнСниС dx c 0

je equal ;ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ссли Ρ€Π°Π²Π½ΠΎ

not_equal: ;Π½Π΅ Ρ€Π°Π²Π½ΠΎ

mov ah,09h ;Π²Ρ‹Π²ΠΎΠ΄ сообщСния Π½Π° экран

lea dx,mes3

int 21h

mov ah,02h ;Π²Ρ‹Π²ΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€Π° элСмСнта массива Π½Π° экран

mov dx,si

add dl,30h

int 21h

mov ah,09h

lea dx,mes1

int 21h

inc esi ;Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт

dec cx ;условиС для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°

jcxz exit ;cx=0? Если Π΄Π° β€” Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄

jmp compare ;Π½Π΅Ρ‚ β€” ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ»

equal: ;Ρ€Π°Π²Π½ΠΎ 0

mov ah,09h ;Π²Ρ‹Π²ΠΎΠ΄ сообщСния mes3 Π½Π° экран

lea dx,mes3

int 21h

mov ah,02h

mov dx,si

add dl,30h

int 21h

mov ah,09h ;Π²Ρ‹Π²ΠΎΠ΄ сообщСния mes2 Π½Π° экран

lea dx,mes2

int 21h

inc esi ;Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт

dec cx ;всС элСмСнты ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹?

jcxz exit

jmp compare

exit:

mov ax,4c00h ;стандартный Π²Ρ‹Ρ…ΠΎΠ΄

int 21h

end main ;ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π•Ρ‰Π΅ нСсколько слов ΠΎ ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ…:

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Если для описания адрСса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ рСгистр, Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΒ Π±Π°Π·ΠΎΠ²ΠΎΠΉ адрСсациии этот рСгистр рассматриваСтся ΠΊΠ°ΠΊΠ±Π°Π·ΠΎΠ²Ρ‹ΠΉ:

;ΠΏΠ΅Ρ€Π΅ΡΠ»Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚ ΠΈΠ· области Π΄Π°Π½Π½Ρ‹Ρ…, адрСс

ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится Π² рСгистрС ebx:

mov al,[ebx]

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Если для задания адрСса Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡΒ ΠΏΡ€ΡΠΌΠ°Ρ адрСсация(Π² Π²ΠΈΠ΄Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°) Π² сочСтании с ΠΎΠ΄Π½ΠΈΠΌ рСгистром, Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ обиндСксной адрСсации. РСгистр считаСтсяиндСксным, ΠΈ поэтому ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для получСния адрСса Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ элСмСнта массива:

add eax,mas[ebx*4]

;ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ содСрТимоС eax с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ словом Π² памяти

;ΠΏΠΎ адрСсу mas + (ebx)*4

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  Если для описания адрСса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° рСгистра, Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΒ Π±Π°Π·ΠΎΠ²ΠΎ-индСксной адрСсации. Π›Π΅Π²Ρ‹ΠΉ рСгистр рассматриваСтся ΠΊΠ°ΠΊΒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ, Π° ΠΏΡ€Π°Π²Ρ‹ΠΉ β€” как индСксный. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС это Π½Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ, Π½ΠΎ Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· рСгистров, Ρ‚ΠΎ ΠΎΠ½ всСгда являСтсяиндСксным. Но Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… соглашСний.

Β·Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β  ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ рСгистров ebp/bpΠΈesp/spΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сСгмСнтная ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ адрСса находится Π² рСгистрСss.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΒ Π±Π°Π·ΠΎΠ²ΠΎ-ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽΒ Π½Π΅ возбраняСтся ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ с прямой адрСсациСй или ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ нСпосрСдствСнного значСния. АдрСс Ρ‚ΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ сумма всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ:

mov ax,mas[ebx][ecx*2]

;адрСс ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Ρ€Π°Π²Π΅Π½ [mas+(ebx)+(ecx)*2]

sub dx,[ebx+8][ecx*4]

;адрСс ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Ρ€Π°Π²Π΅Π½ [(ebx)+8+(ecx)*4]

Но ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎΒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ лишь Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ элСмСнтов массива Ρ€Π°Π²Π½Π° 2, 4 ΠΈΠ»ΠΈ 8 Π±Π°ΠΉΡ‚. Если ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ элСмСнтов другая, Ρ‚ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам массива Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ способом, ΠΊΠ°ΠΊ описано Ρ€Π°Π½Π΅Π΅.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивом ΠΈΠ· пяти Ρ‚Ρ€Π΅Ρ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… элСмСнтов (листинг 4). Младший Π±Π°ΠΉΡ‚ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· этих элСмСнтов прСдставляСт собой Π½Π΅ΠΊΠΈΠΉ счСтчик, Π° ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° β€” Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, для нас Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния. НСобходимо ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ элСмСнты Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ² значСния счСтчиков Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ.

Листинг 4. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массива элСмСнтов с Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ

;prg_11_3.asm

MASM

MODEL small ;модСль памяти

STACK 256 ;Ρ€Π°Π·ΠΌΠ΅Ρ€ стСка

.data ;Π½Π°Ρ‡Π°Π»ΠΎ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ…

N=5 ;количСство элСмСнтов массива

mas db 5 dup (3 dup (0))

.code ;сСгмСнт ΠΊΠΎΠ΄Π°

main: ;Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

mov ax,@data

mov ds,ax

xor ax,ax ;ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ ax

mov si,0 ;0 Π² si

mov cx,N ;N Π² cx

go:

mov dl,mas[si] ;ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ поля Π² dl

inc dl ;ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ dl Π½Π° 1 (ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ)

mov mas[si],dl ;Π·Π°ΡΠ»Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² массив

add si,3 ;сдвиг Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт массива

loop go ;ΠΏΠΎΠ²Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π°

mov si,0 ;ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ Π½Π° экран

mov cx,N

show: ;Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран содСрТимого

;ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π±Π°ΠΉΡ‚ ΠΏΠΎΠ»Π΅ΠΉ

mov dl,mas[si]

add dl,30h

mov ah,02h

int 21h

loop show

exit:

mov ax,4c00h ;стандартный Π²Ρ‹Ρ…ΠΎΠ΄

int 21h

end main ;ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Β 

Π‘Π±ΠΎΡ€ΠΊΠ°

— Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π‘Π”? Π Π°Π·Π²Π΅ это Π½Π΅ Π±Π°ΠΉΡ‚Ρ‹ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ассСмблСра?

ВсСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅:

  • Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… констант, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ 1, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ встроСны Π² инструкции машинного ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚
  • Π±ΠΎΠ»ΡŒΡˆΠΈΡ… констант ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ΅ машинного ΠΊΠΎΠ΄Π°, поэтому ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π° Π½ΠΈΡ… ссылаСтся ΠΊΠΎΠ΄
  • . ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ для ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡƒΡ‚Π΅ΠΉ, подсказок ΠΈ Ρ‚. Π”.
  • Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² хранСния ΠΊΠ°ΠΊ пространство для чтСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°
  • Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½ΡƒΠ»Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ
  • констант с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой хранятся Π² памяти, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слишком Π²Π΅Π»ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ нСпосрСдствСнно Π² инструкции машинного ΠΊΠΎΠ΄Π°.

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ встроСны Π² инструкции машинного ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ называСтся Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ, краткосрочным для Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ адрСсации. Но Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях константы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π΄Π°Π½Π½Ρ‹Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ссылаСтся ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° Π½Π΅ встроСны Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ — адрСс Π΄Π°Π½Π½Ρ‹Ρ… встроСн Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (с использованиСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° адрСсации).

ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° языкС ассСмблСра Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.Π’Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ способ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ ΠΈ Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.

Если Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ссылку) эту ΠΌΠ΅Ρ‚ΠΊΡƒ ΠΈΠ· вашСго ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π£ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ассСмблСров Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ понятиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° .data (ΠΈΠ»ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этого ассСмблСра) ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ ассСмблСру ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ объявлСния Π΄Π°Π½Π½Ρ‹Ρ… вмСстС Π² Ρ€Π°Π·Π΄Π΅Π» Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π²ΠΎΠ΄Π° ассСмблСра ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°.ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² исходном ΠΊΠΎΠ΄Π΅ сборки ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, относящиСся ΠΊ ΠΊΠΎΠ΄Ρƒ, поблизости Π² источникС, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² созданном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Π² соотвСтствии с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

АссСмблСр

Z80 — Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ассСмблСра

АссСмблСр Z80 — Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ассСмблСра

db, defb, dm ΠΈΠ»ΠΈ defm

db ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚Β», dm — Β«ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ сообщСниС». Π­Ρ‚ΠΎ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ строк Π±Π°ΠΉΡ‚ΠΎΠ².ВсС опрСдСлСния слСдуСт Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ запятыми. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π±Π°ΠΉΡ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠšΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:
label: equ 20
defb "Π­Ρ‚ΠΎ тСкст", label / 2, "Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ тСкст", 10, 0

dw ΠΈΠ»ΠΈ defw

dw ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ слова». Π­Ρ‚ΠΎ удобная Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° для опрСдСлСния младший Π±Π°ΠΉΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… слов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Z80 ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚. НСсколько ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ выраТСния, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
org 0x8000
pointertable: defw sub1, sub2
sub1: sub b
ret nz
sub2: ld h, 0
ret

ds ΠΈΠ»ΠΈ defs

ds ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ пространство».ВрСбуСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, num ΠΈ Π²Π°Π» . Он Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ num Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… для Π²Π°Π» . Если val ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 0. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
Π±ΡƒΡ„Π΅Ρ€: defs 20
сСмСрки: defs 10, 7

ΠΊΠΎΠ½Π΅Ρ†

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ «end». Π’Π°ΠΌ Π² этом Π½Π΅Ρ‚ нСобходимости. ВсС, Ρ‡Ρ‚ΠΎ находится послС этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, игнорируСтся. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для добавлСния ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² ΠΊΠΎΠ½Ρ†Π΅.

org

УстанавливаСт прСдставлСниС ассСмблСра ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ адрСсС. ВрСбуСтся ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ (ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅).

Π’Π½Π°Ρ‡Π°Π»Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ адрСс установлСн Π½Π° 0. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ — org, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс.

ИспользованиС этой Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для создания ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ адрСсу, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ памяти.На Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы, ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс для сопоставлСния адрСс. Π Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ страницы Π½Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эта Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄, поэтому, Ссли Π±Π°ΠΉΡ‚Ρ‹ заполнСния трСбуСтся, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ вставлСны с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ defs. Org мСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ассСмблСр прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Β«Π³Π΄Π΅Β» это. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹Π²ΠΎΠ΄ содСрТит 4 Π±Π°ΠΉΡ‚Π°: 23, 12, 00, 00. first_label: defw second_label org 0x1234 second_label: defw first_label

ΠΈΡΠΊΠ°Ρ‚ΡŒ

Π›ΡŽΠ΄ΠΈ запросили Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ сгСнСрированный Π²Ρ‹Π²ΠΎΠ΄.Π­Ρ‚ΠΎ для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ поиск. Он Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄. Π’ основном это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² сочСтании с incbin. Π­Ρ‚ΠΎ позволяСт Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ «исправлСн».

Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ поиска большС, Ρ‡Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ„Π°ΠΉΠ» Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ нулями.

Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚

Как ΠΈ Π² C (Π½ΠΎ Π±Π΅Π· символа #), сюда Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ исходный Ρ„Π°ΠΉΠ». НСт Π·Π°ΠΌΠ΅Π½Π° Π²ΠΎΠΎΠ±Ρ‰Π΅ выполняСтся Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ~ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обозначСния домашнСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ любой имя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· escape-символов ΠΈΠ·-Π·Π° ΠΏΡ€Π°Π²ΠΈΠ» ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ. Π’ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π½Π΅ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ послС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ include считаСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ†ΠΈΡ‚Π°Ρ‚Π°. Π—Π°Ρ‚Π΅ΠΌ читаСтся имя Ρ„Π°ΠΉΠ»Π° Π΄ΠΎ послСднСй ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, которая Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Ρ†ΠΈΡ‚Π°Ρ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
include 'math.asm'
include -file 'с "ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ" .asm-
Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ zletter Π² качСствС ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π² name.asmz

incbin

Incbin ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»Β». Π­Ρ‚ΠΎ позволяСт Π»ΡŽΠ±Ρ‹ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ Π±Ρ‹Ρ‚ΡŒ дословно Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π²ΠΎΠ΄.АргумСнт приводится Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

if, else, endif

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ части ΠΊΠΎΠ΄Π°. ΠΈΠ½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ Ρ€Π°Π·. Код, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ собран, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ» ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π΅Π³ΠΎ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°ΡŽΡ‚, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ эти Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ассСмблСра Π½Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ вСсь ΠΊΠΎΠ΄ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
org 0x8000
Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ "math.asm"
, Ссли $ <0x9000; Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°.asm достаточно ΠΌΠ°Π»
ld a, 3
else
ld a, 6
else
; ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ собираСтся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли math.asm достаточно ΠΌΠ°Π»
ld h, 8
endif
; ΠΎΠ½ всСгда собираСтся
call math_init

макрос, endm

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: callf: слот макроса, адрСс rst 0x30 слот db адрСс DW ΠΊΠΎΠ½Π΅Ρ†

ПослС этого опрСдСлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макрос, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: callf 0x8b, 0x4000

8086 Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ ассСмблСру для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Ρ‡Π°ΡΡ‚ΡŒ 3)

8086 Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ ассСмблСру для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Ρ‡Π°ΡΡ‚ΡŒ 3)

8086 Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ассСмблСра для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Ρ‡Π°ΡΡ‚ΡŒ 3)

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ — это ячСйка памяти.ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρƒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ сохранСно Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΈΠΌΠ΅Π½Π΅ΠΌ « var1 «, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎ адрСсу 5A73: 235B, особСнно ΠΊΠΎΠ³Π΄Π° Ρƒ вас 10 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Наш компилятор ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…: BYTE ΠΈ WORD .

Бинтаксис для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

имя DB Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

имя DW Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

DB — остаСтся для 9014fine D yte.
DW — стойки для D efine W ord.

имя — ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любоС сочСтаниС Π±ΡƒΠΊΠ² ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€, хотя ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с Π±ΡƒΠΊΠ²Ρ‹. МоТно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ бСзымянныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±Π΅Π· указания ΠΈΠΌΠ΅Π½ΠΈ (эта пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ адрСс, Π½ΠΎ Π½Π΅ имя).

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ числовым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² любом ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΌ систСма счислСния (ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Π°Ρ, двоичная ΠΈΠ»ΠΈ дСсятичная), ΠΈΠ»ΠΈ символ «? » для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½.

Как Π²Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π½Π°Π΅Ρ‚Π΅ ΠΈΠ· , Ρ‡Π°ΡΡ‚ΡŒ 2 этого руководства, MOV Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для копирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· источника Π² мСсто назначСния.
Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с инструкциСй MOV :

ORG 100Ρ‡

MOV AL, var1
MOV BX, var2

RET; останавливаСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

VAR1 DB 7
var2 DW 1234h
 

Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ исходного ΠΊΠΎΠ΄Π° ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ F5 , Ρ‡Ρ‚ΠΎΠ±Ρ‹ скомпилируйтС Π΅Π³ΠΎ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π² эмулятор.Π£ вас Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ с фактичСскими ячСйками памяти. Когда компилятор создаСт ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΎΠ½ автоматичСски замСняСт всС ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° ΠΈΡ… смСщСния . По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сСгмСнт загруТаСтся Π² рСгистр DS (ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² COM Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСгистра DS устанавливаСтся Π½Π° Ρ‚ΠΎ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ рСгистр CS — сСгмСнт ΠΊΠΎΠ΄Π°).

Π’ спискС памяти пСрвая строка — это смСщСниС , вторая строка — это ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , Ρ‚Ρ€Π΅Ρ‚ΡŒΡ строка — дСсятичноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , Π° послСдняя строка — Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа ASCII .

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ чувствитСлСн ΠΊ рСгистру, поэтому Β« VAR1 Β» ΠΈ Β« var1 Β» относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ VAR1 0108h , Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ адрСс — 0B56: 0108 .

Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ var2 0109h , Π° ΠΏΠΎΠ»Π½Ρ‹ΠΉ адрСс — 0B56: 0109 , эта пСрСмСнная — WORD , поэтому ΠΎΠ½Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 БАЙВА . ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ младший Π±Π°ΠΉΡ‚ хранится ΠΏΠΎ ΠΌΠ»Π°Π΄ΡˆΠ΅ΠΌΡƒ адрСсу, поэтому 34h находится ΠΏΠ΅Ρ€Π΅Π΄ 12h .

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструкции послС RET инструкция это происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ дизассСмблСр Π½Π΅ Π·Π½Π°Π΅Ρ‚, Π³Π΄Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΠ½ просто ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ значСния Π² памяти ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΡ… ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ инструкции 8086 (ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΈΡ… ΠΏΠΎΠ·ΠΆΠ΅).
Π’Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ DB :

ORG 100Ρ‡

DB 0A0h
DB 08h
DB 01h

DB 8Bh
DB 1Eh
DB 09h
DB 01h

DB 0C3h

DB 7

DB 34h
DB 12h
 

Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ исходного ΠΊΠΎΠ΄Π° ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ F5 , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² эмулятор.Π£ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ дизассСмблированный ΠΊΠΎΠ΄, ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»!

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, компилятор просто ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π½Π°Π±ΠΎΡ€ Π±Π°ΠΉΡ‚ΠΎΠ², этот Π½Π°Π±ΠΎΡ€ называСтся , ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ , процСссор ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ выполняСт Π΅Π³ΠΎ.

ORG 100h — Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° компилятора (сообщаСт компилятору, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄). Π­Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Он сообщаСт компилятору, Ρ‡Ρ‚ΠΎ исполняСмый Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ со смСщСниСм ΠΈΠ· 100h (256 Π±Π°ΠΉΡ‚), поэтому компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ адрСс для всСх ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ замСняСт ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΡ… смСщСниями .Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² настоящий ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ .
ΠŸΠΎΡ‡Π΅ΠΌΡƒ исполняСмый Ρ„Π°ΠΉΠ» загруТаСтся со смСщСниСм ΠΈΠ· 100h ? ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… 256 Π±Π°ΠΉΡ‚Π°Ρ… CS (сСгмСнт ΠΊΠΎΠ΄Π°), Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ Ρ‚. Π΄.
Π₯отя это Π²Π΅Ρ€Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ„Π°ΠΉΠ»ΠΎΠ² COM , Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ EXE со смСщСниСм 0000 , ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ„Π°ΠΉΠ»Π°Ρ… EXE ΠΏΠΎΠ·ΠΆΠ΅.



ΠœΠ°ΡΡΠΈΠ²Ρ‹

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ВСкстовая строка являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ массив, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ прСдставлСн Π² Π²ΠΈΠ΄Π΅ значСния ΠΊΠΎΠ΄Π° ASCII (0..255).

Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² опрСдСлСния массива:

a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h 
b DB 'Hello', 0

b являСтся Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ массива a , ΠΊΠΎΠ³Π΄Π° компилятор Π²ΠΈΠ΄ΠΈΡ‚ строка Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π΅ Π² Π½Π°Π±ΠΎΡ€ Π±Π°ΠΉΡ‚ΠΎΠ². Π­Ρ‚ΠΎΡ‚ На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Ρ‡Π°ΡΡ‚ΡŒ памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ эти массивы:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ любого элСмСнта Π² массивС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

MOV AL, a [3]
 

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΈΠ· индСксных рСгистров памяти BX, SI, DI, BP , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

MOV SI, 3 
MOV AL, a [SI]

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ большой массив, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ DUP .
Бинтаксис для DUP :

Π½ΠΎΠΌΠ΅Ρ€ DUP ( Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (я) )
число — количСство Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ (любоС постоянноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅).
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ — Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ DUP Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

c DB 5 DUP (9)
 

— Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ объявлСния:
Π² DB 9, 9, 9, 9, 9
 

Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

d DB 5 DUP (1, 2)
 

— Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ объявлСния:
Π³ DB 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
 

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DW вмСсто DB , Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ значСния большС 255 ΠΈΠ»ΠΈ мСньшС -128. DW нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ строки.



ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ адрСса ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ инструкция LEA (Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ эффСктивный адрСс) ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ OFFSET . Оба OFFSET ΠΈ LEA ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для получСния адрСса смСщСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
LEA Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс индСксированныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ адрСса ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ.



НапоминаниС:
Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ компилятору ΠΎ Ρ‚ΠΈΠΏΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…,
слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСфиксы:

BYTE PTR — для Π±Π°ΠΉΡ‚Π°.
WORD PTR — для слова (Π΄Π²Π° Π±Π°ΠΉΡ‚Π°).

НапримСр:

 BYTE PTR [BX]; Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ доступ.
    ΠΈΠ»ΠΈ ΠΆΠ΅
WORD PTR [BX]; слово доступ.
 
АссСмблСр ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ прСфиксы:

b. — для BYTE PTR
w. — для WORD PTR

Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ассСмблСр ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… автоматичСски.


Π’ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ORG 100Ρ‡

MOV AL, VAR1; ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ VAR1, пСрСмСстив Π΅Π³ΠΎ Π² AL.

LEA BX, VAR1; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс VAR1 Π² BX.

MOV BYTE PTR [BX], 44Ρ‡; ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС VAR1.

MOV AL, VAR1; ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ VAR1, пСрСмСстив Π΅Π³ΠΎ Π² AL.

RET

VAR1 DB 22Ρ‡

ΠšΠžΠΠ•Π¦
 

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ OFFSET вмСсто LEA :

ORG 100Ρ‡

MOV AL, VAR1; ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ VAR1, пСрСмСстив Π΅Π³ΠΎ Π² AL.MOV BX, Π‘ΠœΠ•Π©Π•ΠΠ˜Π• VAR1; ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс VAR1 Π² BX.

MOV BYTE PTR [BX], 44Ρ‡; ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС VAR1.

MOV AL, VAR1; ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ VAR1, пСрСмСстив Π΅Π³ΠΎ Π² AL.

RET

VAR1 DB 22Ρ‡

ΠšΠžΠΠ•Π¦
 

Оба ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π­Ρ‚ΠΈ строки:

LEA BX, VAR1 
MOV BX, OFFSET VAR1

Π΄Π°ΠΆΠ΅ скомпилированы Π² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄: MOV BX, num
num — это 16-Π±ΠΈΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ смСщСния.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эти рСгистры. Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок (ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ): BX, SI, DI, BP !
(см. ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°).



ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΎΠ½ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° компилируСтся (собираСтся). ПослС опрСдСлСния константы Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. Для опрСдСлСния констант ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° EQU :

name EQU <любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>

 

НапримСр:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ ΠΊΠΎΠ΄Ρƒ:



Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹Π±Ρ€Π°Π² Β« Variables Β» ΠΈΠ· мСню эмулятора Β« View Β».

Для просмотра массивов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ свойство Elements ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ массива. Π’ ассСмблСрС Π½Π΅Ρ‚ строгих Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, поэтому любая пСрСмСнная ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ массива.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² любой систСмС счислСния:

  • HEX — ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ (основаниС 16).
  • Π‘Π˜Π — Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ (ΠΏΠΎ основанию 2).
  • OCT — Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ (основаниС 8).
  • SIGNED — дСсятичноС число со Π·Π½Π°ΠΊΠΎΠΌ (основаниС 10).
  • UNSIGNED — дСсятичноС Π±Π΅Π· Π·Π½Π°ΠΊΠ° (основаниС 10).
  • CHAR — ΠΊΠΎΠ΄ символа ASCII (всСго 256 символов, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹).

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, просто Π΄Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Π½Π΅ΠΉ, ΠΈΠ»ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ .

МоТно Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ числа Π² любой систСмС, ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ числа Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Буффикс Β« h Β», Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ суффикс Β« b Β», Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ суффикс Β« o Β», дСсятичныС числа Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ суффикса.Π‘Ρ‚Ρ€ΠΎΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
‘hello world’, 0
(эта строка заканчиваСтся Π½ΡƒΠ»Π΅ΠΌ).

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
1, 2, 3, 4, 5
(массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ массивом Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ»ΠΈ слов, это зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹Π±Ρ€Π°Π½ΠΎ BYTE ΠΈΠ»ΠΈ WORD для Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ).

ВыраТСния ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ автоматичСски, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ этого выраТСния:
5 + 2
ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² 7 ΠΈ Ρ‚. Π”…



<<< прСдыдущая Ρ‡Π°ΡΡ‚ΡŒ <<< >>> Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ >>>

ИспользованиС REPT и IRP

ИспользованиС REPT и IRP

Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° REPT Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π·. REPT Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ, поэтому Π΅Π³ΠΎ нСльзя Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ макрос. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½ΠΈΠ΅, помСстив REPT Π²Π½ΡƒΡ‚Ρ€ΡŒ макроса, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт.

REPT, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ дСйствуСт ΠΊΠ°ΠΊ dup

ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠ² этот REPT Π² Ρ„Π°ΠΉΠ».Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ DATA, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

 ΠŸΠžΠ’Π’ΠžΠ  10
db 0
ΠΊΠΎΠ½Π΅Ρ†
 

Π­Ρ‚ΠΎ сгСнСрируСт 10 Π±Π°ΠΉΡ‚ΠΎΠ² со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0. Однако это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ интСрСсно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ db 10 dup (0) .

REPT для размСщСния ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ значСния

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ = для создания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ассСмблСра, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚Ρ‹ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ значСниями.

 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 0
ΠŸΠžΠ’Π’ΠžΠ  10
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ db
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ + 1
ΠΊΠΎΠ½Π΅Ρ†
 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ это создаст Π±Π»ΠΎΠΊ ΠΈΠ· дСсяти Π±Π°ΠΉΡ‚ΠΎΠ², ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ значСниями 0 .. 9.

Π­Ρ‚ΠΎΡ‚ REPT ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 0
ΠŸΠžΠ’Π’ΠžΠ  4
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ db
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ + 1
ΠΊΠΎΠ½Π΅Ρ†
 

И Π±ΡƒΠ΄Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ассСмблСра

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
db 0
Π΄Π± 1
db 2
Π΄Π± 3
 

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΊΠ° Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΠ»Π° Π² REPT, ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ db Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ​​ТС ΠΌΠ΅Ρ‚ΠΊΡƒ.

REPT для присвоСния ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ

МоТно ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π½ΠΎΠΌΠ΅Ρ€ ΠΊ названию ΠΌΠ΅Ρ‚ΠΊΠΈ.

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 0
ΠŸΠžΠ’Π’ΠžΠ  4
список ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ db
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ + 1
ΠΊΠΎΠ½Π΅Ρ†
 

Π­Ρ‚ΠΎ сгСнСрируСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ассСмблСр

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
list0 db 0
list1 db 1
list2 db 2
list3 db 3
 
Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ REPT Π²Π½ΡƒΡ‚Ρ€ΠΈ макроса

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, помСститС REPT Π² макрос, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ Π·Π²ΠΎΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ.

 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ количСство макросов
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 0
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΎΠ²
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ db
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ + 1
ΠΊΠΎΠ½Π΅Ρ†
ΠΊΠΎΠ½Π΅Ρ†
 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·.

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ 4
ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ 3
 

Π­Ρ‚ΠΎ сгСнСрируСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ассСмблСр

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
db 0
Π΄Π± 1
db 2
Π΄Π± 3
db 0
Π΄Π± 1
db 2

 
IRP для распрСдСлСния ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ значСния

IRP ΠΏΠΎΡ…ΠΎΠΆ Π½Π° REPT, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ IRP ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΅Π³ΠΎ отправляСтС. Если Π²Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ элСмСнта, IRP Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ 4 Ρ€Π°Π·Π°. Π—Π΄Π΅ΡΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ макрос, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅, с использованиСм IRP вмСсто REPT

 IRP arg, 
db arg
ΠΊΠΎΠ½Π΅Ρ†
 

Π­Ρ‚ΠΎ Π½Π°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΊΠ°ΠΊ REPT

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
IRP arg, <0,1,2,3>
db arg
ΠΊΠΎΠ½Π΅Ρ†
 

Π­Ρ‚ΠΎ сгСнСрируСт Ρ‚ΠΎΡ‚ ΠΆΠ΅ ассСмблСр, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅.

 список Π±Π°ΠΉΡ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΊΠΈ
db 0
Π΄Π± 1
db 2
Π΄Π± 3
 

ΠšΠ°ΠΆΠ΅Ρ‚ΡΡ, Π½ΡƒΠΆΠ½ΠΎ большС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ <>. Однако Ρƒ IRP большС гибкости, Ρ‡Π΅ΠΌ Ρƒ REPT. REPT — это ограничиваСтся инициализациями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгСнСрированы Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ IRP ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π½Π°Π΄ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ нСльзя Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠŸΠžΠ’Π’ΠžΠ 

 IRP arg, <5,15,8,2>
db arg
ΠΊΠΎΠ½Π΅Ρ†
 

Π­Ρ‚ΠΎ сгСнСрируСт

 Π΄Π‘ 5
Π΄Π± 15
Π΄Π± 8
db 2
 
Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ IRP Π²Π½ΡƒΡ‚Ρ€ΠΈ макроса

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ IRP Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ, помСститС Π΅Π³ΠΎ Π² макрос

 ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ макрос argList
IRP arg, 
db arg
ΠΊΠΎΠ½Π΅Ρ†
ΠΊΠΎΠ½Π΅Ρ†
 

Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚Π΅ нСсколько Ρ€Π°Π·.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ макрос define , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ REPT Ρ‚ΠΎΠΆΠ΅.

 Π±Π°ΠΉΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ <0,5,8>
ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ 3
ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ <10,15,3,7>
 

Π§Ρ‚ΠΎ сгСнСрируСт

 Π±Π°ΠΉΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹
db 0
Π΄Π± 5
Π΄Π± 8
db 0
Π΄Π± 1
Π΄Π± 3
Π΄Π± 10
Π΄Π± 15
Π΄Π± 3
Π΄Π± 7
 
Цикл for с использованиСм IRP

Π­Ρ‚ΠΎ макрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π½Π° страницС макросов. Π—Π΄Π΅ΡΡŒ стойка Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ IRP, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² макросС.

 forloop макрос start, stop, incr, statementList
мСстный Ρ‚ΠΎΠΏ, Π³ΠΎΡ‚ΠΎΠ²ΠΎ
Ρ‚ΠΎΠ»ΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΠΏΠΎΡ€
mov ax, start
Π²Π²Π΅Ρ€Ρ…Ρƒ: cmp ax, stop
jge сдСлано
ЗаявлСниС IRP, 
ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΊΠΎΠ½Π΅Ρ†
Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΏΠΎΡ€, incr
jmp top
Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ:
Ρ‚ΠΎΠΏΠΎΡ€
ΠΊΠΎΠ½Π΅Ρ†
 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π­Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΏΠ΅Ρ‚Π»ΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² bx ΠΈ Π²Ρ‹Ρ‡Ρ‚ΠΈΡ‚Π΅ Π΅Π΅ Π² cx.

 xor bx, bx
xor cx, cx
forloop 20,5, -4, << Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ bx, ax>, >
 

Π­Ρ‚ΠΎ сгСнСрируСт

 Ρ‚ΠΎΠ»ΠΊΠ°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎΠΏΠΎΡ€
ΠΌΠΎΠ² Ρ‚ΠΎΠΏΠΎΡ€, 20
top1: cmp ax, 5
jge done1
Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ bx, ax
sub cx, ax
Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΏΠΎΡ€, -4
jmp top1
done1:
Ρ‚ΠΎΠΏΠΎΡ€
 

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ продолТСния инструкции \, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

 xor bx, bx
xor cx, cx
forloop 20,5, -4, \
<\
<Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ bx, ax>, \
 \
>
 

3.2. ПсСвдо-инструкции

3.2. ПсСвдо-инструкции

ПсСвдо-инструкции — это Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, хотя ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ настоящими ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌΠΈ инструкциями x86, Π² любом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΠΎΠ»Π΅ инструкции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ мСсто для размСщСния ΠΈΡ…. Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ псСвдо-инструкции: DB , DW , DD , DQ , DT , DDQ , DO , ΠΈΡ… Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ RESB , RESW , RESD , RESQ , REST , RESDDQ ΠΈ RESO , ΠΊΠΎΠΌΠ°Π½Π΄Π° INCBIN , ΠΊΠΎΠΌΠ°Π½Π΄Π° EQU ΠΈ TIMES прСфикс.

3.2.1.

DB ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡ: объявлСниС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

DB , DW , DD , DQ , DT , DDQ ΠΈ DO ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для объявлСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ». Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами:

        db 0x55; просто Π±Π°ΠΉΡ‚ 0x55
        db 0x55,0x56,0x57; Ρ‚Ρ€ΠΈ Π±Π°ΠΉΡ‚Π° подряд
        db 'a', 0x55; ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы Π² порядкС
        db 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚', 13,10, '$'; Ρ‚Π°ΠΊ строковыС константы
        dw 0x1234; 0x34 0x12
        dw 'a'; 0x41 0x00 (это просто число)
        dw 'ab'; 0x41 0x42 (символьная константа)
        dw 'abc'; 0x41 0x42 0x43 0x00 (строка)
        dd 0x12345678; 0x78 0x56 0x34 0x12
        dq 0x1122334455667788; 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
        ddq 0x112233445566778899aabbccddeeff00
        ; 0x00 0xff 0xee 0xdd 0xcc 0xbb 0xaa 0x99
        ; 0x88 0x77 0x66 0x55 0x44 0x33 0x22 0x11
        ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ 0x112233445566778899aabbccddeeff00; Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ
        Π΄Π΄ 1.234567e20; константа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
        dq 1.234567e20; ΠΏΠΎΠΏΠ»Π°Π²ΠΎΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности
        dt 1.234567e20; ΠΏΠΎΠΏΠ»Π°Π²ΠΎΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ точности
 

DT Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ числовыС константы Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², Π° DDQ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. константы ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹. Π›ΡŽΠ±ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ большС DD Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строки ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹.

3.2.2.

RESB ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡ: ОбъявлСниС НСинициализированныС Π΄Π°Π½Π½Ρ‹Π΅

RESB , RESW , RESD , RESQ , REST , RESDQ ΠΈ RESO ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для использования Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ BSS модуля: ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ пространства для хранСния .ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой количСство Π±Π°ΠΉΡ‚ΠΎΠ², слов, Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. NASM Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ синтаксис MASM / TASM для рСзСрвирования Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ пространства ΠΏΡƒΡ‚Π΅ΠΌ записи DW? ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ: это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ вмСсто этого. ΠžΠΏΠ΅Ρ€Π°Π½Π΄ для ПсСвдо-инструкция RESB Ρ‚ΠΈΠΏΠ° являСтся критичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ : см. Π Π°Π·Π΄Π΅Π» 3.8.

НапримСр:

Π±ΡƒΡ„Π΅Ρ€: resb 64; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 64 Π±Π°ΠΉΡ‚Π°
wordvar: resw 1; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слово
realarray resq 10; массив ΠΈΠ· дСсяти Ρ€Π΅Π°Π»ΠΎΠ²
 

3.2.3.

INCBIN : Π²ΠΊΠ»ΡŽΡ‡Π°Ρ внСшниС Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

INCBIN Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» дословно Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ графичСскиС ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ прямо Π² ΠΈΠ³Ρ€Ρƒ запускаСмый Ρ„Π°ΠΉΠ». Однако рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· этих Ρ‚Ρ€Π΅Ρ… способы:

        incbin "file.dat"; Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ вСсь Ρ„Π°ΠΉΠ»
        incbin "file.dat", 1024; ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 1024 Π±Π°ΠΉΡ‚Π°
        incbin "Ρ„Π°ΠΉΠ».dat ", 1024 512; ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 1024 ΠΈ
                                 ; фактичСски Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 512
 

3.2.4.

EQU : ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант

EQU опрСдСляСт символ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ постоянного значСния: ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ EQU , исходная строка Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ. ДСйствиС EQU опрСдСляСт имя Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΈ для значСния Π΅Π΅ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) ΠΎΠΏΠ΅Ρ€Π°Π½Π΄. Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

message db 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€'
msglen equ $ -сообщСниС
 

опрСдСляСт msglen ΠΊΠ°ΠΊ константу 12. msglen Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ·ΠΆΠ΅. Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ прСпроцСссора: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ msglen оцСниваСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $ (см. Π Π°Π·Π΄Π΅Π» 3.6 для объяснСниС $ ) Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ опрСдСлСния, Π° Π½Π΅ оцСниваСтся Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π½Π° Π½Π΅Π³ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ $ Π² качСствС ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ для EQU Ρ‚Π°ΠΊΠΆΠ΅ являСтся критичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (Ρ€Π°Π·Π΄Π΅Π» 3.8).

3.2.5.

РАЗ : ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ TIMES Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ инструкция ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ нСсколько Ρ€Π°Π·. Π­Ρ‚ΠΎ частично присутствуСт Π² NASM эквивалСнт синтаксиса DUP , ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ MASM-совмСстимым ассСмблСры, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

zerobuf: Ρ€Π°Π· 64 Π΄Π‘ 0
 

ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ; Π½ΠΎ TIMES Π±ΠΎΠ»Π΅Π΅ унивСрсалСн, Ρ‡Π΅ΠΌ это. АргумСнт TIMES — это Π½Π΅ просто числовая константа, Π° числовоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ , поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ

Π±ΡƒΡ„Π΅Ρ€: db 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€'
        Ρ€Π°Π· 64 - $ + Π±ΡƒΡ„Π΅Ρ€ db ''
 

, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ мСста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π±ΡƒΡ„Π΅Ρ€Π° Π΄ΠΎ 64.НаконСц, РАЗ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ примСняСтся ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ инструкциям, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹:

        ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 100 мовсб
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ эффСктивной Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ , ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π½Π° 100. resb 1 ΠΈ resb 100 , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ послСдний Π±ΡƒΠ΄Π΅Ρ‚ собираСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 100 Ρ€Π°Π· быстрСС Π·Π° счСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства ассСмблСра.

ΠžΠΏΠ΅Ρ€Π°Π½Π΄ для TIMES , ΠΊΠ°ΠΊ ΠΈ для EQU , Π° Ρ‚Π°ΠΊΠΆΠ΅ для RESB ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ…, являСтся критичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Ρ€Π°Π·Π΄Π΅Π» 3.8).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ TIMES нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊ макросам: ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ TIMES обрабатываСтся послС ΠΌΠ°ΠΊΡ€ΠΎ Ρ„Π°Π·Ρ‹, Ρ‡Ρ‚ΠΎ позволяСт Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ TIMES , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ выраТСния, ΠΊΠ°ΠΊ 64 - $ + Π±ΡƒΡ„Π΅Ρ€ , ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π°, ΠΈΠ»ΠΈ слоТный макрос, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ прСпроцСссора % rep .

Руководство

NASM Руководство

NASM

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π° | ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Π³Π»Π°Π²Π° | Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ | ИндСкс

3.1 Π‘Ρ…Π΅ΠΌΠ° исходной строки NASM

Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ассСмблСров, каТдая строка исходного ΠΊΠΎΠ΄Π° NASM содСрТит (Ссли это Π½Π΅ макрос, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° прСпроцСссора ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° ассСмблСра: см. Π³Π»Π°Π²Π° 4 ΠΈ Π³Π»Π°Π²Π° 5) нСкоторая комбинация Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΏΠΎΠ»Π΅ΠΉ

ΠΌΠ΅Ρ‚ΠΊΠ°: ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ инструкции; ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ
 

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ этих ΠΏΠΎΠ»Π΅ΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ; Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈΠ»ΠΈ отсутствиС ДопускаСтся любоС сочСтаниС ΠΌΠ΅Ρ‚ΠΊΠΈ, инструкции ΠΈ коммСнтария. Из ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π»ΠΈΠ±ΠΎ трСбуСтся, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΈΠ·-Π·Π° наличия ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ поля инструкции.

NASM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΊΠΎΡΡƒΡŽ Ρ‡Π΅Ρ€Ρ‚Ρƒ (\) Π² качСствС символа продолТСния строки; Ссли линия заканчиваСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ строка считаСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Линия с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚ΠΎΠΉ.

NASM Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² строкС: ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π», ΠΈΠ»ΠΈ Π² инструкциях ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ. Π”Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ послС ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. (ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ lodsb Π½Π° Π»ΠΈΠ½ΠΈΠΈ, Π° Π½Π°Π±Π΅Ρ€ΠΈ случайно lodab , Ρ‚ΠΎ это всС Π΅Ρ‰Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ исходная строка, которая Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚, ΠΊΡ€ΠΎΠΌΠ΅ опрСдСлСния ΠΌΠ΅Ρ‚ΠΊΠΈ.Запуск NASM с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки -w + orphan-labels заставит вас ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ вас, Ссли Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΊΡƒ Π² строкС Π±Π΅Π· ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ двоСточия.)

ДопустимыС символы Π½Π° этикСтках: Π±ΡƒΠΊΠ²Ρ‹, Ρ†ΠΈΡ„Ρ€Ρ‹, _ , $ , # , @ , ~ , . ΠΈ ? . ЕдинствСнныС символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС ΠΏΠ΅Ρ€Π²Ρ‹Π΅ символов ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° — Π±ΡƒΠΊΠ²Ρ‹, . (со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ: см. Π Π°Π·Π΄Π΅Π» 3.9), _ ΠΈ ? . Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ прСфикс $ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ слСдуСт Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π° Π½Π΅ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово; Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²Ρ‹ связываниС с опрСдСляСт символ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ eax , Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ см. $ eax Π² ΠΊΠΎΠ΄Π΅ NASM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ символ ΠΈΠ· рССстра.

ПолС инструкций ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Π½ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ: Pentium ΠΈ Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ P6, инструкции FPU, инструкции MMX ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ всС инструкции ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ прСфикс Π—ΠΠœΠžΠš , REP , REPE / REPZ ΠΈΠ»ΠΈ REPNE / REPNZ , Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ способ. Π―Π²Π½Ρ‹Π΅ прСфиксы Ρ€Π°Π·ΠΌΠ΅Ρ€Π° адрСса ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° A16 , A32 , O16 ΠΈ O32 ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ условии — ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡ… использования ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Π³Π»Π°Π²Π° 9. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя сСгмСнтный рСгистр ΠΊΠ°ΠΊ прСфикс инструкции: ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ es mov [bx], ax эквивалСнтно ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ mov [es: bx], ax .ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ послСдний синтаксис, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это согласуСтся с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ синтаксичСскими особСнностями языка, Π½ΠΎ для Ρ‚Π°ΠΊΠΈΡ… инструкций, ΠΊΠ°ΠΊ LODSB , Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ², Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сСгмСнта, Π½Π΅Ρ‚ чистого синтаксичСский способ ΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΡ€ΠΎΠΌΠ΅ es lodsb .

Для использования прСфикса инструкция Π½Π΅ трСбуСтся: прСфиксы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CS , A32 , LOCK ΠΈΠ»ΠΈ REPE ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС, ΠΈ NASM просто сгСнСрируСт Π±Π°ΠΉΡ‚Ρ‹ прСфикса.

Помимо собствСнно ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций, NASM Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ряд псСвдо-инструкций, описанных Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.2.

ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹: ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ рСгистрами, описываСтся просто ΠΈΠΌΠ΅Π½Π΅ΠΌ рСгистра (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ax , BP , EBX , cr0 : NASM Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ gas — ΡΡ‚ΠΈΠ»ΡŒ синтаксиса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠΌΠ΅Π½Π° рСгистров Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ с прСфиксом % ), ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ эффСктивными адрСса (см. Ρ€Π°Π·Π΄Π΅Π» 3.3), константы (Ρ€Π°Π·Π΄Π΅Π» 3.4) ΠΈΠ»ΠΈ выраТСния (Ρ€Π°Π·Π΄Π΅Π» 3.5).

Для инструкций с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой NASM ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр синтаксисов: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡ‹ с двумя ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ MASM, ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NASM Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π°Ρ информация ΠΎΠ±ΠΎ всСх Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ инструкции ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ B. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

        fadd st1; это устанавливаСт st0: = st0 + st1
        fadd st0, st1; Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ это

        fadd st1, st0; это устанавливаСт st1: = st1 + st0
        fadd to st1; Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Π΅Ρ‚ это
 

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ любая инструкция с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, которая ссылаСтся Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· прСфиксов DWORD , QWORD ΠΈΠ»ΠΈ TWORD Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° памяти ΠΎΠ½ относится.

3.2 ПсСвдо-инструкции

ПсСвдо-инструкции — это Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, хотя ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ машиной x86. инструкции, Π² любом случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»Π΅ инструкции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это самоС ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ мСсто для ΠΈΡ… размСщСния. Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ псСвдо-инструкции DB , DW , DD , DQ ΠΈ DT , ΠΈΡ… Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ RESB , RESW , RESD , RESQ ΠΈ REST , INCBIN ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΠΌΠ°Π½Π΄Π° EQU ΠΈ TIMES прСфикс.

3.2.1
DB ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅: объявлСниС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

DB , DW , DD , DQ ΠΈ DT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈ Π² MASM, для объявлСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ способы:

      db 0x55; просто Π±Π°ΠΉΡ‚ 0x55
      db 0x55,0x56,0x57; Ρ‚Ρ€ΠΈ Π±Π°ΠΉΡ‚Π° подряд
      db 'a', 0x55; ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы Π² порядкС
      db 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚', 13,10, '$'; Ρ‚Π°ΠΊ строковыС константы
      dw 0x1234; 0x34 0x12
      dw 'a'; 0x41 0x00 (это просто число)
      dw 'ab'; 0x41 0x42 (символьная константа)
      dw 'abc'; 0x41 0x42 0x43 0x00 (строка)
      dd 0x12345678; 0x78 0x56 0x34 0x12
      Π΄Π΄ 1.234567e20; константа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой
      dq 1.234567e20; ΠΏΠΎΠΏΠ»Π°Π²ΠΎΠΊ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности
      dt 1.234567e20; ΠΏΠΎΠΏΠ»Π°Π²ΠΎΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠΉ точности
 

DQ ΠΈ DT Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ числовыС константы ΠΈΠ»ΠΈ строковыС константы Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ².

3.2.2
RESB ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡ: ОбъявлСниС Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Π Π•Π‘Π‘ , Π Π•Π‘Π’ , RESD , RESQ ΠΈ REST ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для использования Π² сСкции BSS модуля: ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… дисковых пространств.ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π΅Ρ€Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой количСство Π±Π°ΠΉΡ‚ΠΎΠ², слов, Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов ΠΈΠ»ΠΈ всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Как ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π» 2.2.7, NASM Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ синтаксис MASM / TASM для рСзСрвирования Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ пространства ΠΏΡƒΡ‚Π΅ΠΌ записи DW? ΠΈΠ»ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Π²Π΅Ρ‰ΠΈ: Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ вмСсто. ΠžΠΏΠ΅Ρ€Π°Π½Π΄ Ρ‚ΠΈΠΏΠ° RESB псСвдо-инструкция — это критичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ : см. Ρ€Π°Π·Π΄Π΅Π» 3.8.

НапримСр:

Π±ΡƒΡ„Π΅Ρ€: resb 64; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 64 Π±Π°ΠΉΡ‚Π°
wordvar: resw 1; Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слово
realarray resq 10; массив ΠΈΠ· дСсяти Ρ€Π΅Π°Π»ΠΎΠ²
 
3.2.3
INCBIN : Π²ΠΊΠ»ΡŽΡ‡Π°Ρ внСшниС Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

INCBIN заимствован Ρƒ старой Амиги АссСмблСр DevPac: ΠΎΠ½ дословно Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€) для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ графичСских ΠΈ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. прямо Π² исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ³Ρ€Ρ‹. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· этих Ρ‚Ρ€ΠΈ способа:

    incbin "file.dat"; Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ вСсь Ρ„Π°ΠΉΠ»
    incbin "file.dat", 1024; ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 1024 Π±Π°ΠΉΡ‚Π°
    incbin "Ρ„Π°ΠΉΠ».dat ", 1024 512; ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 1024 ΠΈ
                                   ; фактичСски Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 512
 
3.2.4
EQU : ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ констант

EQU опрСдСляСт символ для Π΄Π°Π½Π½ΠΎΠΉ константы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ΠΏΡ€ΠΈ использовании EQU исходная строка Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΡƒ. ДСйствиС EQU Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ΅ имя ΠΌΠ΅Ρ‚ΠΊΠΈ равняСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π΅Π³ΠΎ (СдинствСнного) ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΏΠΎΠ·ΠΆΠ΅. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

message db 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€'
msglen equ $ -сообщСниС
 

опрСдСляСт msglen ΠΊΠ°ΠΊ константу 12. msglen Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ·ΠΆΠ΅. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ прСпроцСссора: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ msglen оцСниваСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ $ (см. Ρ€Π°Π·Π΄Π΅Π» 3.5 для объяснСния $ ) Π² ΠΏΡƒΠ½ΠΊΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π° Π½Π΅ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π½Π° Π½Π΅Π³ΠΎ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ, ΠΈ с использованиСм ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ $ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ отсчСта. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ для EQU Ρ‚Π°ΠΊΠΆΠ΅ являСтся критичСским Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Ρ€Π°Π·Π΄Π΅Π» 3.8).

3.2.5
TIMES : ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ инструкций ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ TIMES заставляСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π±Ρ‹Ρ‚ΡŒ собран нСсколько Ρ€Π°Π·. Π­Ρ‚ΠΎ частично присутствуСт ΠΊΠ°ΠΊ эквивалСнт NASM синтаксис DUP , ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ MASM-совмСстимым ассСмблСры, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

zerobuf: Ρ€Π°Π· 64 Π΄Π‘ 0
 

ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ; Π° Π²ΠΎΡ‚ TIMES ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π΅Π΅ Ρ‡Π΅ΠΌ это. АргумСнт TIMES — это Π½Π΅ просто числовая константа, Π½ΠΎ числовоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ , Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ

Π±ΡƒΡ„Π΅Ρ€: db 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€'
        Ρ€Π°Π· 64 - $ + Π±ΡƒΡ„Π΅Ρ€ db ''
 

, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ²Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ мСста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π±ΡƒΡ„Π΅Ρ€ Π΄ΠΎ 64.Ну Π½Π°ΠΊΠΎΠ½Π΅Ρ† Ρ‚ΠΎ, TIMES ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ инструкциям, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΠΌ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹:

        ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 100 мовсб
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ эффСктивной Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π· 100 resb 1 ΠΈ resb 100 , Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ послСдний Π±ΡƒΠ΄Π΅Ρ‚ собираСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 100 Ρ€Π°Π· быстрСС Π·Π° счСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ структуры ассСмблСр.

ΠžΠΏΠ΅Ρ€Π°Π½Π΄ для TIMES , ΠΊΠ°ΠΊ ΠΈ для EQU ΠΈ RESB ΠΈ Π΄Ρ€ΡƒΠ·ΡŒΡ, это критичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (Ρ€Π°Π·Π΄Π΅Π» 3.8).

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ TIMES нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ макросы: ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ РАЗ обрабатываСтся послС ΠΌΠ°ΠΊΡ€ΠΎ-Ρ„Π°Π·Ρ‹, Ρ‡Ρ‚ΠΎ позволяСт Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ TIMES , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ выраТСния, ΠΊΠ°ΠΊ 64 - $ + Π±ΡƒΡ„Π΅Ρ€ , ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ строка ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ слоТный макрос, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ прСпроцСссор % rep Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°.

3.3 Π”Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ адрСса

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ адрСс — это любой ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ инструкции, которая ссылаСтся Π½Π° объСм памяти.Π£ эффСктивных адрСсов Π² NASM ΠΎΡ‡Π΅Π½ΡŒ простой синтаксис: ΠΎΠ½ΠΈ состоят ΠΈΠ· выраТСния, ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ адрСс, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках. НапримСр:

wordvar dw 123
        mov ax, [wordvar]
        mov ax, [wordvar + 1]
        mov ax, [es: wordvar + bx]
 

ВсС, Ρ‡Ρ‚ΠΎ Π½Π΅ соотвСтствуСт этой простой систСмС, Π½Π΅ являСтся допустимой ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ссылка Π² NASM, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ es: wordvar [bx] .

Π‘ΠΎΠ»Π΅Π΅ слоТныС эффСктивныС адрСса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с адрСсами Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄ΠΈΠ½ рСгистр, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅:

        mov eax, [ebx * 2 + ecx + смСщСниС]
        mov ax, [bp + di + 8]
 

NASM ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π°Π»Π³Π΅Π±Ρ€Ρƒ ΠΏΠΎ этим эффСктивным адрСсам, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выглядят Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌΠΈ, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹:

    mov eax, [ebx * 5]; собираСтся ΠΊΠ°ΠΊ [ebx * 4 + ebx]
    mov eax, [ΠΌΠ΅Ρ‚ΠΊΠ°1 * 2-ΠΌΠ΅Ρ‚ΠΊΠ°2]; Ρ‚.Π΅. [ΠΌΠ΅Ρ‚ΠΊΠ°1 + (ΠΌΠ΅Ρ‚ΠΊΠ°1-ΠΌΠ΅Ρ‚ΠΊΠ°2)]
 

НСкоторыС Ρ„ΠΎΡ€ΠΌΡ‹ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ адрСса ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ собранной Ρ„ΠΎΡ€ΠΌΡ‹; Π² Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ‚Π°ΠΊΠΈΡ… случаСв NASM Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.НапримСр, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ для 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… эффСктивных адрСсов [eax * 2 + 0] ΠΈ [eax + eax] , ΠΈ NASM ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ послСднСС Π½Π° Ρ‚ΠΎΠΌ основании, Ρ‡Ρ‚ΠΎ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ трСбуСтся Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° для хранСния нуля ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

NASM ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ подсказки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ [eax + ebx] ΠΈ [ebx + eax] Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ; это ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ [esi + ebp] ΠΈ [ebp + esi] ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ рСгистры сСгмСнтов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Однако Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ NASM ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эффСктивный адрСс Π² конкрСтная Ρ„ΠΎΡ€ΠΌΠ° с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов BYTE , WORD , DWORD ΠΈ ΠΠžΠ‘ΠŸΠ›Π˜Π’ . Если Ρ‚Π΅Π±Π΅ Π½Π°Π΄ΠΎ [eax + 3] для сборки с использованиСм Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова ΠΏΠΎΠ»Π΅ смСщСния вмСсто ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ NASM, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ [dword eax + 3] . Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ NASM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ΅ смСщСниС для нСбольшого значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ Π²ΠΈΠ΄Π΅Π» Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ (см. Ρ€Π°Π·Π΄Π΅Π» 3.8 для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°) с использованиСм [Π±Π°ΠΉΡ‚ eax + смСщСниС] . Π’ Π²ΠΈΠ΄Π΅ особыС случаи, [byte eax] Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ [eax + 0] с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌ смСщСниСм, ΠΈ [dword eax] Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ словом смСщСниС нуля. Π’ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ [eax] Π±ΡƒΠ΄Π΅Ρ‚ кодируСтся Π±Π΅Π· поля смСщСния.

Π€ΠΎΡ€ΠΌΠ°, описанная Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π°Π±Π·Π°Ρ†Π΅, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Π°, Ссли Π²Ρ‹ пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² 32-Π±ΠΈΡ‚Π½ΠΎΠΌ сСгмСнтС ΠΈΠ· 16-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Для большСго ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этом см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠ± адрСсации смСшанного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. (Ρ€Π°Π·Π΄Π΅Π» 9.2). Π’ частности, Ссли Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ с извСстным смСщСниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ большС, Ρ‡Π΅ΠΌ умСстится Π² 16-Π±ΠΈΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это смСщСниС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова, nasm Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ слова смСщСния.

Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ NASM Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ [eax * 2] Π½Π° [eax + eax] , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это позволяСт полю смСщСния ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ мСсто; Π½Π° самом Π΄Π΅Π»Π΅, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ раздСлится [eax * 2 + смСщСниС] Π² [eax + eax + offset] . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ с этим ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова NOSPLIT : [nosplit eax * 2] заставит [eax * 2 + 0] Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сгСнСрировано Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ.

3,4 ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹

NASM ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° констант: числовыС, ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅, строка ΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ.

3.4.1 ЧисловыС константы

Числовая константа — это просто число. NASM позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ числа Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… основаниях счислСния Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ суффикс H , Q ΠΈ B для ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ, Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ систСмы, ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ прСфикс 0x для ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π² стилС C, ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ прСфикс $ Π·Π° ΡˆΠ΅ΡΡ‚ΠΈΠ³Ρ€Π°Π½Π½ΠΈΠΊ Π² стилС Borland Pascal.ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ прСфикс $ выполняСт Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ прСфикс ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² (см. Ρ€Π°Π·Π΄Π΅Π» 3.1), поэтому ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ с прСфиксом $ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ†ΠΈΡ„Ρ€Π° послС $ , Π° Π½Π΅ Π±ΡƒΠΊΠ²Π°.

НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

        mov ax, 100; дСсятичный
        mov ax, 0a2h; ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ
        mov ax, $ 0a2; снова ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ: трСбуСтся 0
        mov ax, 0xa2; ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Π΅Ρ‰Π΅ Ρ€Π°Π·
        mov ax, 777q; Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ
        mov ax, 10010011b; Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ
 
3.4.2 Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы

Бимвольная константа состоит Π΄ΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… символов, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π’ΠΈΠΏ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния для NASM, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ константа Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Бимвольная константа, содСрТащая Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа, Π±ΡƒΠ΄Π΅Ρ‚ упорядочСна с порядок ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ порядка Π±Π°ΠΉΡ‚ΠΎΠ²: Ссли Π²Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚Π΅

          mov eax, 'abcd'
 

, Ρ‚ΠΎ сгСнСрированная константа Π½Π΅ 0x61626364 , Π½ΠΎ 0x64636261 , Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π±Ρ‹ Π²Ρ‹ Π·Π°Ρ‚Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² памяти, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ abcd скорСС Ρ‡Π΅ΠΌ dcba .Π­Ρ‚ΠΎ Ρ‚ΠΎΠΆΠ΅ чувство Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° константы, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ Pentium CPUID инструкция (см. Ρ€Π°Π·Π΄Π΅Π» Π’.4.34).

3.4.3 Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ константы

Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ константы ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… псСвдо-инструкций, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ сСмСйство DB ΠΈ Π˜ΠΠšΠ‘Π˜Π .

Бтроковая константа выглядит ΠΊΠ°ΠΊ символьная константа, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅. это рассматриваСтся ΠΊΠ°ΠΊ конкатСнация ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… констант максимального Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для условия. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ эквивалСнтны:

      db 'ΠΏΡ€ΠΈΠ²Π΅Ρ‚'; строковая константа
      db 'h', 'e', ​​'l', 'l', 'ΠΎ'; эквивалСнтныС ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы
 

И ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ эквивалСнты:

      dd 'ninechars'; строковая константа Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова
      dd 'Π΄Π΅Π²ΡΡ‚ΡŒ', 'char', 's'; становится трСмя Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ словами
      db 'ninechars', 0,0,0; ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ выглядит
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Π² качСствС ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° для db , a константа Ρ‚ΠΈΠΏΠ° 'ab' обрабатываСтся ΠΊΠ°ΠΊ строка константа, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° достаточно короткая, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ символьной константой, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС db 'ab' Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт, Ρ‡Ρ‚ΠΎ ΠΈ db 'a' , Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π³Π»ΡƒΠΏΠΎ.По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ, Ρ‚Ρ€Π΅Ρ…ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ константы ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ строки, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ Π½Π° dw .

3.4.4 ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой допустимы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для DD , DQ ΠΈ Π”Π’ . Они Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅: Ρ†ΠΈΡ„Ρ€Ρ‹, Π·Π°Ρ‚Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ°, Π·Π°Ρ‚Π΅ΠΌ, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹, Π·Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ E , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСпСни. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ NASM ΠΌΠΎΠ³ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ dd 1 , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½ΡƒΡŽ константу, ΠΈ Π΄Π΄ 1.0 , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ константу с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.

НСкоторыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

      dd 1.2; Π»Π΅Π³ΠΊΠΈΠΉ
      dq 1.e10; 10 000 000 000
      dq 1.e + 10; синоним 1.e10
      dq 1.e-10; 0,000 000 000 1
      dt 3.141592653589793238462; Пи
 

NASM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ арифмСтичСскиС дСйствия Π²ΠΎ врСмя компиляции с константами с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ NASM спроСктирован Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, хотя ΠΎΠ½ всСгда Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° процСссорах x86, сам ассСмблСр ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² любой систСмС с компилятором ANSI C.ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ассСмблСр Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, способного ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ числа Intel Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, ΠΈ поэтому для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ NASM ΠΌΠΎΠ³ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ собствСнный ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ассСмблСра с ΠΎΡ‡Π΅Π½ΡŒ нСбольшой Π²Ρ‹Π³ΠΎΠ΄ΠΎΠΉ.

3.5 ВыраТСния

ВыраТСния Π² NASM ΠΏΠΎ синтаксису Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ выраТСниям Π² C.

NASM Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для ΠΎΡ†Π΅Π½ΠΊΠΈ выраТСния Π²ΠΎ врСмя компиляции: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ NASM ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСмы Π²ΠΏΠΎΠ»Π½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ выраТСния ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ рСгистры ΠΈ поэтому стараСмся ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ цСлочислСнноС ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ всСгда Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. NASM Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ANSI C: Ρƒ вас всСгда Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 32 Π±ΠΈΡ‚Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹.

NASM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΎΠΊΠ΅Π½Π° Π² выраТСниях, Ρ‡Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ вычислСния. Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ сборки: $ ΠΈ $$ ΠΆΠ΅Ρ‚ΠΎΠ½ΠΎΠ². $ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ сборки Π² Π½Π°Ρ‡Π°Π»Π΅ строки, содСрТащСй Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅; поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ бСсконСчный Ρ†ΠΈΠΊΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ JMP Ρ€ΡƒΠ±. $$ оцСниваСтся Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°; Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ Π² Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ($ - $$) . обСспСчиваСт ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ XOR.

3.5.3
ΠΈ : ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ И

ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ AND.

3.5.4
<< ΠΈ >> : ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сдвига

<< Π΄Π°Π΅Ρ‚ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ, просто ΠΊΠ°ΠΊ ΠΈ Π² C. Π˜Ρ‚Π°ΠΊ, 5 << 3 оцСниваСтся ΠΊΠ°ΠΊ 5 ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ Π½Π° 8 ΠΈΠ»ΠΈ 40. >> Π΄Π°Π΅Ρ‚ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²Π΅Ρ€Π½ΠΎ; Π² NASM Ρ‚Π°ΠΊΠΎΠΉ сдвиг Ρ€Π°Π²Π΅Π½ , всСгда Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΠΈΡ‚Ρ‹ сдвинутыС с Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°, Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½ΡƒΠ»Π΅ΠΌ, Π° Π½Π΅ Π·Π½Π°ΠΊ-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΡΡ‚Π°Ρ€ΡˆΠ΅Π³ΠΎ Π±ΠΈΡ‚Π°.

3.5.5
+ ΠΈ - : ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ слоТСния ΠΈ вычитания

+ ΠΈ - ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ слоТСниС ΠΈ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅.

3.5.6
* , /, // , % ΠΈ %% : ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅

* - ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ умноТСния. / ΠΈ // ΠΎΠ±Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ дСлСния: / - Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ // - Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅.По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ, % ΠΈ %% ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈ подписанныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ соотвСтствСнно.

NASM, ΠΊΠ°ΠΊ ΠΈ ANSI C, Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ подписанного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ.

Π’Π°ΠΊ ΠΊΠ°ΠΊ символ % ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ прСпроцСссор макроса, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ подписанныС ΠΈ нСподписанныС Π—Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ слСдуСт ΠΏΡ€ΠΎΠ±Π΅Π», Π³Π΄Π΅ Π±Ρ‹ ΠΎΠ½ΠΈ Π½ΠΈ появлялись.

3.5.7 Π£Π½Π°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹:
+ , - , ~ ΠΈ SEG

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ с Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ NASM: ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ. - ΠΎΡ‚Ρ€ΠΈΡ†Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄, + Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ (это прСдусмотрСно для симмСтрия с - ), ~ вычисляСт Π΄ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ своСго ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, ΠΈ SEG прСдоставляСт адрСс сСгмСнта своСго ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ объяснСно Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.6).

3,6

SEG ΠΈ WRT

ΠŸΡ€ΠΈ написании Π±ΠΎΠ»ΡŒΡˆΠΈΡ… 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° нСсколько сСгмСнтов, часто Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ адрСс символа.NASM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ SEG ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для выполнСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ SEG Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сСгмСнтных оснований символа, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ сСгмСнтных оснований ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл смСщСниС символа. Π˜Ρ‚Π°ΠΊ, ΠΊΠΎΠ΄

        mov ax, seg symbol
        mov es, ax
        mov bx, символ
 

Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ ES: BX с Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° символ символ .

Π’Π΅Ρ‰ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТными, Ρ‡Π΅ΠΌ это: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 16-Π±ΠΈΡ‚Π½Ρ‹Π΅ сСгмСнты ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒΡΡ, ΠΈΠ½ΠΎΠ³Π΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡΠΎΡΠ»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ символ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±Π°Π·Π° сСгмСнта отличаСтся ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ.NASM позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, использованиС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова WRT (со ссылкой Π½Π°). Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ

        mov ax, weird_seg; weird_seg - это Π±Π°Π·Π° сСгмСнта
        mov es, ax
        mov bx, символ wrt weird_seg
 

для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ES: BX с Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ эквивалСнтСн, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° символ символ .

NASM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ дальниС (мСТсСгмСнтныС) Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса сСгмСнт Π²Ρ‹Π·ΠΎΠ²Π°: смСщСниС , Π³Π΄Π΅ сСгмСнт ΠΈ смСщСны ΠΎΠ±Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ нСпосрСдствСнныС цСнности.Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ дальнюю ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ любой ΠΈΠ·

        Π²Ρ‹Π·ΠΎΠ² (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сСгмСнта): ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°
        Π²Ρ‹Π·ΠΎΠ² weird_seg: (ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° wrt weird_seg)
 

(ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ для ясности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ синтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ инструкций. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ½ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.)

NASM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ синтаксис , ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° дальнСго Π²Ρ‹Π·ΠΎΠ²Π° ΠΊΠ°ΠΊ синоним ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΉ. JMP Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ CALL Π² этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ дальний ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… Π² сСгмСнтС Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

        символ DW, символ seg
 

NASM Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ синонима для этого, хотя Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ изобрСсти ΠΎΠ΄ΠΈΠ½, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ макропроцСссор.

3,7

STRICT : Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‰Π°Ρ оптимизация

ΠŸΡ€ΠΈ сборкС с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, установлСнным Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ 2 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ (см. Ρ€Π°Π·Π΄Π΅Π» 2.1.16), NASM Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцификаторы Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ( BYTE , WORD , DWORD , QWORD ΠΈΠ»ΠΈ TWORD ), Π½ΠΎ даст ΠΈΠΌ минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€.ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово STRICT ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π·Π°ΠΏΡ€Π΅Ρ‚Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅. Для НапримСр, ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ ΠΈ Π² BITS 16 Π Π΅ΠΆΠΈΠΌ,

        Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ dword 33
 

кодируСтся трСмя Π±Π°ΠΉΡ‚Π°ΠΌΠΈ 66 6A 21 , Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ

        Ρ‚ΠΎΠ»ΠΊΠ°Ρ‚ΡŒ строгий dword 33
 

кодируСтся ΡˆΠ΅ΡΡ‚ΡŒΡŽ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ, с нСпосрСдствСнным ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠΌ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ слово 66 68 21 00 00 00 .

ΠŸΡ€ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ гСнСрируСтся ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ (ΡˆΠ΅ΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ²) нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово STRICT использовалось ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

3.8 ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ выраТСния

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ NASM состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π΄Π²ΡƒΡ…ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ассСмблСр; Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ TASM ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΠΎΠ½ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ Π΄Π²Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° сборки. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ достаточно слоТны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ… ΠΈΠ»ΠΈ большС ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ².

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° всСго собранного ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСго ΠΊΠΎΠ΄Π° Π·Π½Π°Π΅Ρ‚ всС символ адрСса, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ относится ΠΊΠΎΠ΄. Π˜Ρ‚Π°ΠΊ, ΠΎΠ΄Π½Π° Π²Π΅Ρ‰ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ NASM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ, - это ΠΊΠΎΠ΄, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ зависит ΠΎΡ‚ значСния символа, объявлСнного послС ΠΊΠΎΠ΄Π° Π² вопрос.НапримСр,

        Ρ€Π°Π· (ΠΌΠ΅Ρ‚ΠΊΠ°- $) db 0
label: db 'Π“Π΄Π΅ я?'
 

АргумСнт РАЗ Π² этом случаС ΠΌΠΎΠ³ Π±Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ; NASM ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ строки TIMES ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²ΠΈΠ΄ΠΈΡ‚ это. Он Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ€Π³Π½Π΅Ρ‚ слСгка ΠΏΠ°Ρ€Π°Π΄ΠΎΠΊΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄

        Ρ€Π°Π· (ΠΌΠ΅Ρ‚ΠΊΠ° - $ + 1) db 0
label: db 'Π’Π•ΠŸΠ•Π Π¬ Π³Π΄Π΅ я?'
 

, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для TIMES Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅Π²Π΅Ρ€Π΅Π½ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ!

NASM ΠΎΡ‚Π²Π΅Ρ€Π³Π°Π΅Ρ‚ эти ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ критичСской Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСтся ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅, ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ зависят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ символов.АргумСнт ΠΏΡ€ΠΎΡ‚ΠΈΠ² TIMES - критичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅; для По Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ сСмСйства RESB псСвдо-инструкции Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ критичСскими выраТСниями.

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ выраТСния ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… контСкстах: рассмотритС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

                mov ax, symbol1
symbol1 equ symbol2
symbol2:
 

На ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ NASM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символ1 , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ символ1 опрСдСляСтся ΠΊΠ°ΠΊ Ρ€Π°Π²Π½ΠΎΠ΅ symbol2 , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ NASM Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π».На Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ, поэтому, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ встрСчаСт строку mov ax, symbol1 , Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ для этого, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ всС Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚ цСнности символ1 . Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС ΠΎΠ½ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ EQU снова ΠΈ смоТСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ symbol1 , Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ ΠΏΠΎΠ·Π΄Π½ΠΎ.

NASM ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, опрСдСляя ΠΏΡ€Π°Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ EQU ΠΊΠ°ΠΊ критичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, поэтому ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символа 1 Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄.

Π•ΡΡ‚ΡŒ связанная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, связанная с прямыми ссылками: рассмотритС это Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°.

        mov eax, [ebx + смСщСниС]
смСщСниС экв 10
 

NASM Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ инструкции mov eax, [ebx + offset] Π±Π΅Π· знания значСния смСщСниС . Он Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ смСщСниС достаточно ΠΌΠ°Π»ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ»Π΅ смСщСния ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ созданиСм Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ адрСса; насколько ΠΎΠ½ Π·Π½Π°Π΅Ρ‚, Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅, смСщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ символом Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΌ сСгмСнтС, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ полная чСтырСхбайтовая Ρ„ΠΎΡ€ΠΌΠ°.ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ инструкции для размСщСния Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΉ части адрСса. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ приняв это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ инструкция большая, поэтому ΠΊΠΎΠ΄, сгСнСрированный Π² этом случаС, Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ малСнький, ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ. Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² смСщСниС ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ использованиСм ΠΈΠ»ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°ΠΉΡ‚Π° Π² Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ адрСсС ΠΏΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ [Π±Π°ΠΉΡ‚ EBX + смСщСниС] .

3.9 ΠœΠ΅ΡΡ‚Π½Ρ‹Π΅ ярлыки

NASM удСляСт особоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ символам, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌΡΡ с Ρ‚ΠΎΡ‡ΠΊΠΈ.Π­Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΊΠ° Π½Π°Ρ‡Π°Π»ΠΎ с ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ рассматриваСтся ΠΊΠ°ΠΊ локальная ΠΌΠ΅Ρ‚ΠΊΠ° , которая ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ связан с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ нСлокальной ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

label1; ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄

.пСтля
        ; Π΅Ρ‰Π΅ ΠΊΠΎΠ΄

        jne .loop
        Ret

label2; ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄

.пСтля
        ; Π΅Ρ‰Π΅ ΠΊΠΎΠ΄

        jne .loop
        Ret
 

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ JNE инструкция ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° строку нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΄Π²Π° опрСдСлСния .ΠΏΠ΅Ρ‚Π»ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… связано с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ нСлокальной ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ.

Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° локальной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ заимствована ΠΈΠ· старой Amiga. ассСмблСр DevPac; ΠΎΠ΄Π½Π°ΠΊΠΎ NASM ΠΈΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ дальшС, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ доступ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… частСй ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ достигаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ , ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΊΡƒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ нСлокальной ΠΌΠ΅Ρ‚ΠΊΠΈ: ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ .loop , ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ символа ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ label1.пСтля , Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ опрСдСляСт символ с ΠΈΠΌΠ΅Π½Π΅ΠΌ label2.loop . Π’Π°ΠΊ, Ссли Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

label3; Π΅Ρ‰Π΅ ΠΊΠΎΠ΄
        ; ΠΈ Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ

        jmp label1.loop
 

Иногда ΠΏΠΎΠ»Π΅Π·Π½ΠΎ - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² макросС - ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠ°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ которая Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ локальной ΠΌΠ΅Ρ‚ΠΊΠΈ. Π’Π°ΠΊΠΎΠΉ ярлык Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ опрСдСлСниям ΠΈ ссылкам ΠΊ, мСстныС Π»Π΅ΠΉΠ±Π»Ρ‹; ΠΈ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ макрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Π½Π΅ Π·Π½Π°Π» ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ названия Π»Π΅ΠΉΠ±Π»Π°.ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ NASM прСдставляСт Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΊΠΈ, Ρ‡Ρ‚ΠΎ, вСроятно, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² опрСдСлСниях макросов: Ссли ΠΌΠ΅Ρ‚ΠΊΠ° начинаСтся со ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ прСфикса .. @ , Π·Π°Ρ‚Π΅ΠΌ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠΊ. Π˜Ρ‚Π°ΠΊ, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄

label1:; Π½Π΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π»Π΅ΠΉΠ±Π»
.мСстный:                         ; это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ label1.local
.. @ foo:; это особый символ
label2:; Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π»Π΅ΠΉΠ±Π»
.мСстный:                         ; это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ label2.мСстный

        jmp .. @ foo; это ΠΏΡ€Ρ‹Π³Π½Π΅Ρ‚ Π½Π° Ρ‚Ρ€ΠΈ строчки Π²Π²Π΅Ρ€Ρ…
 

NASM ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, .. Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ…ΠΎΠ΄Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄Π° obj (см. Ρ€Π°Π·Π΄Π΅Π» 6.2.6).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π° | ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Π³Π»Π°Π²Π° | Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ | ИндСкс

404 | ΠœΠΈΠΊΡ€ΠΎ Ѐокус

  • ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ услуги

    Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ свою ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΡƒΡŽ ИВ-срСду.


  • ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ услуги ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ
  • Аналитика ΠΈ большиС Π΄Π°Π½Π½Ρ‹Π΅

    ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Π²Π°ΠΌ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ создания стоимости ИВ ΠΈ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ сотрудничСство ΠΌΠ΅ΠΆΠ΄Ρƒ ИВ-подраздСлСниями, прилоТСниями ΠΈ слуТбами бСзопасности.

  • ΠšΠΈΠ±Π΅Ρ€Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

    ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ Π²Π°ΠΌ быстрСС Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ΅ прСимущСство благодаря гибкости прСдприятия.

  • DevOps

    Π£ΡΠΊΠΎΡ€ΡŒΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±Π»Π°ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ услуг ΠΏΠΎ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, трансформации ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΡŽ.

  • ΠšΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ создания стоимости IT4IT

    Π‘Π»ΡƒΠΆΠ±Ρ‹ управлСния прилоТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ экспСртам, Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‰ΠΈΠΌΡΡ Π² вашСй срСдС.

  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ доставкой ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

    Услуги стратСгичСского консалтинга для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ трансформации.

  • Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» мобильного прилоТСния

    ΠŸΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сцСнариСв использования с прСдустановлСнными интСграциями Π² ΠΏΠΎΡ€Ρ‚Ρ„Π΅Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Micro Focus, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сцСнарий использования

  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΌ ΠΎΠ±Π»Π°ΠΊΠΎΠΌ ΠΈ брокСрскиС услуги

    Услуги экспСртной Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ бСзопасности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ быстро ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ бСзопасности Micro Focus.

  • Автоматизация Π¦ΠžΠ”

    Π‘Π»ΡƒΠΆΠ±Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ управлСния услугами, которая ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ доставку, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² условиях Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… поставщиков.

  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ опСрациями

    АнализируйтС большиС Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΡ‰ΠΈΡ‚Π΅ нСструктурированныС Π΄Π°Π½Π½Ρ‹Π΅.

  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ услугами

    АнализируйтС большиС Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΡ‰ΠΈΡ‚Π΅ нСструктурированныС Π΄Π°Π½Π½Ρ‹Π΅.

  • Vertica

    АнализируйтС большиС Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΡ‰ΠΈΡ‚Π΅ нСструктурированныС Π΄Π°Π½Π½Ρ‹Π΅.

  • Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ аутСнтификация ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°

    ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ услуги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° Ρ€Ρ‹Π½ΠΎΠΊ Π±Π΅Π· ΡƒΡ‰Π΅Ρ€Π±Π° для качСства.

  • УправляСмыС слуТбы

    АнализируйтС большиС Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΡ‰ΠΈΡ‚Π΅ нСструктурированныС Π΄Π°Π½Π½Ρ‹Π΅.