Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2009, 14:45   #1
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию Окно с сообщениям

Всем доброе время суток!!!

Я уже почти закончил свою курсовую но препод "попросил" добавить ассемблерную вставку, чтоб когда создавался один обьект появлялося окно(типа Ok) и выводило мою фамилию.

Курсовую писал на С++ в Visual Studio, асемблер немного знаю но только под Dos. Если не ошибаюсь то нужно занести какие то параметры в стек и воспользоваться одной из функцией Api, хотя возможно ошибаюсь.

Можно написать кусок кода или просто дать статью где это описано все равно буду благодарен.
newkobra вне форума Ответить с цитированием
Старый 26.05.2009, 15:06   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Вы имеете ввиду окно MessageBox'а? Если да, то
Код:
  push   0
  push   offset MsgBoxCaption
  push   EAX
  push   0
  call   MessageBox           ; Вызов API-функции вывода сообщения на экран
  push   0                        ; Пустой параметр для функции выхода
  call   ExitProcess            ; Вызов API-функции выхода
Ну и ,естественно, нужно написать параметры этого окна(Их два)
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 26.05.2009 в 15:18.
MalCer вне форума Ответить с цитированием
Старый 26.05.2009, 15:22   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот на МАСМе пример:
Код:
	.386
	.model flat,stdcall
	option casemap:none
	include d:\masm32\include\user32.inc
	includelib d:\masm32\lib\user32.lib

.data
;_______________
ClassName		db "MASM Builder",0
Caption			db "Form",0
;_______________
.code
start:
 call GetForegroundWindow
 push 0
 push offset Caption
 push offset ClassName
 push eax
 call MessageBoxA
ret
end start
Думаю под Си его переправить не сложно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 15:40   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

А GetForegroundWindow то зачем?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 26.05.2009, 16:11   #5
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

Цитата:
Сообщение от MalCer Посмотреть сообщение
Вы имеете ввиду окно MessageBox'а? Если да, то
Код:
  
push   0
  push   offset MsgBoxCaption
  push   EAX
  push   0
  call   MessageBox           ; Вызов API-функции вывода сообщения на экран
  push   0                        ; Пустой параметр для функции выхода
  call   ExitProcess            ; Вызов API-функции выхода
Ну и ,естественно, нужно написать параметры этого окна(Их два)
Кое-что неясно.
MsgBoxCaption как я понял это заголовок того окна?
Что должно быть в регистре eax?
Зачем после этого запихать 0?
И как встроить это в С++? Понятно что эту функцию я пишу в _asm{ }; но в конструкторе того класса что создаеться. Но как подключить библиотеку с функцией MessageBox? Если я на нормальном языке(с++) напишу инициализацию переменной MsgBoxCaption она в том куске будет разпознаваться? И для чего call ExitProcess?

Извините что так много вопросов просто под Windows никогда не писал проги на асемблере.
newkobra вне форума Ответить с цитированием
Старый 26.05.2009, 16:21   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Просто добавь асм втавку
Код:
  push 0   ; тип окна MB_OK, те будет только одна кнопка OK.
 push offset MsgCaption    ; заголовок окна
 push offset MsgText        ; сам текст
 push 0                       ; хендл вызывающего окна нам не нужен
 call MessageBoxA        ; вызов
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 26.05.2009 в 16:27.
Goodwin98 вне форума Ответить с цитированием
Старый 26.05.2009, 16:43   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А GetForegroundWindow то зачем?
А чтоб где-попало не вылезло. Так сказать контрольный выстрел в правое полупопие.
Цитата:
Зачем после этого запихать 0?
Это Гудвин уже сказал
Цитата:
И для чего call ExitProcess?
Это тебе не нужно. Не пиши, ато с проги вылетишь
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 16:52   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Решил попробовать на кнопку поставить:
в Билдере:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 __asm
{
 push 0
 push "Test"
 push "Test"
 push 0
 call MessageBoxA
 }
}
И в Делфи:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 asm
 push 0
 push 'Test'
 push 'Test'
 push 0
 call MessageBoxA
 end;
end;
И там и там вылетает с "Access violation":


Чего он хочет? А то аж интересно стало.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 26.05.2009, 16:55   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
push 'Test'
И ты решил что это сработает?
Оно строку эту возьмет в ее кодах последовательно как число, потому как просто по длине совпало с 32 битами
Вот проверь:
Код:
   push 'Tesvcvcxvxcvt'
I'm learning to live...

Последний раз редактировалось Stilet; 26.05.2009 в 16:58.
Stilet вне форума Ответить с цитированием
Старый 26.05.2009, 16:58   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Я и так пробовал:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var msg,cpt : string;
begin
msg := 'test';
cpt := 'test';
 asm
 push 0
 push offset cpt
 push offset msg
 push 0
 call MessageBoxA
 end;
end;
Или опять что-то не так делаю?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окно Help Djem1991 Общие вопросы Delphi 10 04.02.2009 16:35
доступ к личным сообщениям и новая группа "Пользователи" Alar О форуме и сайтах клуба 30 22.12.2008 23:41
Окно MadDog__ Win Api 0 17.01.2008 00:33
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28