2015-08-12 4 views
0

У меня возникает несколько проблем при отладке загрузочного сектора в bochs.Отладка загрузочного сектора в Bochs, как работает jmpi, и процессор вычисляет адрес команды

При отладке загрузочного сектора в Bochs, Bochs отладчик первой паузы в

(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b  ; ea5be000f0 

Q1: Является ли эта инструкция jmpf 0xf000:e05b инструкция скачка в последних 16 байтах памяти?

Q2: Какая инструкция по адресу 0xf000:e05b?

Тогда мы хотим, чтобы код остановки по адресу 0x7c00

<bochs:1> b 0x7c00 
<bochs:2> c 
(0) Breakpoint 1, 0x0000000000007c00 in ??() 
Next at t=61419250 
(0) [0x000000007c00] 0000:7c00 (unk. ctxt): jmpf 0x07c0:0005 ; ea0500c007 
<bochs:3> s         
Next at t=61419251 
(0) [0x000000007c05] 07c0:0005 (unk. ctxt): mov ax, cs   ; 8cc8 

Эти строки кода генерируются jmpi go,#0x7c00 go: move ax,cx.

Q3: инструкция jmpi переводится в jmpf и машинный код ea, правильно ли это?

Q4: 0x0005 - это смещение метки go. Когда вычисляется это смещение? Во время соединения?

ea0500c007 - это машинный код jmpf. ea - инструкция, 07c0: 0005 - это операнд (потому что x86 - выделенный endian). Этот код составляет 5 байтов.

Q5: Как процессор считывает эту инструкцию и как ПК вычисляет размер этой инструкции? Запускает ли CPU ea, а затем читает следующие 4 байта в качестве своего операнда?

ответ

4

Q1-Q2. Да, это место, где процессор начинает выполнение после сброса. Это код в ПЗУ, который перескакивает на код запуска BIOS.

Q3. Не знаю, что такое jmpi, такой инструкции нет. Это может быть макрос, определенный в другом месте. Кажется, это дает большой скачок.

Q4. Вероятно, ассемблер рассчитал это для вас, если он находится в одном модуле. В более общем случае компоновщик делает это.

Q5. Да, процессор декодирует байты кода операции, чтобы выяснить, какие операнды ему нужны для извлечения. Когда он видит ea, он знает, как использовать следующие 4 байта в качестве цели перехода (в 16-битном режиме).

+0

'jmpi' обычно используется для более четкого определения того, что это около jmp. Хотя инструкции не существует, я видел, как несколько программ отображают ее таким образом. –