Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C+Ассемблер, Научите использовать код на ассемблере.. 
:(
    Опции темы
Dimush
Дата 22.5.2004, 16:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Прошу прощения за ламерский вопрос. Только недавно занялся этим делом.
Вопрос в том как из C использовать код на ассемблере.
Например у меня есть программа на ассемблере которая выводит курсор мыши:
.model tiny
.code
org 100h ; COM-файл
.186 ; для команды shr cx,3
start:
mov ax,12h
int 10h
mov ax,0
int 33h
mov ax,1
int 33h

mov ah,0
int 16h
mov ax,000Ch
mov cx,0000h
int 33h
mov ax,3
int 10h
ret

end start
Мне необходимо запустить ее из программы на C, и получить координаты курсора.
Подскажите как сделать подобное, либо дайте ссылку где про это можно узнать.
Спасибо.
  Вверх
Enflout
Дата 22.5.2004, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 22.5.2004

Репутация: нет
Всего: 6



Прочитай эту статью
Там правда о билдере, но разницы это не несет. Удачи...

Это сообщение отредактировал(а) Templar$ - 22.5.2004, 20:11
PM MAIL   Вверх
Pikachu
Дата 22.5.2004, 23:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Сделай ассемблерную вставку:
_asm
{
...
}
  Вверх
Масяня
Дата 23.5.2004, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 1.4.2004

Репутация: нет
Всего: нет



В VC++ asm-вставки ограничены, например, нельзя объявлять переменные через db, dd... и еще много чего там нельзя делать!
PM MAIL   Вверх
Sined
Дата 23.5.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 19.5.2004

Репутация: 1
Всего: 0



Насколько я понимаю, код вообще не затачивается под винду, которая при вызове прерываний радостно дает по шапке,а и Turbo каком-нибудь все сделать вполне можно.
Другое дело, что проще было бы писать всю прогу на асме, вызывая какие-надо сишные функции.
PM MAIL   Вверх
shedon
Дата 23.5.2004, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Если под дос, то всё можно нормально и зделать без вставок на асме.
Код

#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include <stdio.h>

union REGS rg;

int main(void)
{
int i;
int nButtons;

// Инициализируем мышь
rg.x.ax = 0;
int86(0x33, &rg, &rg);
if(0 == rg.x.bx)
{
 printf("Mouse not found\n");
 return -1;
}

// Сохраняем количество клавиш
nButtons = rg.x.bx;
printf("Mouse type: %d\n", nButtons);

// Включаем курор
rg.x.ax = 1;
int86(0x33, &rg, &rg);
printf("Mouse cursor on. Press any key\n");
getch();

while(!kbhit())
{
 rg.x.ax = 3;
 int86(0x33, &rg, &rg);
 printf("%2d x:%5d y:%5d",
  rg.x.bx, rg.x.cx, rg.x.dx);
 for(i=0;i<18;i++) printf("\b");
}
getch();

// Выключаем курсор
rg.x.ax = 2;
int86(0x33, &rg, &rg);

return 0;
}



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Anton Vatchenko
Дата 24.5.2004, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



shedon
Это фигня с прерываниями на Си! Я думаю, просто использовать asm{} и почти все можно реализовать


--------------------
user posted image
PM MAIL   Вверх
shedon
Дата 24.5.2004, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: 4
Всего: 11



Цитата
Это фигня с прерываниями на Си!

Почему ?
Цитата
Я думаю, просто использовать asm{} и почти все можно реализовать

Да не кто этого не запрещает, человеку нужен был код на си, я ег ему и дал...


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Sined
Дата 24.5.2004, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 19.5.2004

Репутация: 1
Всего: 0



Цитата
Это фигня с прерываниями на Си

shedon, это в мой огород камень.Твой код абсолютно корректен. Но я для проверки скомпилил исходники Dimusha--естессно не работают(A.V.)

PM MAIL   Вверх
Guest
Дата 25.5.2004, 08:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











shedon - спасибо то , что надо.
Вопросов больше нет спасибо за помощь, программа нужна была под дос.
Sined - хм, каким образом? тот исходник который я привел выше
рабочий, т.е. из под ассемблера компилируется и работает. Правда из под C
заставить его работать следующим образом:

void main()
{
asm
{
mov ax,12h
int 10h
mov ax,0
int 33h
mov ax,1
int 33h

mov ah,0
int 16h
mov ax,000Ch
mov cx,0000h
int 33h
mov ax,3
int 10h
}
}

так и не удалось :-(.

  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.