Что делает $$ со сборкой NASM x86?
Мне было довольно любопытно, как загружаются компьютеры, поэтому я нашел некоторые ресурсы в Интернете, чтобы научить себя. Я нашел это из gitbook и у меня было несколько вопросов. Я пошел дальше и аннотировал фрагмент кода
[BITS 16]
boot:
mov al, '!'
mov ah, 0x0e
mov bh, 0x00
mov bl, 0x07 ;What are these parameters to the interrupt call?
int 0x10 ;Bios interrupt call
jmp $ ;<---- jmp $ means jump here, will this be an infinite loop?
;^ Or will this continue onto all the 0 bytes?
times 510-($-$$) db 0 ;<---- declare 510-($-$$) 0 bytes. What is $$?
;Here we have the two magic bytes to end
db 0x55
db 0xaa
Я пытался искать в документах NASM на $$ и здесь, но нашел только документы на $. Вот то, что я имею до сих пор. Разбирая скомпилированную сборку я заметил несколько вещей.
00000000 <.data>:
0: b0 21 mov al,0x21 ;Character to type out
2: b4 0e mov ah,0xe ;Sets mode to teletype
4: b7 00 mov bh,0x0 ;Unused?
6: b3 07 mov bl,0x7 ;Color
8: cd 10 int 0x10 ;syscall with ^ params
a: eb fe jmp 0xa ;Infinite loop?
...
1fc: 00 00 add BYTE PTR [bx+si],al
;0x1fe - 0xa = 500 bytes, so times 510-($-$$) = 500?
1fe: 55 push bp
1ff: aa stos BYTE PTR es:[di],al
Любая помощь будет принята с благодарностью.