co właściwie robi instrukcja montażu "db"?

Jestem trochę zdezorientowany co do tego, co Instrukcja ASM db faktycznie robi. Czytałem, że definiuje bajt, ale co to właściwie znaczy? Czy przenosi wartość w określone miejsce w pamięci, czy też predefiniuje wartość przed złożeniem kodu?

 52
Author: r0nk, 2013-06-30

2 answers

Dosłownie umieszcza ten bajt w pliku wykonywalnym.

 69
Author: user541686,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-30 05:59:05

Z podręcznika ARM:

〚label: DB DB expression 〚, expression ...〛

Instrukcja DB inicjalizuje pamięć z co najmniej jednym bajtem. etykieta jest symbolem, któremu przypisany jest adres bieżącej pamięci. wyrażenie jest wartością bajtu zapisaną w pamięci. Każde wyrażenie może być symbolem, ciągiem znaków lub wyrażeniem.

Więc, to stwierdzenie zrobić następujące:

  • ustawia bieżącą wartość adresu pamięci dla zmiennej "label"
  • ustaw wartości "bajtowe" z wyrażenia do bieżącego i następnego adresu pamięci ("wyrażenia" mogą być jednym bajtem lub wieloma bajtami - długi łańcuch)

Po operacji, jeśli porównamy nowy "aktualny" adres pamięci z adresem pamięci przed operacją (przytrzymaj przez etykietę), możemy obliczyć długość listy "expression" (ponieważ każdy znak jest jednym bajtem i to jest takie samo jak zwiększenie 1 w adresie pamięci).

Aby asembler obliczył odległość pomiędzy tutaj ($ w niektórych asemblerach) a Etykieta działa wokół dowolnej instrukcji lub pseudo-instrukcji, a nie tylko db i wygląda tak w niektórych językach asemblacji. Składnia dyrektywy Exact różni się w zależności od asemblera (ARMASM, NASM, MASM, FASM, itp. wszyscy używają db do emitowania literalnych bajtów do wyjścia, ale różnią się szczegółami equ lub czymś innym.)

msg: db "Hello, World!", 0x10, 0
msglen equ $ - msg                @ includes the 0 terminator
 0
Author: K-Laboratory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-03 13:01:01