Welcome, guest. You can be a Login или register
« Previous 1 2 Next » | All
Author
Topic title
UAC
Offline
Бывший UAC и Sodomizer
833 posts
Karma 27
Кто-то кодил под эту штуку?
Всё что я знаю, что so called "inline..." напоминает
больше всего МАСМ.

Я немного соприкасался с ТАСМ 5.0 и мне интересно
можно ли забить на все остальные компиляторы
и учится премудростям машинного кода непосредственно
под любимой M$ Visual Cpp 6.0 ?

Пример:
[size=7pt]#include <stdio.h>

char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
void main( void )
{
__asm
{
mov eax, offset world
push eax
mov eax, offset hello
push eax
mov eax, offset format
push eax
call printf
pop ebx
pop ebx
pop ebx
}
}[/size]
ZASOR
Offline
я вернулся
826 posts
Karma 20
Ты камрад остановись на чем-нибудь одном ;D :D
This is what we do. And if you like it, good. If not, go fuck yourself.
UAC
Offline
Бывший UAC и Sodomizer
833 posts
Karma 27
[quote author=ZASOR link=topic=119.msg2252#msg2252 date=1173725169]
Ты камрад остановись на чем-нибудь одном ;D :D
[/quote]
А я ещё толком и не начинал. Приходишь так с работы:
"Сейчас похаваю и сяду... учить... Х.У.Я.С.М."
:D
ZASOR
Offline
я вернулся
826 posts
Karma 20
;D ;D ;D
[hr]
This is what we do. And if you like it, good. If not, go fuck yourself.
UAC
Offline
Бывший UAC и Sodomizer
833 posts
Karma 27
[quote author=ZASOR link=topic=119.msg2254#msg2254 date=1173726949]
;D ;D ;D
[hr]
http://static.flickr.com/79/261457181_83009a8652_o.jpg
[/quote]
Оффтоп, но эту серию я видел - зачёт! ;)
KRIGSSVIN
Offline
930 posts
Karma 53
что это за бред? Зачем столько поппать ebx? Мы же eax пушим? >:(

#include <stdio.h>

char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
void main( void )
{
__asm
{
mov eax, offset world
push eax
mov eax, offset hello
push eax
mov eax, offset format
push eax
call printf
pop ebx
pop ebx
pop ebx
}
}
UAC
Offline
Бывший UAC и Sodomizer
833 posts
Karma 27
[quote author=KRIGSSVIN link=topic=119.msg2256#msg2256 date=1173727182]
что это за бред? Зачем столько поппать ebx? Мы же eax пушим? >:(

[/quote]
Хм, верно. Компилится без предупреждений и ошибок...
Проморгал.

Надо так(?)
[size=7pt]#include <stdio.h>

char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
void main( void )
{
__asm
{
mov eax, offset world
push eax
mov eax, offset hello
push eax
mov eax, offset format
push eax
call printf
pop eax
pop eax
pop eax
}
}[/size]
KRIGSSVIN
Offline
930 posts
Karma 53
Ага теперь правильно!
А _asm всегда без предупреждений глупых... на то он и асм. Там только корявый синтаксис - ошибка. :D О других ошибках ты узнаешь по работе программы ;D
UAC
Offline
Бывший UAC и Sodomizer
833 posts
Karma 27
KRIGSSVIN
Можешь мне подбросить какой-нибудь кусок кода на инлайн-АСМе
из своей практики? Чуть более серьёзный, потому что этот беспонтовый -
вызывает ту же printf, вот блин, поражатели воображения
:-X ;)
willow
Offline
Сражён шальной гранатой
570 posts
Karma 56
UAC: Да пожалуйста! Вот тебе код из дума 3, переведённый мною на встроенный АСМ.
Вычисляет угол обзора камеры, основываясь на пропорциях экрана
r_aspectRatio = 0 -- 4*3
r_aspectRatio = 1 -- 16*9
r_aspectRatio = 2 -- 16*10
и предлагаемом первичном угле по горизонтали X. Возвращает угол по Y и, при необходимомости, правит X.

void idGameLocal::CalcFov( float &fov_x, float &fov_y ) const
{
unsigned int i360 = 360,
aspect = r_aspectRatio.GetInteger();
float f16_12 = 4.0f/3.0f,
f10_16 = 5.0f/8.0f,
f9_16 = 9.0f/16.0f;
// first, calculate the vertical fov based on a 640x480 view
__asm
{
mov EAX,fov_x
// x = 640.0f / tan( base_fov / 360.0f * idMath::PI );
fldpi
fmul float ptr [EAX]
fidiv i360
fptan
ffree st(0)
fincstp
fld f16_12
// y = atan2( 480.0f, x );
fpatan
cmp aspect,2
je aspect_2
cmp aspect,1
jne fov_y_fin
push f9_16
jmp short aspect_new
aspect_2: push f10_16
aspect_new:
// y = ratio_y / tan( fov_y / 360.0f * idMath::PI );
// fov_x = atan2( ratio_x, y ) * 360.0f / idMath::PI;
fld st(0)
fptan
ffree st(0)
fincstp
fld float ptr [ESP]
add ESP,4
fpatan
fimul i360
fldpi
fdiv
fstp float ptr [EAX]
// fov_y = y * 360.0f / idMath::PI;
fov_y_fin: fimul i360
fldpi
fdiv
mov EAX,fov_y
fstp float ptr [EAX]
}
}
« Previous 1 2 Next » | All