2013-07-21 9 views

ответ

1

Это приведет к зависанию программы, перейдя в бесконечный цикл, потому что jmp hang прыгает в себя.

+0

Я только что отредактировал код. – saplingPro

+1

Линия 'times' просто заполняет файл 512 байтами. Часто вы увидите 'times 510 - ($ - $$) db 0', за которым следует' db 55', 'db 0AAh' -« подпись загрузки ». «$» Означает (примерно) «здесь» - текущее местоположение в сборке. «$$» означает «начало раздела», поэтому «($ - $$)» означает «длина кода до сих пор». Как указывает Натан, вы обычно хотите, чтобы «jmp зависал» первым. Не предполагается, что выполняется строка 'times'! –

+1

Это заставляет меня помнить о добрых днях программирования mbr :) –

0

Этот код используется для заполнения оставшейся программы 0 (что, если im не ошибочно, является чем-то вроде инструкции «добавить»). Обычно он используется в загрузочном коде, чтобы поместить подпись mbr в конец, и так как в терминах «код» он не должен выполняться.

В заключение:

  • Это не выполняет остановку.

  • Он используется, чтобы заполнить файл программы с «00», пока она не достигнет 512 байт

  • Чтобы остановить программу делать что-то вроде (в выходной файл ассемблера Он ничего не делает во время выполнения!):

    halt: 
        jmp halt 
    
+0

Возможно, вам нужна настоящая инструкция 'hlt'. Это «останавливает» процессор, но только до тех пор, пока не произойдет прерывание. Это позволяет процессору немного охладиться. Если там есть «cli», прерывание никогда не должно происходить ... но NMI (не маскируемое прерывание) все еще может, поэтому мы все еще хотим, чтобы «jmp halt» показывался как нитрид галлия. –

Смежные вопросы