; выравнивает значение в eax до значения кратного 0x200 в большую сторону
proc Align_0x200
; -> EAX Value
or eax,eax
jne @f
retn
@@: test eax,$FFFFFE00
je @f
test ax,$01FF
jne @f
retn
@@: and ax,$FE00
add eax,$200
retn
endp
; выравнивает значение в eax до значения кратного 0x1000 в большую сторону
proc Align_0x1000
; -> EAX Value
or eax,eax
jne @f
retn
@@: test eax,$FFFFF000
je @f
test ax,$0FFF
jne @f
retn
@@: and ax,$F000
add eax,$1000
retn
endp
Оно же, элементарно, из пальца высасывается! Мож, не так извратно и нечитаемо, как у предыдущего оратора, но работать будет, и - быстро. Если бы ты спросил: "А этот код, действительно, выравнивает без ошибок?" - тада было бы ясно.