ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² assembler. ΠΏΠΎΠ»Π½Ρ‹ΠΉ курс ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° асмС ΠΎΡ‚ ][

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

8.1.4 c32.mac: Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ макросы для 32-ΡƒΡ… Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ интСрфСйса с Π‘ΠΈ

Π€Π°ΠΉΠ» макроса c32.mac Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² Π°Ρ€Ρ…ΠΈΠ² NASM, Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³
misc. Π’ этом Ρ„Π°ΠΉΠ»Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ 3 макроса: proc,
arg
ΠΈ endproc. Они Π²Π²Π΅Π΄Π΅Π½Ρ‹ для использования
Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ Π² стилС Π‘ΠΈ, ΠΈ ΠΎΠ½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅
для соблюдСния ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ассСмблСрной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ этот Π½Π°Π±ΠΎΡ€ макросов ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅:

          proc _proc32 
%$i       arg 
%$j       arg 
          mov eax, 
          mov ebx, 
          add eax, 
          endproc

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ опрСдСляСт _proc32 ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ
с двумя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ (i) являСтся integer
ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΉ (j) являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° integer.
ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° возвращяСт i + *j.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ макрос arg ΠΏΡ€ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠΈ
содСрТит Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС EQU, которая Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅
опрСдСляСт %$i ΠΊΠ°ΠΊ смСщСниС ΠΎΡ‚ BP.
ΠŸΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ контСкстно-Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊ контСксту,
сохраняСмому Π² контСкстном стСкС макросом proc
ΠΈ удаляСмому ΠΎΡ‚Ρ‚ΡƒΠ΄Π° макросом endproc), поэтому
Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано Ρ‚ΠΎ ΠΆΠ΅ самоС имя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ,
Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ этого Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ.

arg ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ
Ρ€Π°Π·ΠΌΠ΅Ρ€ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Если Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ Π·Π°Π΄Π°Π½, ΠΎΠ½ прСдполагаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 4-Π΅ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ
Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΈΠΏΠ° int
ΠΈΠ»ΠΈ указатСлями.

8.2 НаписаниС раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для NetBSD/FreeBSD/OpenBSD
ΠΈ Linux/ELF

ELF Π·Π°ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ старый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ a.out для
Линукса, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ (position-independent code
PIC), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅.
NASM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ особСности ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для ELF,
поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ раздСляСмый Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Линукс ELF Π½Π° NASM.

NetBSD, ΠΈ Π΅Π³ΠΎ Π±Π»ΠΈΠ·ΠΊΠΈΠ΅ родствСнники FreeBSD ΠΈ OpenBSD, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄,
Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ a.out.
NASM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ это ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ aoutb для скомпилированных
Ρ„Π°ΠΉΠ»ΠΎΠ², поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для BSD Π½Π° NASM Ρ‚ΠΎΠΆΠ΅.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ PIC (ΠΏΠ΅Ρ€ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄)
Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, дСлая
ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅
мСсто Π² адрСсном пространствС выполняСмого процСсса. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ содСрТимоС
сСкции ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π΅ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ мСста Π² памяти, ΠΊΡƒΠ΄Π° ΠΎΠ½Π°
Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ вашСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΈΠΌ Π²ΠΎΡ‚ способом:

          mov eax,        ; ΠžΠ¨Π˜Π‘ΠšΠ

ВмСсто этого, Π»ΠΈΠ½ΠΊΠΎΠ²Ρ‰ΠΈΠΊ прСдоставляСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ глобальной
Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ смСщСний (global offset table), ΠΈΠ»ΠΈ просто Π“Π’Π‘ (GOT); Π“Π’Π‘ располоТСна
Π½Π° постоянном расстоянии ΠΎΡ‚ ΠΊΠΎΠ΄Π° вашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, поэтому Ссли Π²Ρ‹ смоТСтС ΡƒΠ·Π½Π°Ρ‚ΡŒ
ΠΊΡƒΠ΄Π° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° ваша Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ осущСствляСтся ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ CALL
ΠΈ POP), Π²Ρ‹ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс Π“Π’Π‘, ΠΈ Π·Π°Ρ‚Π΅ΠΌ
Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ адрСс вашСй ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· сгСнСрированной Π»ΠΈΠ½ΠΊΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ записи Π² Π“Π’Π‘.

БСкция data PIC (пСрСмСщяСмый ΠΊΠΎΠ΄) раздСляСмой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚
ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сСкция Π΄Π°Π½Π½Ρ‹Ρ… доступна для записи, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚
Π±Ρ‹Ρ‚ΡŒ скопирована Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ Ρ‚ΠΎ Π½ΠΈ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ
Π² страницы ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, поэтому ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ скопирована, ΠΎΠ½Π°
ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ способ для доступа Π²
сСкции Π΄Π°Π½Π½Ρ‹Ρ…, особо Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎΠ± этом (Π½ΠΎ посмотритС Π² прСдостСрСТСния).

ΠŸΠΎΡ‡Π΅ΠΌΡƒ слСдуСт ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ язык ассСмблСра?

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

Π’Π°ΠΊ Π·Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° Π΅Π³ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅? По ряду вСских ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΈ Π²ΠΎΡ‚ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ…: ассСмблСр β€” это ΠΊΡ€Π°Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ камСнь, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ покоится всС бСсконСчноС пространство программирования, начиная ΠΎΡ‚ роТдСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ процСссора. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΈΠ·ΠΈΠΊ ΠΌΠ΅Ρ‡Ρ‚Π°Π΅Ρ‚ Ρ€Π°Π·Π³Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΉΠ½Ρƒ строСния всСлСнной, Π½Π°ΠΉΡ‚ΠΈ эти Π·Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ Π½Π΅Π΄Π΅Π»ΠΈΠΌΡ‹Π΅ (Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅) элСмСнты, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° состоит, Π½Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡΡΡŒ лишь смутным ΠΎ Ρ‚ΠΎΠΌ прСдставлСниСм ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ. АссСмблСр ΠΆΠ΅ ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚Π° пСрвичная матСрия, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ состоит всСлСнная процСссора. Он β€” Ρ‚ΠΎΡ‚ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄. А ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡƒΠΌΠ΅Π½ΠΈΠ΅ просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΡƒ программисту, Π΄Π°ΠΆΠ΅ Ссли Π½ΠΈΠΊΠΎΠ³Π΄Π° Π² ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ½ Π½Π΅ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π½ΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΉ ассСмблСрной строчки. НСльзя ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΌ, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ имСя понятия ΠΎΠ± элСмСнтарной Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ΅. На ΠΊΠ°ΠΊΠΎΠΌ Π±Ρ‹ языкС Π²Ρ‹ Π½ΠΈ писали ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ хотя Π±Ρ‹ Π² ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ… ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ процСссор, исполняя вашС Π²Ρ‹ΡΠΎΡ‡Π°ΠΉΡˆΠ΅Π΅ ΠΏΠΎΠ²Π΅Π»Π΅Π½ΠΈΠ΅. Если Ρ‚Π°ΠΊΠΎΠ³ΠΎ понимания Π½Π΅Ρ‚, программист Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π±Π΅Π·Π΄ΡƒΠΌΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ всС доступныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ вСдая, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ Ρ‚Π²ΠΎΡ€ΠΈΡ‚.

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

Π˜Π½Ρ‹ΠΌΠΈ словами, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ процСссоры, ассСмблСр Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ.

Π’ этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΈ язык ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ассСмблСра ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ. Зная ΠΎΠ΄ΠΈΠ½ язык ассСмблСра, Ρ‚Ρ‹ с успСхом моТСшь Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ² лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ справочной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

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

SIMD Parallelism

The XMM registers can do arithmetic on floating point values one operation at a time (scalar)
or multiple operations at a time (packed). The operations have the form:

xmmreg_or_memory, xmmreg

For floating point addition, the instructions are:

Β Β Β Β Β  do 2 double-precision additions in parallel (add packed double)
do just one double-precision addition, using the low 64-bits of the register (add scalar double)
do 4 single-precision additions in parallel (add packed single)
do just one single-precision addition, using the low 32-bits of the register (add scalar single)

Here’s a function that adds four floats at once:

add_four_floats.asm

; void add_four_floats(float x, float y)
; x += y for i in range(0..4)

        global   add_four_floats
        section  .text

add_four_floats:
        movdqa   xmm0,             ; all four values of x
        movdqa   xmm1,             ; all four values of y
        addps    xmm0, xmm1             ; do all four sums in one shot
        movdqa   , xmm0
        ret

and a caller:

test_add_four_floats.c

#include <stdio.h>
void add_four_floats(float[], float[]);

int main() {
    float x[] = {-29.750, 244.333, 887.29, 48.1E22};
    float y[] = {29.750,  199.333, -8.29,  22.1E23};
    add_four_floats(x, y);
    printf("%f\n%f\n%f\n%f\n", x, x, x, x);
    return 0;
}

Also see this nice
little x86 floating-point slide deck from Ray Seyfarth.

2.1.13 ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ окруТСния NASM

Если Π²Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния NASM, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ
Π΅Π΅ ΠΊΠ°ΠΊ список Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅
«настоящих» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ,
Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для описания стандартных ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² поиска Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², помСстив
Π² ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ NASM ΠΊΠ»ΡŽΡ‡ -i.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ раздСляСтся ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, поэтому Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -s
-ic:\nasmlib
Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π°. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -dNAME=Β»my nameΒ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ воспринято Ρ‚Π°ΠΊ,
ΠΊΠ°ΠΊ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ (Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π») ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ процСссор NASMΠ° соотвСтствСнно
Π½Π΅ ΠΏΠΎΠΉΠΌΠ΅Ρ‚ Π΄Π²ΡƒΡ… бСссмыслСнных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² -dNAME=Β»my
ΠΈ nameΒ».

Для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этого Π²Π²Π΅Π΄Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: Ссли Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
NASM Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ символом, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ Π·Π½Π°ΠΊΠΎΠΌ «минус»,
NASM Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ этот символ ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΎΠΏΡ†ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅!-s!-ic:\nasmlib ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ NASM
эквивалСнтно -s -ic:\nasmlib, Π½ΠΎ Π·Π°Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ !-dNAME=Β»my
nameΒ»
Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

2.2 ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ MASM: ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ

Если Π²Ρ‹ использовали для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ MASM,
ΠΈΠ»ΠΈ TASM Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ совмСстимости с MASM, ΠΈΠ»ΠΈ a86,
ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ приводятся основныС отличия синтаксиса MASM
ΠΈ NASM. Если ΠΆΠ΅ Π²Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ использовали Ρ€Π°Π½ΡŒΡˆΠ΅ MASM, просто пропуститС этот
Ρ€Π°Π·Π΄Π΅Π» ΠΈ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ дальшС.

6.5.3 elf-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ GLOBAL

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ELF ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ глобальном символС,
Ρ‡Π΅ΠΌ просто Π΅Π³ΠΎ адрСс: ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ символа, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ. Π­Ρ‚ΠΎ
сдСлано Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для удобства ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅, это просто Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°
ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ раздСляСмой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Для задания Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ
NASM ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ GLOBAL.

ΠŸΠΎΡΡ‚Π°Π²ΠΈΠ² послС ΠΈΠΌΠ΅Π½ΠΈ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ ΠΈ написав function
ΠΈΠ»ΠΈ data (object являСтся
синонимом data), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ являСтся
глобальная пСрСмСнная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, строка

          global hashlookup:function, hashtable:data

экспортируСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ символ hashlookup ΠΊΠ°ΠΊ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π° hashtable ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ….

ПослС Π²Π²ΠΎΠ΄Π° спСцификатора Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ числового выраТСния
(ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ ссылки) Ρ€Π°Π·ΠΌΠ΅Ρ€ ассоциированных
с символом Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

          global hashtable:data (hashtable.end - hashtable) 
hashtable: 
          db this,that,theother  ; здСсь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ 
.end:

Π­Ρ‚ΠΎ заставит NASM автоматичСски ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ
Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ELF.

ОбъявлСниС Ρ‚ΠΈΠΏΠ° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… символов трСбуСтся ΠΏΡ€ΠΈ написании раздСляСмых
Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² .

8.1.3 Доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π‘ΠΈ-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ
ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π‘ΠΈ, Π²Π°ΠΌ достаточно ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΠΊ GLOBAL
ΠΈΠ»ΠΈ EXTERN. (ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΈΠΌΠ΅Π½Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ,
ΠΊΠ°ΠΊ это описано Π² .) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ,
Π‘ΠΈ-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ int i ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ
доступны ΠΈΠ· ассСмблСра ΠΊΠ°ΠΊ

          extern _i 
          mov eax,

И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ваши собствСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ доступны Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅
ΠΊΠ°ΠΊ int j, Π΄Π΅Π»Π°ΠΉΡ‚Π΅ это Ρ‚Π°ΠΊ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ассСмблируСтС
это Π² _DATA сСгмСнтС, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ):

          global _j 
_j        dd 0

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π‘ΠΈ-массивами Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнтов этого массива.
НапримСр, int ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 4 Π±Π°ΠΉΡ‚Π°,
поэтому Ссли Π² Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ объявлСн массив ΠΊΠ°ΠΊ int a,
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ a Ρ‚Π°ΠΊ: mov
ax,
. ( Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ 12 полчаСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ умноТСния Π½ΠΎΠΌΠ΅Ρ€Π° Π² массивС,
3 Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ элСмСнта массива, 4.) Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² 32-Ρ… разрядных Π‘ΠΈ-компиляторах:
1 для char, 2 для short,
4 для int, long и float,
ΠΈ 8 для double. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, содСрТащий 32-ΡƒΡ… Π±ΠΈΡ‚Π½Ρ‹ΠΉ
адрСс ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ 4 Π±Π°ΠΉΡ‚Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ структурам языка Π‘ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ смСщСниС ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ
адрСса структуры Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ вас поля. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто это Π΄Π΅Π»Π°Ρ‚ΡŒ, конвСртируя
опрСдСлСния Π‘ΠΈ-структур Π² опрСдСлСния структур NASM (STRUC),
ΠΈΠ»ΠΈ вычисляя ΠΎΠ΄Π½ΠΎ смСщСниС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΎΡ‰Π΅, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ руководство ΠΏΠΎ Π²Π°ΡˆΠ΅ΠΌΡƒ компилятору
языка Π‘ΠΈ ΠΈ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ структуры Π΄Π°Π½Π½Ρ‹Ρ…. NASM Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ…
Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠΉ Ρ‡Π»Π΅Π½ΠΎΠ² структуры Π² Π΅Π³ΠΎ макросС STRUC,
поэтому Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ выравнивания ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π‘ΠΈ-компилятор
Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ подобная структура

struct { 
    char c; 
    int i; 
} foo;

ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ 5 Π±Π°ΠΉΡ‚, Π° 8, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ int ΠΏΠΎΠ»Π΅
Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½ΠΎ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ слова. Однако, эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ
Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² Π‘ΠΈ-компиляторС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ #pragma
Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹, поэтому ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ°ΠΊ ваш компилятор это Π΄Π΅Π»Π°Π΅Ρ‚.

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

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

На Π·Π°Ρ€Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ эры ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π­Π’Πœ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈ Ρ†Π΅Π»Ρ‹Π΅ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ ΠΈ вСсили Π½Π΅ ΠΎΠ΄Π½Ρƒ Ρ‚ΠΎΠ½Π½Ρƒ, имСя объСм памяти с Π²ΠΎΡ€ΠΎΠ±ΡŒΠΈΠ½Ρ‹ΠΉ ΠΌΠΎΠ·Π³, Π° Ρ‚ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ мСньшС. ЕдинствСнным способом программирования Π² Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π±Ρ‹Π»ΠΎ Π²Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° нСпосрСдствСнно Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚ΡƒΠΌΠ±Π»Π΅Ρ€Ρ‹, ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΊΠΈ ΠΈ ΠΊΠ½ΠΎΠΏΠΎΡ‡ΠΊΠΈ. Число Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³Π»ΠΎ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сотСн ΠΈ росло ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ услоТнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Встал вопрос ΠΎΠ± экономии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π΅Π½Π΅Π³. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ стало появлСниС Π² ΠΊΠΎΠ½Ρ†Π΅ сороковых Π³ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Π²Π΅ΠΊΠ° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ транслятора-ассСмблСра, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ просто ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° чСловСчСском языкС ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь процСсс программирования, ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ, ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ ΠΈΡ… ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ. Π—Π°Ρ‚Π΅ΠΌ появились языки высокого уровня ΠΈ компиляторы (Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π° с Π±ΠΎΠ»Π΅Π΅ понятного Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ языка) ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ (исполнитСли написанной Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π»Π΅Ρ‚Ρƒ). Они ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈΡΡŒ, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π»ΠΈΡΡŒ β€” ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, дошло Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ просто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡ‹ΡˆΠΊΠΎΠΉ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ассСмблСр β€” это машинно ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΎΠ΄ΠΈΠ½ Π½Π° ΠΎΠ΄ΠΈΠ½. ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ Π΅Π³ΠΎ полная Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° β€” язык программирования Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ поколСния (послС машинного ΠΊΠΎΠ΄Π°). ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ассСмблСра ΠΎΠ΄ΠΈΠ½ Π² ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ процСссора, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ процСссоров со своим собствСнным Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‚ΠΎ, соотвСтствСнно, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ разновидности, ΠΈΠ»ΠΈ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Ρ‹, языка ассСмблСра. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ использованиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° «язык ассСмблСра» ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎ сущСствовании Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ языка Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня ΠΈΠ»ΠΈ хотя Π±Ρ‹ стандарта Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ языки. Π•Π³ΠΎ Π½Π΅ сущСствуСт. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ языка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ написана конкрСтная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΡΡ‚ΡŒ, для ΠΊΠ°ΠΊΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΎΠ½Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π΅ языка написана. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ассСмблСр привязан ΠΊ устройству процСссора, Π° Ρ‚ΠΈΠΏ процСссора ТСстко опрСдСляСт Π½Π°Π±ΠΎΡ€ доступных ΠΊΠΎΠΌΠ°Π½Π΄ машинного языка, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ассСмблСрС Π½Π΅ пСрСносимы Π½Π° ΠΈΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ассСмблСр всСго лишь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, написанная Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ программисту Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный ассСмблСр, Ρ‡Ρ‚ΠΎ часто ΠΈ происходит

На самом Π΄Π΅Π»Π΅ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ Π²Π°ΠΆΠ½ΠΎ, язык ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ассСмблСра ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΏΠΎΠ½ΡΡ‚ΡŒ сам ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ процСссора, ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π½Π΅ составит Ρ‚Ρ€ΡƒΠ΄Π° ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ассСмблСр, Π½ΠΎ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ процСссор со своим Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄

РСализация

Windows

Π’ качСствС ассСмблСра для NASM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ nasm 2.11.02, Π² качСствС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° β€” gcc 4.6.2 ΠΈΠ· MinGW (gcc 4.8.1 ΠΈΠ· MinGW64 Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ x64) ΠΈΠ»ΠΈ ld 2.22 ΠΈΠ· MinGW (ld 2.23.2 ΠΈΠ· MinGW64 Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ x64).

ВСрсии ассСмблСров ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠ² для NASM ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Ρ‹ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ для курса «АрхитСктура Π­Π’Πœ ΠΈ язык ассСмблСра» Π’ΠœΠš ΠœΠ“Π£ 1-Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ gdb 7.4 (7.6 для x64) ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° MinGW ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ измСнСнная для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° макросов Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.

Начиная с вСрсии 3.0, Π² SASM Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ fasm 1.71.39 ΠΈ gas 2.23.1 ΠΈΠ· MinGW (gas 2.23.2 ΠΈΠ· MinGW64).

АссСмблСр MASM Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² сборку ΠΈΠ·-Π·Π° Π΅Π³ΠΎ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ MASM Π½Π° Π’Π°Ρˆ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с сайта https://www.masm32.com/ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΠΈ Π΄ΠΎ ассСмблСра (ml.exe, ΠΏΡƒΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Β«C:/masm32/bin/ml.exeΒ») ΠΈ Π΄ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° (link.exe, ΠΏΡƒΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Β«C:/masm32/bin/link.exeΒ») Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… полях Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅Β».

Под Windows SASM послС установки сразу Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅.

Linux

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Linux Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ установлСны: nasm ΠΈΠ»ΠΈ gas (Ссли ΠΈΡ… планируСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, fasm ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² сборку), gcc, gdb (для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ).

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈ Π΅Ρ‘ использовании ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² Wiki ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° GitHub.

Базовая тСория

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ запускаСт процСссор ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° β€” это ΠΊΠΎΠ΄ BIOS (ΠΈΠ»ΠΈ ΠΆΠ΅ UEFI, Π½ΠΎ здСсь я Π±ΡƒΠ΄Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ BIOS), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Β«Π·Π°ΡˆΠΈΡ‚Β» Π² памяти матСринской ΠΏΠ»Π°Ρ‚Ρ‹ (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ β€” ΠΏΠΎ адрСсу 0xFFFFFFF0).

Π‘Ρ€Π°Π·Ρƒ послС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ BIOS запускаСт Power-On Self-Test (POST) β€” самотСстированиС послС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. BIOS провСряСт Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ памяти, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ устройства, провСряСт рСгистры, опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½ΠΎΠ³ΠΎ диска, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ОБ. Π—Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ диск β€” это диск (ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒ), Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ послСдниС 2 Π±Π°ΠΉΡ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сСктора (ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ сСктором подразумСваСтся ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 512 Π±Π°ΠΉΡ‚ накопитСля, Ρ‚.ΠΊ. 1 сСктор = 512 Π±Π°ΠΉΡ‚) Ρ€Π°Π²Π½Ρ‹ 55 ΠΈ AA (Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΎΡ‡Π½Ρ‹ΠΉ диск Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½, BIOS Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΅Π³ΠΎ 512 Π±Π°ΠΉΡ‚ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎ адрСсу 0x7c00 ΠΈ пСрСдаст ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссору ΠΏΠΎ этому адрСсу.

Π‘Π°ΠΌΠΎ собой, Π² эти 512 Π±Π°ΠΉΡ‚ Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π² этот сСктор ΠΊΠ»Π°Π΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ основной ΠΊΠΎΠ΄ ОБ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

Π‘ самого Π½Π°Ρ‡Π°Π»Π° процСссор Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Real Mode (= 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ лишь с 16-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ памяти, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 1 Мб памяти. Но Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ здСсь Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ состояниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ управлСния Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ (ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° взята ΠΎΡ‚ΡΡŽΠ΄Π°).

ПослСднСС, ΠΎ Ρ‡Π΅ΠΌ стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ практичСской Ρ‡Π°ΡΡ‚ΡŒΡŽ β€” прСрывания. ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ β€” это особый сигнал (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ устройства Π²Π²ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° ΠΈΠ»ΠΈ ΠΌΡ‹ΡˆΡŒ) процСссору, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ исполнСниС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрывания. ВсС адрСса ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² прСрывания находятся Π² Interrupt Descriptor Table (IDT) Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡŽ соотвСтствуСт свой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания. НапримСр, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ вызываСтся ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅, процСссор останавливаСтся, Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ адрСс ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠΉ инструкции, сохраняСт всС значСния своих рСгистров (Π½Π° стСкС) ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° прСрывания. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ заканчиваСтся, процСссор восстанавливаСт значСния рСгистров ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΠΊ ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠΉ инструкции ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° экран Π² BIOS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ 0x10 (ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚), Π° для оТидания наТатия клавиши β€” ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ 0x16. По сути, это всС прСрывания, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ понадобятся здСсь.

Π’Π°ΠΊΠΆΠ΅, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прСрывания Π΅ΡΡ‚ΡŒ своя подфункция, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ повСдСния. Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° экран Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (!), Π½ΡƒΠΆΠ½ΠΎ Π² рСгистр AH занСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0x0e. Помимо этого, Ρƒ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ свои ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. 0x10 ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ значСния ΠΈΠ· ah (опрСдСляСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΠΎΠ΄Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ) ΠΈ al (символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ вывСсти). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ,

Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран символ β€˜x’. 0x16 ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ah (конкрСтная подфункция) ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π² рСгистр al Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ клавиши. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ 0x0.

АссСмблСр β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ искусство?

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Ρ‚Π°ΠΊ, всС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π² Ρ‡ΡŒΠΈΡ… Ρ€ΡƒΠΊΠ°Ρ… ΠΎΠ½ находится. АссСмблСр β€” это ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ элСмСнт ΠΌΠΈΡ€Π° процСссора, ΠΈΠ· сочСтаний этих элСмСнтов складываСтся Π΅Π³ΠΎ Π΄ΡƒΡˆΠ°, Π΅Π³ΠΎ самосознаниС. Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ вся ΠΌΡƒΠ·Ρ‹ΠΊΠ°, написанная Π² истории чСловСчСства, состоит ΠΈΠ· сочСтаний сСми Π½ΠΎΡ‚, Ρ‚Π°ΠΊ ΠΈ сочСтаниС ассСмблСрных ΠΊΠΎΠΌΠ°Π½Π΄ наполняСт ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ ΠΌΠΈΡ€ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Тизнью. ΠšΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚ лишь Ρ‚Ρ€ΠΈ Π°ΠΊΠΊΠΎΡ€Π΄Π° β€” это «попса», ΠΊΠΎΠΌΡƒ ΠΆΠ΅ извСстна вся ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° β€” это классика.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Π½Π°ΡƒΠΊΠ° Ρ‚Π°ΠΊ ΠΆΠ°ΠΆΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²Ρ‹Π΅ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ ΠΈ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Π² свои Ρ€ΡƒΠΊΠΈ Π½Π΅ΡƒΠ»ΠΎΠ²ΠΈΠΌΡ‹ΠΉ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠΈ? Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π°Π΄ Π½Π΅ΠΉ Π²Π»Π°ΡΡ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅ ΠΏΠΎ своСй Π²ΠΎΠ»Π΅, ΡΡ‚Π°Ρ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π’Π²ΠΎΡ€Ρ†Π° ВсСлСнной. Π’ Ρ‡ΡŒΠΈ Ρ€ΡƒΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ такая Π²Π»Π°ΡΡ‚ΡŒ β€” это Π΅Ρ‰Π΅ вопрос. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π½Π°ΡƒΠΊΠΈ, Π² ΠΌΠΈΡ€Π΅ программирования Ρ‚Π°ΠΉΠ½ Π½Π΅Ρ‚, Π½Π°ΠΌ извСстны ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΈ, Π΅Π³ΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Ρ‚Π° Π²Π»Π°ΡΡ‚ΡŒ Π½Π°Π΄ процСссором, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°ΠΌ Π΄Π°Π΅Ρ‚ Π·Π½Π°Π½ΠΈΠ΅ ассСмблСра.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° языкС ассСмблСра поднялось Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ искусства, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΠΈΡ‡ΡŒ Π΅Π³ΠΎ красоту, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽΡΡ Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ† ΠΈ Π½ΡƒΠ»Π΅ΠΉ. Как ΠΈ Π² любой отрасли чСловСчСской Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Ρ‚ΡŒ ΠœΠ°ΡΡ‚Π΅Ρ€ΠΎΠΌ. И Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€Ρ‹, образования, Ρ‚Ρ€ΡƒΠ΄Π° ΠΈ, Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‚ΠΎ, сколько Π΄ΡƒΡˆΠΈ Π°Π²Ρ‚ΠΎΡ€ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π² своС Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠ΅.

АссСмблСр ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€

НС Ρ‚Π°ΠΊ Π΄Π°Π²Π½ΠΎ ДТСймс ΠšΡΠΌΠ΅Ρ€ΠΎΠ½ выпустил Π² свСт 3D-Π²Π΅Ρ€ΡΠΈΡŽ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Β«Π’Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€Π°Β», ΠΈ Π² качСствС интСрСсного историчСского Ρ„Π°ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΈΠ±ΠΎΡ€Π³Π°-убийцы…

ΠšΠ°Π΄Ρ€ ΠΈΠ· Ρ„ΠΈΠ»ΡŒΠΌΠ° Β«Π’Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€Β»

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Β«Π·Ρ€Π΅Π½ΠΈΠ΅Β» Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€Π°, Π° слСва Π½Π° Π½Π΅ΠΌ отобраТаСтся ассСмблСрный листинг. Будя ΠΏΠΎ Π½Π΅ΠΌΡƒ, Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹ΠΉ Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π° процСссорС MOS Technology 6502 Π»ΠΈΠ±ΠΎ Π½Π° MOS Technology 6510. Π­Ρ‚ΠΎΡ‚ процСссор Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² 1975 Π³ΠΎΠ΄Ρƒ, использовался Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… Apple ΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, Π½Π° Π·Π½Π°ΠΌΠ΅Π½ΠΈΡ‚Ρ‹Ρ… ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… приставках Ρ‚ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Atari 2600 ΠΈ Nintendo Entertainment System (Ρƒ нас Π±ΠΎΠ»Π΅Π΅ извСстной ΠΊΠ°ΠΊ Dendy). ИмСл лишь Ρ‚Ρ€ΠΈ 8-разрядных рСгистра: А-аккумулятор ΠΈ Π΄Π²Π° индСксных рСгистра X ΠΈ Y. Π’Π°ΠΊΠΎΠ΅ ΠΌΠ°Π»ΠΎΠ΅ ΠΈΡ… количСство ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 256 Π±Π°ΠΉΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти (Ρ‚Π°ΠΊ называСмая нулСвая страница) ΠΌΠΎΠ³Π»ΠΈ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈ фактичСски использовались Π² качСствС 8-разрядных ΠΈΠ»ΠΈ 16-разрядных рСгистров. Π£ Π΄Π°Π½Π½ΠΎΠ³ΠΎ процСссора Π±Ρ‹Π»ΠΎ 13 Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² адрСсации Π½Π° всСго 53 ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π£ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€Π° ΠΈΠ΄Π΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° инструкций LDA-STA-LDA-STA… Π’ сСмСйствС 6502 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ состояли Ρ‡ΡƒΡ‚ΡŒ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ· LDA/LDY/LDX/STA/STX/STY:

Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись Π² ΠΏΠΎΡ€Ρ‚Ρ‹ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ этими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΏΠΎΠ»Π½Π΅ осмыслСнный Π²ΠΈΠ΄, Π° Π½Π΅ прСдставляСт собой Π±Π΅ΡΡ‚ΠΎΠ»ΠΊΠΎΠ²ΡƒΡŽ Ρ„Π°Π½Ρ‚Π°Π·ΠΈΡŽ сцСнариста: MOS Technology 6502 / БистСма ΠΊΠΎΠΌΠ°Π½Π΄.

6.5.4 elf-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ COMMON

ELF позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ трСбования ΠΊ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΡŽ ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ дСлаСтся
ΠΏΡƒΡ‚Π΅ΠΌ помСщСния числа (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π²ΠΎΠΉΠΊΠΈ) послС ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ отдСлСния этого числа (ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ) Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ. НапримСр,
массив Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… слов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½ ΠΏΠΎ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ словам:

          common dwordarray 128:4

Π­Ρ‚Π° строка ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ массив Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 128 Π±Π°ΠΉΡ‚ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½
ΠΏΠΎ 4-Π±Π°ΠΉΡ‚Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅.

6.6 aout: ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
a.out Линукс

Π€ΠΎΡ€ΠΌΠ°Ρ‚ aout Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ a.out
Π² Ρ„ΠΎΡ€ΠΌΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ Линукс систСмами. (Он отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² a.out магичСским числом Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ…
Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚Π°Ρ… Ρ„Π°ΠΉΠ»Π°. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ a.out,
Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ NetBSD, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ-нСзависимый ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рСализация
Линукс Π½Π΅ Π·Π½Π°Π΅Ρ‚).

Π€ΠΎΡ€ΠΌΠ°Ρ‚ a.out ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ…
Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ .o.

Π­Ρ‚ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ простой. Он Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ символов,
Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SEG ΠΈΠ»ΠΈ WRT
ΠΈ Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… стандартных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ
Ρ‚Ρ€ΠΈ стандартных сСкции с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ .text, .data ΠΈ
.bss.

6.7 aoutb: ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
a.out NetBSD/FreeBSD/OpenBSD

Π€ΠΎΡ€ΠΌΠ°Ρ‚ aoutb Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ a.out
Π² Ρ„ΠΎΡ€ΠΌΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ BSD-ΠΊΠ»ΠΎΠ½Π°ΠΌΠΈ UNIX: NetBSD, FreeBSD ΠΈ OpenBSD.
Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π΅ отличаСтся ΠΎΡ‚ aout
Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ магичСского числа Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚Π°Ρ… Ρ„Π°ΠΉΠ»Π°. Однако Ρ„ΠΎΡ€ΠΌΠ°Ρ‚
ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ (ΠΊΠ°ΠΊ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ elf) ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ-нСзависимый
ΠΊΠΎΠ΄, поэтому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для написания раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ
BSD.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° aoutb ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
.o.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ символов ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ стандартных
сСкции с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ .text, .data ΠΈ .bss.
НСсмотря Π½Π° это, для обСспСчСния Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΉ Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ-нСзависимом
ΠΊΠΎΠ΄Π΅ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ использованиС WRT Ρ‚Π°ΠΊ ΠΆΠ΅,
ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ elf. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ это описано
Π² .

aoutb, ΠΊΠ°ΠΊ ΠΈ elf
ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ GLOBAL:
см. .

6.8 as86: ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹
as86 Линукс

16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ассСмблСр Линукс as86 ΠΈΠΌΠ΅Π΅Ρ‚ свой собствСнный
нСстандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π₯отя Π΅Π³ΠΎ компаньон ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ld86
Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ°ΠΌ a.out,
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ as86
ΠΈ ld86, всС ΠΆΠ΅ Π½Π΅ являСтся a.out.

NASM Π½Π° всякий случай ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠ°ΠΊ as86.
Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° .o.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ as86 это ΠΎΡ‡Π΅Π½ΡŒ простой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ
Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния NASM). Он Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ символов,
Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SEG ΠΈ WRT,
ΠΈ Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ стандартных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ². Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ
Ρ‚Ρ€ΠΈ стандартных сСкции с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ .text, .data ΠΈ
.bss.

6.9 rdf: ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Π΅ динамичСскиС
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ rdf создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ RDOFF.
RDOFF это Β«Π΄ΠΎΠΌΠΎΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉΒ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ вмСстС
с NASM ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Π² сСбС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ структуру ассСмблСра.

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

Архив Unix NASM ΠΈ Π°Ρ€Ρ…ΠΈΠ² DOS с исходниками ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ rdoff,
содСрТащий Π½Π°Π±ΠΎΡ€ RDOFF-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚: RDF-ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ статичСских Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ,
ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, Π΄Π΅Π»Π°ΡŽΡ‰Π°Ρ Π΄Π°ΠΌΠΏ RDF-Ρ„Π°ΠΉΠ»Π°, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π°Ρ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ RDF-исполнимый
Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ Линукс.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ rdf ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стандартныС сСкции
с имСнами .text, .data и .bss.

8.2.2 НахоТдСниС Π²Π°ΡˆΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ИмСя Π“Π’Π‘, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ для получСния адрСсов Π²Π°ΡˆΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ постоянно находится Π² сСкциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ объявили;
ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ..gotoff
ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ WRT. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

          lea eax,

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ myvar wrt ..gotoff вычисляСтся, Π·Π°Ρ‚Π΅ΠΌ
раздСляСмая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° линкуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ стало смСщСниСм локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ
myvar ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π“Π’Π‘ ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΊ
EBX, ΠΊΠ°ΠΊ это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ настоящий
адрСс myvar Π² EAX.

Если ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ GLOBAL Π±Π΅Π· указания
ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, ΠΎΠ½ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚
Π±Ρ‹Ρ‚ΡŒ экспортированы ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»Π°. Они Π±ΡƒΠ΄ΡƒΡ‚
ΠΏΠΎ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π² вашСй ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… сСкциях data ΠΈ BSS,
поэтому доступ ΠΊ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…,
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ описанный Ρ€Π°Π½Π΅Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ..gotoff.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈΠ·-Π·Π° спСцифики Π² BSD a.out
Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° описатСли этого ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ
нСлокальноС имя Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ сСкции, Ρ‡Ρ‚ΠΎ ΠΈ адрСс, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°

NASM ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… x86-совмСстимых процСссоров. ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, ΠΌΠΎΠΆΠ½ΠΎ бСспрСпятствСнно ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» для Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² NASM состоит ΠΈΠ· Π΄Π²ΡƒΡ… этапов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉΒ β€” ассСмблированиС, Π²Ρ‚ΠΎΡ€ΠΎΠΉΒ β€” ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°. На этапС ассСмблирования создаётся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π’ Π½Ρ‘ΠΌ содСрТится ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Π² соотвСтствии с исходным ΠΊΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, символы) ΠΏΠΎΠΊΠ° Π½Π΅ привязаны ΠΊ адрСсам памяти. На этапС ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ создаётся исполняСмый Ρ„Π°ΠΉΠ» (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°). ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ связываСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… модулях, послС Ρ‡Π΅Π³ΠΎ всСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ адрСса памяти ΠΈΠ»ΠΈ обСспСчиваСтся ΠΈΡ… динамичСскоС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Для ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² исполняСмыС Π² Windows ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свободный бСсплатно распространяСмый ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ alink(для 64-Ρ… Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ GoLink), Π° Π² LinuxΒ β€” ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ld, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ Π² любой вСрсии этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

Для ассСмблирования Ρ„Π°ΠΉΠ»Π° Π½ΡƒΠΆΠ½ΠΎ ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

nasm -f format filename -o output

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

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² нСсколько ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ², благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ инструкции ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΄ΠΎ объявлСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠΊ.

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… условного ΠΈ бСзусловного () ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Π»ΠΈΠΆΠ½ΠΈΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ²Β β€” . ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ возмоТности ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°Π²Ρ‹ΡΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° лишний Π±Π°ΠΉΡ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° . Π‘ вСрсии 0.98.09b Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠΏΡ†ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ -Ox, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ автоматичСски ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ инструкций ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, Π² Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях ΠΈΠ»ΠΈ Π±Π΅Π· Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΡ†ΠΈΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ исходного ΠΊΠΎΠ΄Π°.

ΠžΡ†Π΅Π½ΠΈΡ‚Π΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ
Π Π΅ΠΉΡ‚ΠΈΠ½Π³ Π°Π²Ρ‚ΠΎΡ€Π°
5
ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»
АндрСй Измаилов
Наш экспСрт
Написано статСй
116
Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ