Метка: jmp
Команда JMP ассемблера — это команда ветвления (branch command). Выполнении команды (asm jmp) приводит к изменению точки исполнения (execution point) текущего процессора. Точка исполнения (соответствует значению регистра EIP, или RIP в для 64-х битных систем) — это адрес следующей инструкции в памяти, которую процессор должен исполнить на следующем шагу.
Типы команды JMP
JMP assembler команда бывает нескольких типов. Они отличаются максимальным расстоянием на которое может быть осуществлен переход (far jump / short jump), а так же будет ли при переходе использоваться значение одного из сегментных регистров процессора. Тип команды jmp (команды передачи управления) определяет и длину последовательности байтов, необходимых для кодирования инструкции. При использовании макроассемблера тип команды перехода задается префиксами short (короткий переход) и far (длинный переход):
; Команда jmp assembler MASM jmp short Label1 jmp far ptr Label2 // Или то же самое ассемблерной вставкой на C / C++ _asm { jmp short Label1 jmp far ptr Label2 }
Кодирование команды
Если адрес для перехода задается меткой, в зависимости от длины перехода команда кодируется двумя или пятью (девятью в случае 64-битных систем). Смещение рассчитывается относительно адреса следующей инструкции после инструкции jmp. Используя форму ниже можно закодировать или декодировать команду jmp для x86:
Адрес инструкции: Адрес для перехода:
Расстояние: short far
Код инструкции:
Test proc ... a_10000000h: jmp short t_10000010h ; ... t_10000010h: Test endp