Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ассемблерная вставка, регистр AL


Автор: neic 15.4.2012, 12:11
Добрый день.

Есть код с ассемблерной вставкой:
Код

    char ah=0;
    int x=0;
    int y=0;

    _asm
    {
        gh:
        mov ah, dword ptr 00h
        int 16h
        mov x,AL
        mov y,ah
        cmp AH,44
        jb gh
        cmp AH,53
        jg gh
    }
    printf((char*)ah);
    return 0;


Ругается следующими ошибками:
Цитата

error C2443: конфликт размеров операндов


на все строчки которые содержат команду mov

Пробовал и char, и int. Не получается, не знаю какой ещё тип заюзать.
Регистр AL, как я почитал в интернете 1 байтовый, ну а int 4 байтовый, т.е. уже ошибка.

Мне нужно передать значение регистра AL в программу и вывести позиционный код и ASCII код.

Заранее спасибо.

Автор: disputant 15.4.2012, 12:19
dword - это 4 байта. 
Попробуйте byte smile Впрочем (см. ниже) вам и это не надо.
Ну и потом - x и y у вас явно 32-битные, dword. Опять же несоответствие...

И - у вас программка под DOS? Есть у меня подозрение, что вам надо не 
mov ah, dword ptr 00h
а 
xor ah, ah - вы ж его просто обнулить хотите?

Вобщем, честно говоря, у меня осталось тягостное ощущение, что то, что вы хотите сделать, надо делать не совсем так, если не совсем не так...



Автор: borisbn 15.4.2012, 13:15
neic, в Си для этого есть kbnit() и getch()

Автор: volatile 15.4.2012, 13:51
Цитата(neic @  15.4.2012,  12:11 Найти цитируемый пост)
        int 16h

Это же досовское прерывание. Вы это серьезно собираетесь в 32 битном приложении юзать?  smile 


Автор: disputant 15.4.2012, 15:10
Цитата(borisbn @ 15.4.2012,  13:15)
neic, в Си для этого есть kbnit() и getch()

Ему надо еще и код клавиши, а это getch() не дает. Тут можно было бы воспользоваться чем-то типа int86().

Но то, что он ХОТЕЛ написать - это только в real mode... А то, что написал - вообще никуда...  smile

Добавлено через 59 секунд
Цитата(volatile @ 15.4.2012,  13:51)
Цитата(neic @  15.4.2012,  12:11 Найти цитируемый пост)
        int 16h

Это же досовское прерывание. Вы это серьезно собираетесь в 32 битном приложении юзать?  smile

Ну, если совсем строго - то BIOS'овое smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)