Использование ассемблерных вставок в C++

Тема в разделе "WASM.BEGINNERS", создана пользователем tmp_2008, 10 июн 2008.

  1. tmp_2008

    tmp_2008 New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    7
    В общем, проблема в следующем. Пытаюсь вызвать прерывание 16h. При компилировании ошибки не выдает, но при запуске сразу вылетает.
     
  2. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    конкретно. что? где? как?
     
  3. tmp_2008

    tmp_2008 New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    7
    Конкретно - вот тот самый код:
    Код (Text):
    1. #include<stdio.h>
    2. #include<windows.h>
    3. #include "conio.h"
    4.  
    5.  
    6. void main()
    7. {
    8.     WORD test_buf;
    9.  
    10.    
    11. __asm
    12. {
    13.     mov ah,0100h
    14.     int 16h
    15.     mov test_buf,ax
    16. }
    17.     printf("%u",test_buf);
    18. }
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Windows -- совсем не DOS и механизм прерываний работает в нем совсем по-другому. API реализован не в виде прерываний, а в виде функций из подключаемых библиотек.

    В общем, прерывания в Win использовать таким образом нельзя.
     
  5. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    т.е. ты в косольной виндовой проге для опроса stdin используешь сервис биоса.
    Поэтому и вылетает. Попробуй эту вставку в DOSовском приложении - все получится. А здесь надо юзать соотв. ф-цию типа cscanf.