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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2010, 13:02   #11
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от Wardrag
хочу создать массив,заполнить его и вывести,к примеру,третий или пятый.Пока не придумал как
копируешь свой массив в отдельную строку, в которой все элементы кроме нужных (третьего и пятого) заполняются пробелами и выводишь эту строку MessageBox'ом на экран...
Mikl___ вне форума Ответить с цитированием
Старый 23.08.2010, 11:02   #12
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
Сообщение

offset это оператор ассемблера по этому он не выполняется программой или процессором, а на его место вставляется смещение его операнда, самим ассемблером.

в WINAPI надо использовать вместо него addr.

А строку я бы в памяти разместил в виде последовательности байт

Код:
.data
stroca db "hello", 00h

.code 
start:
invoke MessageBox,0,addr stroca,0,0
invoke ExitProcess,0
end start
Или можно разместить в стeке

Код:
.code 
start:
xor ax,ax
mov ah,"o"
push ax
mov eax,"hell"
push eax
invoke MessageBox,0,addr stroca,0,0
add esp,6
invoke ExitProcess,0
end start

Последний раз редактировалось Stilet; 25.08.2010 в 08:21.
wanes101 вне форума Ответить с цитированием
Старый 23.08.2010, 11:43   #13
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

wanes101
бредовый код, при передаче строки через регистр не учитываете, что она должна быть в "зеркальном отражении" и stroca ничего не содержит и не описана
Код:
.686P
.model flat
include windows.inc
includelib user32.lib
extern _imp__MessageBoxA@16:dword
;--------------------------------------------------
.code
start:	push '!o'
	push 'lleh'
	mov eax,esp;запоминаем содержимое esp так как дальше оно изменится
	push 0              
	push 0
	push eax
	push 0                    
	call _imp__MessageBoxA@16
	pop ecx; выравниваем указатель стека
	pop ecx
    	retn  ; можно и без ExitProcess                      
end start
Mikl___ вне форума Ответить с цитированием
Старый 23.08.2010, 15:39   #14
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию да я тут ошибся, вот исправил

Цитата:
Сообщение от wanes101 Посмотреть сообщение
.code
start:
xor ax,ax
mov ah,"o"
push ax
mov eax,"hell"
push eax
invoke MessageBox,0,esp,0,0
add esp,6
invoke ExitProcess,0
end start
здесь я не описовал область данных, stroca описывать в
.data не надо

Последний раз редактировалось wanes101; 23.08.2010 в 15:43.
wanes101 вне форума Ответить с цитированием
Старый 23.08.2010, 19:07   #15
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Цитата:
в WINAPI надо использовать вместо него addr.
Херню порите, гражданин. А это по вашему не WINAPI?

Код:
push MB_OK
push offset szTitle
push offset szText
push hWnd
call MessageBoxA
Так что, сначала нужно думать, а уже потом "ля-ля"
r9m вне форума Ответить с цитированием
Старый 23.08.2010, 19:51   #16
wanes101
Форумчанин
 
Регистрация: 04.06.2010
Сообщений: 212
По умолчанию

Цитата:
Сообщение от r9m Посмотреть сообщение
Херню порите, гражданин. А это по вашему не WINAPI?

Код:
push MB_OK
push offset szTitle
push offset szText
push hWnd
call MessageBoxA
Так что, сначала нужно думать, а уже потом "ля-ля"
addr нужно применэять при использовании invoke и не только в winapi и в других случаях с использования invoke привызове любых других процедур если надо указать смещенние в одном из параметров.

Последний раз редактировалось wanes101; 23.08.2010 в 20:06.
wanes101 вне форума Ответить с цитированием
Старый 24.08.2010, 04:21   #17
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

wanes101
прежде чем публиковать код проверяйте его, тем более я уже сказал где ваши ошибки
при запуске
Код:
start:
xor ax,ax
mov ah,"o"
push ax
mov eax,"hell"
push eax
invoke MessageBox,0,esp,0,0
add esp,6
invoke ExitProcess,0
получаем серый квадрат с кнопкой "ОК"
дело в том, что после помещения строки в стек, вы отправляете туда два нуля и на последний ноль и будет указывать esp. Потом зачем отправлять в регистр eax куски строки, а затем отправлять в стек содержимое регистра, если можно сразу по четыре символа отправлять в стек push "!o"/push "lleh". Макрос addr name это lea eax,name /push eax что занимает 7 байт, а push offset name это 5 байт

плюс при выводе MessageBox на экран значение в ESP оказалось некратно 4 что недопустимо

Последний раз редактировалось Stilet; 25.08.2010 в 08:21.
Mikl___ вне форума Ответить с цитированием
Старый 02.09.2010, 17:13   #18
VerhoLom
Пользователь
 
Регистрация: 25.08.2010
Сообщений: 12
По умолчанию

О, вы извращенцы прям! Давайте и я поизвращаюсь:

push dword ptr 0
call @1
@1: .ascii "Заголовок\0"
call @2
@2: .ascii "Текст\0"
push dword ptr 0
call _MessageBoxA@16
VerhoLom вне форума Ответить с цитированием
Старый 02.09.2010, 17:18   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Давайте и я поизвращаюсь
И к чему это?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MessageBox Nice42ru Общие вопросы Delphi 6 04.06.2010 11:35
Как вывести символ в позиции 80,25 ? sanya_m Помощь студентам 2 13.03.2010 02:10
MessageBox mifka72 Помощь студентам 13 08.02.2010 14:46
Как вывести символ на экран в графическом режиме 0x13 Viriat Общие вопросы C/C++ 2 30.12.2009 17:22
messageBox Andrey174rus Общие вопросы Delphi 4 10.10.2009 17:45