|
Вопрос # 6 117/ вопрос закрыт / |
|
Здравствуйте!
Подскажите пожалуйста как можно вернуть результат из ассемблерной вставки.
Например:
_asm
{
Mov AX, 2
Add AX, 2
}
Как вернуть содержимое АХ например в переменную или чтоб АХ стал результатом функции в которой эта вставка.
Я уже пробовал Ret, Retn но возвращаемое значение равно максимальному значению типа, если значение функции или переменная типа byte то возвр. 255 если unsugned short то 65 535.
Пишу на чистом си. Буду рад любым замечаниям, ссылкам на статьи, конкретным вариантам.
Вообще функции на ассемблере работают, проблемы только с возвратом значений. Может нужно чтото добавить в проект, у меня пока только #include <windows.h>
 |
Вопрос задал: QWERYTY (статус: Посетитель)
Вопрос отправлен: 6 мая 2012, 14:09
Состояние вопроса: закрыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 6 мая 2012, 21:30; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 6 мая 2012, 14:21 [#1]:
В стеке посмотри.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
QWERYTY (статус: Посетитель), 6 мая 2012, 15:25 [#2]:
unsigned short A_i_B_Sidelinatrube() {
unsigned short Vasya;
Vasya = 0;
_asm
{
Mov AX, 2
Add AX, 2
Mov Vasya, AX
//Ret
}
return Vasya;
}
Если всё нормально работае как вы думаете какой должен быть результат функции?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 6 мая 2012, 15:47 [#3]:
unsigned short A_i_B_Sidelinatrube() {
unsigned short Vasya;
Vasya = 0;
_asm
{
Mov AX, 2
Add AX, 2
Pop Vasya
//Ret
}
return Vasya;
}
Вот так я посмотрел в стеке, или я совершенно вас не понял?
Если понял, тогда комп меня не понял, ибо значение <> 4.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
min@y™ (статус: Доктор наук), 6 мая 2012, 17:05 [#4]:
Цитата (QWERYTY):
ибо значение <> 4.
А чему равно?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
QWERYTY (статус: Посетитель), 6 мая 2012, 17:16 [#5]:
Трудно сказать. Я разрабатываю приложение RTSS.
Окон нету. Вывести на консоль не могу т.к. не компилится когда пытаюсь применить itoa.
Там схема такая что у меня стоит цикл от нуля до значения функции, а в цикле идёт запись в LPT порт. В цикле я два раза записываю первый 255, второй 0. Т.е за один проход цикла светодиод загарается и тухнет.
И первый и второй код лампа мигает явно больше 4-ёх раз и мне приходится останавливать процесс.
А вообще как написанно выше должно работать да?
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
min@y™ (статус: Доктор наук), 6 мая 2012, 17:28 [#6]:
Цитата (QWERYTY):
А вообще как написанно выше должно работать да?
Ты издеваешься?
Я MSVC не в глаза видел. Залезь отладчиком в регистры и стек и посмотри, ёмаё. Если там что-то типа 0xXXXX0004, то я угадал.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 6 мая 2012, 17:30 [#7]:
Ну ваще... Я сижу щас в баре, пью коньяк, ем масо из горшочка, курю сигарку...
И ОТВЕЧАЮ НА ВОПРОСЫ!!!!!
Я больной, да?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
QWERYTY (статус: Посетитель), 6 мая 2012, 17:36 [#8]:
Я больной, да? Ни в коем случае
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 6 мая 2012, 21:27 [#10]:
Всем спасибо. Впредь буду внимательнее. По привычке кодить на паскале упустил как оказалось смертельно важную деталь, а он мне ведь твердил:"
.\USB.c(30) : warning C4047: '=' : 'int' differs in levels of indirection from 'int (__cdecl *)(void)'". Но я не понимал, слишком у визуал студио пространные сообшения об ошибках и предупреждения.
Я не указал скобки на конце функции при её вызове, за что заплатил почти двумя сутками времени.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
|
QWERYTY (статус: Посетитель), 6 мая 2012, 21:30 [#11]:
Спасибо вам, багменот. Именно ваша ссылка помогла разобраться, не известно сколько ещё времени я бы убил.
Код который в примере тут же заработал, я стал сравнивать и увидел лиш это различие.
ВЕРИТЬ ВО ВНЕЗЕМНЫЕ ЦИВИЛИЗАЦИИ НЕ ОЗНАЧАЕТ ВЕРИТЬ В ИНОПЛАНЕТЯН.
|
6 мая 2012, 22:01: Вопрос закрыт (решение принял автор вопроса — QWERYTY): Вопрос решён
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|