Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

вопрос по встроенному в Gcc ассемблеру

8.6K
03 апреля 2006 года
Al Pachino
10 / / 03.11.2004
Привет всем. Может из гуру кто знает. Нужно сделать в защищенном режиме процессора Intel .386 дальний пероход. Т.е., в ассемблере nasm это выглядит примерно так:

%define TSS_selector 18h
FAR JMP TSS_selector:00

или, если писать кодами на nasm:

db 0EAh ; тоже что и FAR JMP
dw 00
dw TSS_selector

но нужно это сделать средствами GCC. Полагаю, при помощи встроенного ассемблера. Принимаются любые работающие решения. Вопрос "а зачем тебе это надо?" уместен. Но сначала хотелось бы код.

Заранее благодарю за ответ.
1.9K
21 апреля 2006 года
disasm
232 / / 06.02.2006
Цитата:
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. Полагаю, при помощи встроенного ассемблера. Принимаются любые работающие решения. Вопрос "а зачем тебе это надо?" уместен. Но сначала хотелось бы код.

Заранее благодарю за ответ.


Вроде так (по крайней мере под UNIX GCC)

asm("ljmp $0x18,$0"::);

Если надо передать/возвретить параметры то используют несколько другую форму

asm("pushl %eax":(my_var_for_eax)"a":);

Вроде так.
Если будут вопросы - писать или сюда или читать
info:as

8.6K
21 апреля 2006 года
Al Pachino
10 / / 03.11.2004
Спасибо, а что означает звездочка? Например, в чем разница:
asm("jmp %0" :: "a"(my_var));
asm("jmp * %0" :: "a"(my_var));
1.9K
21 апреля 2006 года
disasm
232 / / 06.02.2006
Цитата:
Originally posted by Al Pachino
Спасибо, а что означает звездочка? Например, в чем разница:
asm("jmp %0" :: "a"(my_var));
asm("jmp * %0" :: "a"(my_var));


Я уж не помню, как там было, но вроде бы
конструкция
jmp *%ecx
означает как раз переход по адресу в регистре ecx
Но лучше не использовать всякие хитрости, а заменить эту конструкцию на
push %ecx
ret

Извиняюсь за смайлики в прошлом сообщении

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог