Что делает $$ со сборкой 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

Любая помощь будет принята с благодарностью.

0 ответов

Другие вопросы по тегам