/programs/develop/fasm/trunk/formats.inc |
---|
1418,13 → 1418,13 |
jmp instruction_assembled |
mark_pe_relocation: |
push eax ebx |
mov al,2 |
test [format_flags],8 |
jz check_pe32_relocation_type |
cmp [value_type],4 |
jz check_pe_relocation_type |
mov al,4 |
check_pe_relocation_type: |
cmp [value_type],al |
je pe_relocation_type_ok |
check_pe32_relocation_type: |
cmp [value_type],2 |
je pe_relocation_type_ok |
cmp [error_line],0 |
jne pe_relocation_type_ok |
mov eax,[current_line] |
1438,18 → 1438,11 |
mov ebx,[free_additional_memory] |
inc [number_of_relocations] |
jz invalid_use_of_symbol |
add ebx,5 |
mov [ebx],eax |
add ebx,4 |
cmp ebx,[structures_buffer] |
jae out_of_memory |
mov [free_additional_memory],ebx |
mov [ebx-5],eax |
cmp [value_type],2 |
je fixup_32bit |
mov byte [ebx-1],0Ah |
jmp fixup_ok |
fixup_32bit: |
mov byte [ebx-1],3 |
fixup_ok: |
pop ebx eax |
ret |
generate_pe_data: |
1458,53 → 1451,6 |
cmp al,5 |
je make_pe_fixups |
ret |
make_pe_fixups: |
bts [resolver_flags],0 |
jc pe_relocatable_ok |
or [next_pass_needed],-1 |
pe_relocatable_ok: |
push esi |
mov ecx,[number_of_relocations] |
mov esi,[free_additional_memory] |
lea eax,[ecx*5] |
sub esi,eax |
mov [free_additional_memory],esi |
or [number_of_relocations],-1 |
xor edx,edx |
mov ebp,edi |
make_fixups: |
cmp [esi],edx |
jb store_fixup |
mov eax,edi |
sub eax,ebp |
test eax,11b |
jz fixups_block |
xor ax,ax |
stos word [edi] |
add dword [ebx],2 |
fixups_block: |
mov eax,edx |
add edx,1000h |
cmp [esi],edx |
jae fixups_block |
stos dword [edi] |
mov ebx,edi |
mov eax,8 |
stos dword [edi] |
store_fixup: |
jecxz fixups_done |
add dword [ebx],2 |
mov eax,[esi] |
and ax,0FFFh |
mov dl,[esi+4] |
shl dx,12 |
or ax,dx |
stos word [edi] |
add esi,5 |
loop make_fixups |
fixups_done: |
pop esi |
ret |
make_pe_resource: |
cmp byte [esi],82h |
jne resource_done |
2071,6 → 2017,58 |
mov [resource_size],eax |
resource_done: |
ret |
make_pe_fixups: |
bts [resolver_flags],0 |
jc pe_relocatable_ok |
or [next_pass_needed],-1 |
pe_relocatable_ok: |
push esi |
mov ecx,[number_of_relocations] |
mov esi,[free_additional_memory] |
mov eax,ecx |
shl eax,2 |
sub esi,eax |
mov [free_additional_memory],esi |
or [number_of_relocations],-1 |
xor edx,edx |
mov ebp,edi |
make_fixups: |
cmp [esi],edx |
jb store_fixup |
mov eax,edi |
sub eax,ebp |
test eax,11b |
jz fixups_block |
xor ax,ax |
stos word [edi] |
add dword [ebx],2 |
fixups_block: |
mov eax,edx |
add edx,1000h |
cmp [esi],edx |
jae fixups_block |
stos dword [edi] |
mov ebx,edi |
mov eax,8 |
stos dword [edi] |
store_fixup: |
jecxz fixups_done |
add dword [ebx],2 |
mov eax,[esi] |
and ax,0FFFh |
test [format_flags],8 |
jnz fixup_64bit |
or ax,3000h |
jmp fixup_ok |
fixup_64bit: |
or ax,0A000h |
fixup_ok: |
stos word [edi] |
add esi,4 |
loop make_fixups |
fixups_done: |
pop esi |
ret |
close_pe: |
call close_pe_section |
mov edx,[code_start] |
/programs/develop/fasm/trunk/version.inc |
---|
33,7 → 33,7 |
; cannot simply be copied and put under another distribution licence |
; (including the GNU Public Licence). |
VERSION_STRING equ "1.67.21" |
VERSION_STRING equ "1.67.20" |
VERSION_MAJOR = 1 |
VERSION_MINOR = 67 |
/programs/develop/fasm/trunk/x86_64.inc |
---|
1402,7 → 1402,6 |
cmp al,70h |
jae invalid_operand |
sub al,61h |
jc invalid_operand |
cmp al,4 |
jae push_sreg_386 |
shl al,3 |
1682,7 → 1681,6 |
cmp al,70h |
jae invalid_operand |
sub al,61h |
jc invalid_operand |
cmp al,4 |
jae pop_sreg_386 |
shl al,3 |
/programs/develop/fasm/trunk/fasm.asm |
---|
12,6 → 12,10 |
CONSOLE_MODE = 32 |
MAGIC1 = 6*(text.line_size-1)+14 |
MAGIC2 = 14 |
MAGIC3 = 1 |
MAGIC4 = 7 |
OUTPUTXY = 7 shl 16 + 53 |
MAX_PATH = 100 |
APP_MEMORY = 0x00800000 |
160,21 → 164,21 |
sub ebx,10 |
push ecx |
madd ecx, 14*3+2, 14*3+2 |
madd ecx,MAGIC2*3+2,MAGIC2*3+2 |
mcall 38,,,[sc.work_graph] |
pop ecx |
sub ebx,MAGIC1+3 |
mcall |
madd ecx, 14, 14 |
madd ecx,MAGIC2,MAGIC2 |
mcall |
madd ecx, 14, 14 |
madd ecx,MAGIC2,MAGIC2 |
mcall |
madd ecx, 14, 14 |
madd ecx,MAGIC2,MAGIC2 |
mcall |
push ebx |
mpack ebx,MAGIC1,MAGIC1 |
sub ecx, 14*3 |
sub ecx,MAGIC2*3 |
mcall |
mov ebx,[esp-2] |
pop bx |
182,23 → 186,23 |
add esp,2 |
mpack ebx,0,MAGIC1-1 |
mpack ecx,1+1, 14-2 |
mpack ecx,MAGIC3+1,MAGIC2-2 |
mcall 8,,,0x4000000B ; Button: Enter Infile |
madd ecx, 14,0 |
madd ecx,MAGIC2,0 |
mcall ,,,0x4000000C ; Button: Enter Outfile |
madd ecx, 14,0 |
madd ecx,MAGIC2,0 |
mcall ,,,0x4000000D ; Button: Enter Path |
mpack ebx,[pinfo.x_size],MAGIC1 |
msub ebx,MAGIC1+10+1,0 |
mpack ecx,0, 14*3/2-1 |
madd ecx,1,0 |
mpack ecx,0,MAGIC2*3/2-1 |
madd ecx,MAGIC3,0 |
mcall ,,,0x00000002,[sc.work_button] |
madd ecx, 14*3/2+1,0 |
madd ecx,MAGIC2*3/2+1,0 |
mcall ,,,0x00000003 |
mpack ebx,6,0 ; Draw Window Text |
add ebx,1+ 14/2-3 |
add ebx,MAGIC3+MAGIC2/2-3 |
mov ecx,[sc.work_text] |
mov edx,text |
mov esi,text.line_size |
205,7 → 209,7 |
mov eax,4 |
newline: |
int 0x40 |
add ebx, 14 |
add ebx,MAGIC2 |
add edx,text.line_size |
cmp byte[edx],'x' |
jne newline |
213,13 → 217,13 |
mov ebx,[pinfo.x_size] |
sub ebx,MAGIC1+10+1-9 |
shl ebx,16 |
add ebx,1+( 14*3/2-1)/2-3 |
add ebx,MAGIC3+(MAGIC2*3/2-1)/2-3 |
mcall ,,[sc.work_button_text],s_compile,7 |
add ebx,14*3/2+1 |
add ebx,MAGIC2*3/2+1 |
mcall ,,,s_run |
mpack ebx,MAGIC1+6,0 |
add ebx,1+ 14/2-3+ 14*0 |
add ebx,MAGIC3+MAGIC2/2-3+MAGIC2*0 |
mov esi,[pinfo.x_size] |
sub esi,MAGIC1*2+5*2+6+3 |
mov eax,esi |
230,9 → 234,9 |
mov al,MAX_PATH |
@@: movzx esi,al |
mcall 4,,[sc.work_text],infile |
add ebx,14 |
add ebx,MAGIC2 |
mcall ,,,outfile |
add ebx,14 |
add ebx,MAGIC2 |
mcall ,,,path |
call draw_messages |
246,14 → 250,14 |
draw_messages: |
mov eax,13 ; clear work area |
mpack ebx,7-2,[pinfo.x_size] |
sub ebx,5*2+7*2-1-2*2 |
mpack ebx,MAGIC4-2,[pinfo.x_size] |
sub ebx,5*2+MAGIC4*2-1-2*2 |
mpack ecx,0,[pinfo.y_size] |
madd ecx, 14*3+1+7+1,-( 14*3+1+7*2+25) |
madd ecx,MAGIC2*3+MAGIC3+MAGIC4+1,-(MAGIC2*3+MAGIC3+MAGIC4*2+25) |
mov word[bottom_right+2],bx |
mov word[bottom_right],cx |
msub [bottom_right],7,11 |
add [bottom_right],7 shl 16 + 53 |
add [bottom_right],OUTPUTXY |
mov edx,[sc.work] |
int 0x40 |
_cy = 0 |
261,7 → 265,7 |
_cx = 4 |
_sx = 6 |
push ebx ecx |
mpack ebx,4,5 |
mpack ebx,MAGIC4-3,MAGIC4-2 |
add bx,[esp+_cx] |
mov ecx,[esp+_sy-2] |
mov cx,[esp+_sy] |
273,7 → 277,7 |
add ecx,esi |
madd ecx,1,1 |
mcall |
mpack ebx,4,4 |
mpack ebx,MAGIC4-3,MAGIC4-3 |
mov esi,[esp+_sy-2] |
mov si,cx |
mov ecx,esi |
290,13 → 294,13 |
; read string |
f1: mov [addr],infile |
add [ya], 14*0 |
add [ya],MAGIC2*0 |
jmp rk |
f2: mov [addr],outfile |
add [ya], 14*1 |
add [ya],MAGIC2*1 |
jmp rk |
f3: mov [addr],path |
add [ya], 14*2 |
add [ya],MAGIC2*2 |
rk: |
mov edi,[addr] |
361,7 → 365,7 |
print_text: |
mpack ebx,MAGIC1+6,[pinfo.x_size] |
sub ebx,MAGIC1*2+19 |
sub ebx,MAGIC1*2+5*2+6+3 |
movzx esi,bx |
mov ecx,[ya-2] |
mov cx,8 |
427,7 → 431,7 |
call draw_messages |
push 0 |
pop [textxy] |
add [textxy],7 shl 16 + 53 |
add [textxy],OUTPUTXY |
@@: |
mov esi,_logo |
call display_string |
493,6 → 497,7 |
include 'system.inc' |
include 'version.inc' |
include 'errors.inc' |
include 'expressi.inc' |
/programs/develop/fasm/trunk/system.inc |
---|
324,7 → 324,7 |
cmp dl,0xa |
jnz dc1 |
and [textxy],0x0000FFFF |
add [textxy], 7 shl 16 +53 and 0xFFFF0000 + 10 |
add [textxy],OUTPUTXY and 0xFFFF0000 + 10 |
dc2: |
popa |
ret |
398,7 → 398,7 |
display_user_messages: |
; push [skinh] |
; pop [textxy] |
; add [textxy], 7 shl 16 +53 |
; add [textxy],OUTPUTXY |
mov [displayed_count],0 |
call flush_display_buffer |
cmp [displayed_count],1 |