/programs/develop/fasm/trunk/expressi.inc |
2034,17 → 2034,36 |
and ah,0Fh |
jz address_registers_sizes_ok |
cmp al,ah |
jne invalid_address |
jne address_sizes_do_not_match |
address_registers_sizes_ok: |
cmp al,4 |
je sib_allowed |
cmp al,8 |
je sib_allowed |
cmp al,0Fh |
je check_ip_relative_address |
or cl,cl |
jz check_word_value |
cmp cl,1 |
je check_word_value |
jmp invalid_address |
address_sizes_do_not_match: |
cmp al,0Fh |
jne invalid_address |
mov al,bh |
and al,0Fh |
cmp al,ah |
jne invalid_address |
check_ip_relative_address: |
cmp bh,0F4h |
je check_dword_value |
cmp bh,0F8h |
jne invalid_address |
mov eax,[edi] |
cdq |
cmp edx,[edi+4] |
jne range_exceeded |
ret |
get_address_register: |
or al,al |
jz address_register_ok |
/programs/develop/fasm/trunk/tables.inc |
89,6 → 89,7 |
db 3,'ecx',41h |
db 3,'edi',47h |
db 3,'edx',42h |
db 3,'eip',0F4h |
db 3,'esi',46h |
db 3,'esp',44h |
db 3,'r10',8Ah |
113,7 → 114,7 |
db 3,'rcx',81h |
db 3,'rdi',87h |
db 3,'rdx',82h |
db 3,'rip',0F0h |
db 3,'rip',0F8h |
db 3,'rsi',86h |
db 3,'rsp',84h |
db 2,'si',26h |
514,8 → 515,8 |
dw single_operand_instruction-assembler |
db 'neg',3 |
dw single_operand_instruction-assembler |
;db 'nop',90h |
;dw nop_instruction-assembler |
db 'nop',90h |
dw nop_instruction-assembler |
db 'not',2 |
dw single_operand_instruction-assembler |
db 'org',0 |
/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.11" |
VERSION_STRING equ "1.67.12" |
|
VERSION_MAJOR = 1 |
VERSION_MINOR = 67 |
/programs/develop/fasm/trunk/x86_64.inc |
6008,8 → 6008,12 |
test ch,0Fh |
jnz address_ok |
calculate_relative_address: |
mov edx,[address_high] |
call calculate_relative_offset |
mov [address_high],edx |
cdq |
cmp edx,[address_high] |
jne value_out_of_range |
mov edx,[symbol_identifier] |
mov [address_symbol],edx |
mov edx,eax |
6016,7 → 6020,6 |
mov bx,0FF00h |
address_ok: |
ret |
|
operand_16bit: |
cmp [code_type],16 |
je size_prefix_ok |
6146,8 → 6149,10 |
call store_segment_prefix_if_necessary |
or bx,bx |
jz address_immediate |
cmp bx,0F000h |
cmp bx,0F800h |
je address_rip_based |
cmp bx,0F400h |
je address_eip_based |
cmp bx,0FF00h |
je address_relative |
mov al,bl |
6485,6 → 6490,9 |
or al,cl |
stos word [edi] |
jmp store_address_32bit_value |
address_eip_based: |
mov al,67h |
stos byte [edi] |
address_rip_based: |
cmp [code_type],64 |
jne invalid_address |