вопрос по встроенному в Gcc ассемблеру
%define TSS_selector 18h
FAR JMP TSS_selector:00
или, если писать кодами на nasm:
db 0EAh ; тоже что и FAR JMP
dw 00
dw TSS_selector
но нужно это сделать средствами GCC. Полагаю, при помощи встроенного ассемблера. Принимаются любые работающие решения. Вопрос "а зачем тебе это надо?" уместен. Но сначала хотелось бы код.
Заранее благодарю за ответ.
Цитата:
Originally posted by Al Pachino
Привет всем. Может из гуру кто знает. Нужно сделать в защищенном режиме процессора Intel .386 дальний пероход. Т.е., в ассемблере nasm это выглядит примерно так:
%define TSS_selector 18h
FAR JMP TSS_selector:00
или, если писать кодами на nasm:
db 0EAh ; тоже что и FAR JMP
dw 00
dw TSS_selector
но нужно это сделать средствами GCC. Полагаю, при помощи встроенного ассемблера. Принимаются любые работающие решения. Вопрос "а зачем тебе это надо?" уместен. Но сначала хотелось бы код.
Заранее благодарю за ответ.
Привет всем. Может из гуру кто знает. Нужно сделать в защищенном режиме процессора Intel .386 дальний пероход. Т.е., в ассемблере nasm это выглядит примерно так:
%define TSS_selector 18h
FAR JMP TSS_selector:00
или, если писать кодами на nasm:
db 0EAh ; тоже что и FAR JMP
dw 00
dw TSS_selector
но нужно это сделать средствами GCC. Полагаю, при помощи встроенного ассемблера. Принимаются любые работающие решения. Вопрос "а зачем тебе это надо?" уместен. Но сначала хотелось бы код.
Заранее благодарю за ответ.
Вроде так (по крайней мере под UNIX GCC)
asm("ljmp $0x18,$0"::);
Если надо передать/возвретить параметры то используют несколько другую форму
asm("pushl %eax":(my_var_for_eax)"a":);
Вроде так.
Если будут вопросы - писать или сюда или читать
info:as
asm("jmp %0" :: "a"(my_var));
asm("jmp * %0" :: "a"(my_var));
Цитата:
Originally posted by Al Pachino
Спасибо, а что означает звездочка? Например, в чем разница:
asm("jmp %0" :: "a"(my_var));
asm("jmp * %0" :: "a"(my_var));
Спасибо, а что означает звездочка? Например, в чем разница:
asm("jmp %0" :: "a"(my_var));
asm("jmp * %0" :: "a"(my_var));
Я уж не помню, как там было, но вроде бы
конструкция
jmp *%ecx
означает как раз переход по адресу в регистре ecx
Но лучше не использовать всякие хитрости, а заменить эту конструкцию на
push %ecx
ret
Извиняюсь за смайлики в прошлом сообщении