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

Ваш аккаунт

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

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

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

Не могу вывести значение из программы на ассемблере.

465
06 мая 2012 года
QWERYTY
595 / / 25.03.2012
Код:
 
Код:
unsigned short A_i_B_Sidelinatrube() {
_asm
{
    Mov AX, 2
    Add AX, 2
    Ret
}
}
Я уже и Retn пробовал. Возвращает максимальное значение типа. Например если результат функции byte то возвращается 255, не зависимо от значения в регистре АХ, если unsigned short то 65 535.
Уже и вот так пробовал:

 
Код:
unsigned short A_i_B_Sidelinatrube() {
unsigned short Vasya;
_asm
{
    Mov AX, 2
    Add AX, 2
    Mov Vasya, AX  
}
return Vasya;
}
Среда разработки: MS Visual Studio 2005
316
06 мая 2012 года
Alm3n
889 / / 29.05.2009
Что мешает открыть программу в отладчике и посмотреть, что происходит на самом деле?
465
06 мая 2012 года
QWERYTY
595 / / 25.03.2012
warning C4047: '=' : 'unsigned short' differs in levels of indirection from 'unsigned short (__cdecl *)()'

Подскажите хотябы что вот это может значить. Из перевода ничего не ясно
316
06 мая 2012 года
Alm3n
889 / / 29.05.2009
Цитата: QWERYTY
warning C4047: '=' : 'unsigned short' differs in levels of indirection from 'unsigned short (__cdecl *)()'

Подскажите хотябы что вот это может значить. Из перевода ничего не ясно


Рядом с какой строчкой кода это предупреждение? Если в этой строке присваивание, покажите тип переменной, к которой присваивается.
У меня всё работает и Вася возвращает то, что нужно. В 10й студии.
И вызов самой функции тоже неплохо было бы показать.
OllyDbg, ImmunityDbg - отладчики, которыми можно смотреть 32х разрядные регистры и стек.

465
06 мая 2012 года
QWERYTY
595 / / 25.03.2012
Ловко. Только что ничего не было.

Мешает то что никогда не работал с отладчиками. Над этой темой второй день бъюсь, теперь придётся разбираться как там чё смотреть. Пробовал debug'ом, но туман только гуще. Значения всех регистров 0, и после исполнения программы тоже.
Какой программой можно посмотреть 32-ух разрядные регистры? Самый простой метод, сгодится даже без возможности редактировать, сейчас нет времени погружаться в изучение софт айса. На другом порталле программистов посоветовали посмотреть в стеке(не знаю по чему), и я сделал это так:

 
Код:
unsigned short A_i_B_Sidelinatrube() {
unsigned short Vasya;
_asm
{
    Mov AX, 2
    Add AX, 2
    Pop Vasya  
}
return Vasya;
}
Но эффект тот же, значение равное максимальному значению типа. Точно так же получается если закоментить весь ассемблерный код.
465
06 мая 2012 года
QWERYTY
595 / / 25.03.2012
Код:
#include "USB.h"

USHORT Port;
LARGE_INTEGER Delay;
byte Value0, Value1;
unsigned short PCIBIOSValue;
unsigned short i;
char StrBuff[255];

void _cdecl main(int  argc, char **argv, char **envp)
{
    //
    // TO DO:  your program code here
Delay.QuadPart = 200000;
Port = 888;
Value0 = 0;
Value1 = 255;
PCIBIOSValue = 0;
PCIBIOSValue = A_i_B_Sidelinatrube;


    for (i = 0; i < PCIBIOSValue; i++) {
       
       RtWriteLPTPort(Port, Value1);
       RtSleepFt(&Delay);
       RtWriteLPTPort(Port, Value0);
       RtSleepFt(&Delay);   }    
   
    RtExitProcess(0);
}

Ну а сама вызываемая функция в .h файле и вы её видели чуть выше.
Ошибок и предупреждений на данный момент нет, но работает по прежнему не так как должно
465
06 мая 2012 года
QWERYTY
595 / / 25.03.2012
Всем спасибо, разобрался. Заплатил почти двумя сутками времени за то что не написал круглые скобки в коце функции при её вызове. Теперь буду знать что это смертельно важно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог