У меня возникает несколько проблем при отладке загрузочного сектора в 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 байта в качестве своего операнда?
'jmpi' обычно используется для более четкого определения того, что это около jmp. Хотя инструкции не существует, я видел, как несколько программ отображают ее таким образом. –