Subversion Repositories Kolibri OS

Rev

Rev 205 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 205 Rev 220
Line 3113... Line 3113...
3113
	je	jmp_imm_64bit
3113
	je	jmp_imm_64bit
3114
      jmp_imm_32bit:
3114
      jmp_imm_32bit:
3115
	cmp	[code_type],64
3115
	cmp	[code_type],64
3116
	je	invalid_operand_size
3116
	je	invalid_operand_size
3117
	call	get_dword_value
3117
	call	get_address_dword_value
3118
	cmp	[code_type],16
3118
	cmp	[code_type],16
3119
	jne	jmp_imm_32bit_prefix_ok
3119
	jne	jmp_imm_32bit_prefix_ok
3120
	mov	byte [edi],66h
3120
	mov	byte [edi],66h
3121
	inc	edi
3121
	inc	edi
3122
      jmp_imm_32bit_prefix_ok:
3122
      jmp_imm_32bit_prefix_ok:
3123
	call	calculate_jump_offset
3123
	call	calculate_jump_offset
Line 3135... Line 3135...
3135
	jmp	instruction_assembled
3135
	jmp	instruction_assembled
3136
      jmp_imm_64bit:
3136
      jmp_imm_64bit:
3137
	cmp	[code_type],64
3137
	cmp	[code_type],64
3138
	jne	invalid_operand_size
3138
	jne	invalid_operand_size
3139
	call	get_qword_value
3139
	call	get_address_qword_value
3140
	call	calculate_jump_offset
3140
	call	calculate_jump_offset
3141
	mov	ecx,edx
3141
	mov	ecx,edx
3142
	cdq
3142
	cdq
3143
	cmp	edx,ecx
3143
	cmp	edx,ecx
3144
	jne	value_out_of_range
3144
	jne	value_out_of_range
3145
	call	check_for_short_jump
3145
	call	check_for_short_jump
Line 3149... Line 3149...
3149
	mov	al,0EBh
3149
	mov	al,0EBh
3150
	stos	word [edi]
3150
	stos	word [edi]
3151
	jmp	instruction_assembled
3151
	jmp	instruction_assembled
3152
      jmp_imm_16bit:
3152
      jmp_imm_16bit:
3153
	call	get_word_value
3153
	call	get_address_word_value
3154
	cmp	[code_type],16
3154
	cmp	[code_type],16
3155
	je	jmp_imm_16bit_prefix_ok
3155
	je	jmp_imm_16bit_prefix_ok
3156
	mov	byte [edi],66h
3156
	mov	byte [edi],66h
3157
	inc	edi
3157
	inc	edi
3158
      jmp_imm_16bit_prefix_ok:
3158
      jmp_imm_16bit_prefix_ok:
3159
	call	calculate_jump_offset
3159
	call	calculate_jump_offset
Line 3288... Line 3288...
3288
	je	conditional_jump_64bit
3288
	je	conditional_jump_64bit
3289
      conditional_jump_32bit:
3289
      conditional_jump_32bit:
3290
	cmp	[code_type],64
3290
	cmp	[code_type],64
3291
	je	invalid_operand_size
3291
	je	invalid_operand_size
3292
	call	get_dword_value
3292
	call	get_address_dword_value
3293
	cmp	[code_type],16
3293
	cmp	[code_type],16
3294
	jne	conditional_jump_32bit_prefix_ok
3294
	jne	conditional_jump_32bit_prefix_ok
3295
	mov	byte [edi],66h
3295
	mov	byte [edi],66h
3296
	inc	edi
3296
	inc	edi
3297
      conditional_jump_32bit_prefix_ok:
3297
      conditional_jump_32bit_prefix_ok:
3298
	call	calculate_jump_offset
3298
	call	calculate_jump_offset
Line 3312... Line 3312...
3312
	jmp	instruction_assembled
3312
	jmp	instruction_assembled
3313
      conditional_jump_64bit:
3313
      conditional_jump_64bit:
3314
	cmp	[code_type],64
3314
	cmp	[code_type],64
3315
	jne	invalid_operand_size
3315
	jne	invalid_operand_size
3316
	call	get_qword_value
3316
	call	get_address_qword_value
3317
	call	calculate_jump_offset
3317
	call	calculate_jump_offset
3318
	mov	ecx,edx
3318
	mov	ecx,edx
3319
	cdq
3319
	cdq
3320
	cmp	edx,ecx
3320
	cmp	edx,ecx
3321
	jne	value_out_of_range
3321
	jne	value_out_of_range
3322
	call	check_for_short_jump
3322
	call	check_for_short_jump
Line 3326... Line 3326...
3326
	mov	al,[base_code]
3326
	mov	al,[base_code]
3327
	stos	word [edi]
3327
	stos	word [edi]
3328
	jmp	instruction_assembled
3328
	jmp	instruction_assembled
3329
      conditional_jump_16bit:
3329
      conditional_jump_16bit:
3330
	call	get_word_value
3330
	call	get_address_word_value
3331
	cmp	[code_type],16
3331
	cmp	[code_type],16
3332
	je	conditional_jump_16bit_prefix_ok
3332
	je	conditional_jump_16bit_prefix_ok
3333
	mov	byte [edi],66h
3333
	mov	byte [edi],66h
3334
	inc	edi
3334
	inc	edi
3335
      conditional_jump_16bit_prefix_ok:
3335
      conditional_jump_16bit_prefix_ok:
3336
	call	calculate_jump_offset
3336
	call	calculate_jump_offset
Line 3390... Line 3390...
3390
	je	loop_jump_64bit
3390
	je	loop_jump_64bit
3391
      loop_jump_32bit:
3391
      loop_jump_32bit:
3392
	cmp	[code_type],64
3392
	cmp	[code_type],64
3393
	je	invalid_operand_size
3393
	je	invalid_operand_size
3394
	call	get_dword_value
3394
	call	get_address_dword_value
3395
	cmp	[code_type],16
3395
	cmp	[code_type],16
3396
	jne	loop_jump_32bit_prefix_ok
3396
	jne	loop_jump_32bit_prefix_ok
3397
	mov	byte [edi],66h
3397
	mov	byte [edi],66h
3398
	inc	edi
3398
	inc	edi
3399
      loop_jump_32bit_prefix_ok:
3399
      loop_jump_32bit_prefix_ok:
3400
	call	calculate_jump_offset
3400
	call	calculate_jump_offset
Line 3405... Line 3405...
3405
	jmp	jump_out_of_range
3405
	jmp	jump_out_of_range
3406
      loop_jump_64bit:
3406
      loop_jump_64bit:
3407
	cmp	[code_type],64
3407
	cmp	[code_type],64
3408
	jne	invalid_operand_size
3408
	jne	invalid_operand_size
3409
	call	get_qword_value
3409
	call	get_address_qword_value
3410
	call	calculate_jump_offset
3410
	call	calculate_jump_offset
3411
	mov	ecx,edx
3411
	mov	ecx,edx
3412
	cdq
3412
	cdq
3413
	cmp	edx,ecx
3413
	cmp	edx,ecx
3414
	jne	value_out_of_range
3414
	jne	value_out_of_range
3415
	jmp	make_loop_jump
3415
	jmp	make_loop_jump
3416
      loop_jump_16bit:
3416
      loop_jump_16bit:
3417
	call	get_word_value
3417
	call	get_address_word_value
3418
	cmp	[code_type],16
3418
	cmp	[code_type],16
3419
	je	loop_jump_16bit_prefix_ok
3419
	je	loop_jump_16bit_prefix_ok
3420
	mov	byte [edi],66h
3420
	mov	byte [edi],66h
3421
	inc	edi
3421
	inc	edi
3422
      loop_jump_16bit_prefix_ok:
3422
      loop_jump_16bit_prefix_ok:
3423
	call	calculate_jump_offset
3423
	call	calculate_jump_offset
Line 6018... Line 6018...
6018
	mov	[address_high],edx
6018
	mov	[address_high],edx
6019
	cdq
6019
	cdq
6020
	cmp	edx,[address_high]
6020
	cmp	edx,[address_high]
6021
	jne	value_out_of_range
6021
	jne	value_out_of_range
6022
	mov	edx,[symbol_identifier]
6022
	mov	edx,eax
6023
	mov	[address_symbol],edx
-
 
6024
	mov	edx,eax
-
 
6025
	ror	ecx,16
6023
	ror	ecx,16
6026
	mov	cl,[value_type]
6024
	mov	cl,[value_type]
6027
	rol	ecx,16
6025
	rol	ecx,16
6028
	mov	bx,0FF00h
6026
	mov	bx,0FF00h
6029
      address_ok:
6027
      address_ok: