deck_bsd Ответов: 1

АСМ выражение непонимание со временем


Привет,

Кто-нибудь может объяснить мне эти строки ?

buffer: db 'hello, world'
times 64-$+buffer db '_'


результат : "Здравствуй, мир____________________________________________________"

Я понимаю эти строки ниже, это имеет смысл (адрес, где мы стоим минус адрес начала программы = размер программы в байтах) :

times 510 - ($-$$) db 0


Но в первом выражении как $+buffer может составить 52 ?? я просто не понимаю, почему а + не а - ?

Спасибо за помощь заранее :)

Что я уже пробовал:

я пытался найти какое-то объяснение в google или где-то еще, но безуспешно

1 Ответов

Рейтинг:
6

Richard MacCutchan

buffer: db 'hello, world'
times 64-$+buffer db '_'

Предположим, что местоположение буфера равно 1000, тогда местоположение времени (обозначенное знаком$) равно 1012.
Так:
64 - 1012 = -948
-948 + 1000 = 52

Это выражение эффективно вычисляет количество тире, добавляемых к предыдущей строке, чтобы получить в общей сложности 64 символа.