unsigned short A_i_B_Sidelinatrube() {
unsigned short Vasya;
_asm
{
Mov AX, 2
Add AX, 2
Mov Vasya, AX
}
return Vasya;
}
Не могу вывести значение из программы на ассемблере.
Код:
unsigned short A_i_B_Sidelinatrube() {
_asm
{
Mov AX, 2
Add AX, 2
Ret
}
}
_asm
{
Mov AX, 2
Add AX, 2
Ret
}
}
Уже и вот так пробовал:
Код:
Что мешает открыть программу в отладчике и посмотреть, что происходит на самом деле?
Подскажите хотябы что вот это может значить. Из перевода ничего не ясно
Цитата: QWERYTY
warning C4047: '=' : 'unsigned short' differs in levels of indirection from 'unsigned short (__cdecl *)()'
Подскажите хотябы что вот это может значить. Из перевода ничего не ясно
Подскажите хотябы что вот это может значить. Из перевода ничего не ясно
Рядом с какой строчкой кода это предупреждение? Если в этой строке присваивание, покажите тип переменной, к которой присваивается.
У меня всё работает и Вася возвращает то, что нужно. В 10й студии.
И вызов самой функции тоже неплохо было бы показать.
OllyDbg, ImmunityDbg - отладчики, которыми можно смотреть 32х разрядные регистры и стек.
Мешает то что никогда не работал с отладчиками. Над этой темой второй день бъюсь, теперь придётся разбираться как там чё смотреть. Пробовал debug'ом, но туман только гуще. Значения всех регистров 0, и после исполнения программы тоже.
Какой программой можно посмотреть 32-ух разрядные регистры? Самый простой метод, сгодится даже без возможности редактировать, сейчас нет времени погружаться в изучение софт айса. На другом порталле программистов посоветовали посмотреть в стеке(не знаю по чему), и я сделал это так:
Код:
unsigned short A_i_B_Sidelinatrube() {
unsigned short Vasya;
_asm
{
Mov AX, 2
Add AX, 2
Pop Vasya
}
return Vasya;
}
unsigned short Vasya;
_asm
{
Mov AX, 2
Add AX, 2
Pop Vasya
}
return Vasya;
}
Код:
#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);
}
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 файле и вы её видели чуть выше.
Ошибок и предупреждений на данный момент нет, но работает по прежнему не так как должно
Всем спасибо, разобрался. Заплатил почти двумя сутками времени за то что не написал круглые скобки в коце функции при её вызове. Теперь буду знать что это смертельно важно.