· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Макрос push_double под Fasm

Посл.отвђт Сообщенiе


Дата: Июн 14, 2004 19:09:28 · Поправил: Безпощадный даос

Помогите пожалуйста. Не могу понять как написать макрос под Fasm. Что-то типа того:
macro push_double [v]
{ 
reverse 
local .low
local .high 
virtual at 0 
dq v
load .low dword from 0 
load .high dword from 4 
end virtual 
push .high 
push .low 
}


Но чтобы можно было использовать не только так:
push_double 1.0,2.0,3.0
invoke glVertex3d


но и так:
push_double [addr],[addr],[addr]
invoke glVertex3d


Я в сях и макросах не силен. Буду очень благодарен.


Дата: Июн 14, 2004 23:53:35

macro push_double [v]
{
reverse
  local .low,.high,.code,.modr,.sib,.ofs,.sibp,.ofsp
  .sibp = 2
  .ofs = 4
virtual at 0
  push dword v
  load .code byte from 0
  load .modr byte from 1
  if (.modr and 7) = 4
    load .sib byte from 2
    .sibp = 3
  end if
  if .modr = $35
    load .ofs dword from 2
    .ofs = .ofs+4
  else if .modr < $70
    .modr = .modr+$40
  else if .modr < $B0
    load .ofs byte from .sibp
    .ofs = .ofs+4
    if .ofs>127
      .modr = .modr+$40
    end if
  else if .modr < $F0
    load .ofs dword from .sibp
    .ofs = .ofs+4
  end if
end virtual
if .code = $68
virtual at 0
  dq v
  load .low dword from 0
  load .high dword from 4
end virtual
  push .high
  push .low
else if .code = $6A
virtual at 0
  dq v
  load .low dword from 0
  load .high dword from 4
end virtual
  push .high
  push .low
else if .code = $FF
  db .code,.modr
  if .sibp = 3
    db .sib
  end if
  if .modr = $35
    dd .ofs
  else if .modr < $70
  else if .modr < $B0
    db .ofs
  else if .modr < $F0
    dd .ofs
  end if
  push dword v
else
  error
end if
}

Возможно в макросе есть баги.


Дата: Июн 15, 2004 07:25:33

Благодарю за помощь, попробую.


Дата: Июн 15, 2004 08:47:36

Где-то небольшая ошибка но в целом все работает, спасибо Black_mirror. Попытаюсь понять.


Дата: Сен 14, 2004 15:29:02

Только сейчас набрел на этот форум, да и fasm начал осваивать недавно. Не откроешь секрет, что за ошибка? А заодно источник, где можно почитать про макросы.


Дата: Сен 15, 2004 01:44:03 · Поправил: S_T_A_S_

Где-то здесь я приводил более простой макрос - U64


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.044