|
|
| Посл.отвђт | Сообщен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:35macro 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 |