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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2011, 11:11   #11
artemonary
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Swarog Посмотреть сообщение
ага это необходимо просто сделать, иначе он пытается писать по адресу 0 в твоем случае, а это адресное пространство не твоей программы, поэтому и ругается
чувствую себя идиотом, какой же адрес ему указать?
artemonary вне форума Ответить с цитированием
Старый 11.05.2011, 11:16   #12
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

кстати в ebx обчзательно нужно сохранять или потерям значение, смотри как у меня в примере, иначе не будет правильно работать
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 11.05.2011, 11:22   #13
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

допусти это будет так:


Код:
var 
 I: integer;
begin

asm
mov edx, offset i
mov eax, твое_значение
test eax, $ffff0000
jnz DWORDMOV ; в два байта не уложились записываем в ячейку 4 байта
test ax, $ff00
jnz WORDMOV ; не уложились в 1 байт
mov [edx], bl
jmp exitproc
WORDMOV:
mov [edx], bx
jmp exitproc
DWORDMOV:
mov [edx], ebx
exitproc:
end;
end;
по поводу сохранения у ебх был не прав, сори.
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 11.05.2011, 11:24   #14
artemonary
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

в твоём примере ты используешь and, там понятное дело надо сохранять, я and убрал, или так уже не верно будет. я прогонял с разными значениями вроде всё верно, единственное с ячейкой памяти нормально не компилируется...
artemonary вне форума Ответить с цитированием
Старый 11.05.2011, 11:25   #15
artemonary
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

ну т.е. пишем в тот же промежуток памяти, что и был выделен изначально под переменную?
artemonary вне форума Ответить с цитированием
Старый 11.05.2011, 11:28   #16
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

в принципе да можно конечно раскидать все это дело допустим так

Код:

var 
 I: integer;
 b: byte;
 w: word;
begin

asm
mov eax, твое_значение
test eax, $ffff0000
jnz DWORDMOV ; в два байта не уложились записываем в ячейку 4 байта
test ax, $ff00
jnz WORDMOV ; не уложились в 1 байт
mov b, bl
jmp exitproc
WORDMOV:
mov w, bx
jmp exitproc
DWORDMOV:
mov i, ebx
exitproc:
end;
end;
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 11.05.2011, 11:35   #17
artemonary
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

Вроде вот так нормально работает (использовал lea вместо offset, ибо на него компилятор ругается, почему ума не приложу)
Код:
_asm {
		mov eax, x
		lea edx, x

		test eax,0ffff0000h
		jnz dwtest

		test ax, 0ff00h
		jnz wtest

		mov [edx], al
		jmp ended
		
		dwtest:
		mov [edx], eax
		jmp ended
		
		wtest:
		mov [edx], ax
		jmp ended

		ended:
	}
тогда размер через "ptr" не обязательно указывать?

Последний раз редактировалось artemonary; 11.05.2011 в 11:39.
artemonary вне форума Ответить с цитированием
Старый 11.05.2011, 11:45   #18
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

в приниципе если не ругается то можне и не указывать, прогони программу в режиме отладки и посмотри что получается, на оффсет может ругаться если память под переменную выделена в стеке (вроде)
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 11.05.2011, 12:01   #19
artemonary
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

вроде всё верно, единственное, что при числе укладывающемся в байт пишет тип: unsigned char. По идее оно, наверное так и есть
artemonary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Битовые операции _-Re@l-_ Свободное общение 12 11.07.2010 15:31
Битовые операции СИ savra Помощь студентам 0 10.03.2010 19:31
Битовые операции(С) Александр Елис Помощь студентам 11 16.02.2010 21:11
Битовые операции DrAlexx2121 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 14.06.2008 22:26
Битовые операции LEX.darnica Помощь студентам 14 23.12.2007 19:40