Subversion Repositories Kolibri OS

Rev

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

Rev 707 Rev 872
Line 3353... Line 3353...
3353
	jmp	instruction_assembled
3353
	jmp	instruction_assembled
3354
loop_instruction_16bit:
3354
loop_instruction_16bit:
3355
	cmp	[code_type],64
3355
	cmp	[code_type],64
3356
	je	illegal_instruction
3356
	je	illegal_instruction
3357
	mov	dl,al
3357
	cmp	[code_type],16
3358
	call	address_16bit_prefix
3358
	je	loop_instruction
3359
	mov	al,dl
3359
	mov	[operand_prefix],67h
3360
	jmp	loop_instruction
3360
	jmp	loop_instruction
3361
loop_instruction_32bit:
3361
loop_instruction_32bit:
3362
	mov	dl,al
3362
	cmp	[code_type],32
3363
	call	address_32bit_prefix
3363
	je	loop_instruction
3364
	mov	al,dl
3364
	mov	[operand_prefix],67h
3365
	jmp	loop_instruction
3365
      jmp     loop_instruction
3366
loop_instruction_64bit:
3366
loop_instruction_64bit:
3367
	cmp	[code_type],64
3367
	cmp	[code_type],64
3368
	jne	illegal_instruction
3368
	jne	illegal_instruction
3369
loop_instruction:
3369
loop_instruction:
3370
	mov	[base_code],al
3370
	mov	[base_code],al
Line 3398... Line 3398...
3398
	jne	loop_jump_32bit_prefix_ok
3398
	jne	loop_jump_32bit_prefix_ok
3399
	mov	byte [edi],66h
3399
	mov	byte [edi],66h
3400
	inc	edi
3400
	inc	edi
3401
      loop_jump_32bit_prefix_ok:
3401
      loop_jump_32bit_prefix_ok:
3402
	call	calculate_jump_offset
3402
	call	loop_counter_size
-
 
3403
	call	calculate_jump_offset
3403
	cdq
3404
	cdq
3404
      make_loop_jump:
3405
      make_loop_jump:
3405
	call	check_for_short_jump
3406
	call	check_for_short_jump
3406
	jc	conditional_jump_short
3407
	jc	conditional_jump_short
3407
	jmp	jump_out_of_range
3408
	jmp	jump_out_of_range
3408
      loop_jump_64bit:
3409
      loop_counter_size:
-
 
3410
	cmp	[operand_prefix],0
-
 
3411
	je	loop_counter_size_ok
-
 
3412
	push	eax
-
 
3413
	mov	al,[operand_prefix]
-
 
3414
	stos	byte [edi]
-
 
3415
	pop	eax
-
 
3416
      loop_counter_size_ok:
-
 
3417
	ret
-
 
3418
      loop_jump_64bit:
3409
	cmp	[code_type],64
3419
	cmp	[code_type],64
3410
	jne	invalid_operand_size
3420
	jne	invalid_operand_size
3411
	call	get_address_qword_value
3421
	call	get_address_qword_value
3412
	call	calculate_jump_offset
3422
	call	calculate_jump_offset
3413
	mov	ecx,edx
3423
	mov	ecx,edx
Line 3421... Line 3431...
3421
	je	loop_jump_16bit_prefix_ok
3431
	je	loop_jump_16bit_prefix_ok
3422
	mov	byte [edi],66h
3432
	mov	byte [edi],66h
3423
	inc	edi
3433
	inc	edi
3424
      loop_jump_16bit_prefix_ok:
3434
      loop_jump_16bit_prefix_ok:
3425
	call	calculate_jump_offset
3435
	call	loop_counter_size
-
 
3436
	call	calculate_jump_offset
3426
	cwde
3437
	cwde
3427
	cdq
3438
	cdq
3428
	jmp	make_loop_jump
3439
	jmp	make_loop_jump
3429
 
3440
 
Line 4883... Line 4894...
4883
	call	store_nomem_instruction
4894
	call	store_nomem_instruction
4884
	jmp	instruction_assembled
4895
	jmp	instruction_assembled
4885
      movq_mmreg_mmreg:
4896
      movq_mmreg_mmreg:
4886
	call	convert_mmx_register
4897
	call	convert_mmx_register
4887
	mov	bl,al
4898
	cmp	ah,[mmx_size]
-
 
4899
	jne	invalid_operand_size
-
 
4900
	mov	bl,al
4888
	call	store_nomem_instruction
4901
	call	store_nomem_instruction
4889
	jmp	instruction_assembled
4902
	jmp	instruction_assembled
4890
movdq_instruction:
4903
movdq_instruction:
4891
	mov	[operand_prefix],al
4904
	mov	[operand_prefix],al
4892
	mov	[base_code],0Fh
4905
	mov	[base_code],0Fh
Line 5837... Line 5850...
5837
	jne	invalid_operand
5850
	jne	invalid_operand
5838
	lods	byte [esi]
5851
	lods	byte [esi]
5839
	call	convert_register
5852
	call	convert_register
5840
	mov	[postbyte_register],al
5853
	mov	[postbyte_register],al
5841
	cmp	[operand_size],4
5854
	call	vmread_check_size
5842
	jne	invalid_operand_size
-
 
5843
	jmp	vmx_size_ok
5855
	jmp	vmx_size_ok
5844
      vmread_nomem:
5856
      vmread_nomem:
5845
	lods	byte [esi]
5857
	lods	byte [esi]
5846
	call	convert_register
5858
	call	convert_register
5847
	push	eax
5859
	push	eax
5848
	call	vmread_check_size
5860
	call	vmread_check_size
Line 5856... Line 5868...
5856
	jne	invalid_operand
5868
	jne	invalid_operand
5857
	lods	byte [esi]
5869
	lods	byte [esi]
5858
	call	convert_register
5870
	call	convert_register
5859
	mov	[postbyte_register],al
5871
	mov	[postbyte_register],al
5860
	cmp	[operand_size],4
5872
	call	vmread_check_size
5861
	jne	invalid_operand_size
-
 
5862
	pop	ebx
5873
	pop	ebx
5863
	mov	[base_code],0Fh
5874
	mov	[base_code],0Fh
5864
	call	store_nomem_instruction
5875
	call	store_nomem_instruction
5865
	jmp	instruction_assembled
5876
	jmp	instruction_assembled
5866
      vmread_check_size:
5877
      vmread_check_size:
5867
	cmp	[code_type],64
5878
	cmp	[code_type],64
Line 5881... Line 5892...
5881
	jne	invalid_operand
5892
	jne	invalid_operand
5882
	lods	byte [esi]
5893
	lods	byte [esi]
5883
	call	convert_register
5894
	call	convert_register
5884
	mov	[postbyte_register],al
5895
	mov	[postbyte_register],al
5885
	cmp	[operand_size],4
5896
	call	vmread_check_size
5886
	jne	invalid_operand_size
-
 
5887
	mov	[operand_size],0
5897
	mov	[operand_size],0
5888
	lods	byte [esi]
5898
	lods	byte [esi]
5889
	cmp	al,','
5899
	cmp	al,','
5890
	jne	invalid_operand
5900
	jne	invalid_operand
5891
	lods	byte [esi]
5901
	lods	byte [esi]
5892
	call	get_size_operator
5902
	call	get_size_operator
Line 6445... Line 6455...
6445
	jne	store_address_32bit_value
6455
	jne	store_address_32bit_value
6446
	mov	eax,edx
6456
	mov	eax,edx
6447
	cdq
6457
	cdq
6448
	cmp	edx,[address_high]
6458
	cmp	edx,[address_high]
6449
	jne	value_out_of_range
6459
	je	address_32bit_value_ok
-
 
6460
	cmp	[error_line],0
-
 
6461
	jne	address_32bit_value_ok
-
 
6462
	mov	edx,[current_line]
-
 
6463
	mov	[error_line],edx
-
 
6464
	mov	[error],value_out_of_range
6450
	mov	edx,eax
6465
      address_32bit_value_ok:
-
 
6466
	mov	edx,eax
6451
	jmp	store_address_32bit_value
6467
	jmp	store_address_32bit_value
6452
      sib_address_8bit_value:
6468
      sib_address_8bit_value:
6453
	or	al,01000000b
6469
	or	al,01000000b
6454
	mov	cl,[postbyte_register]
6470
	mov	cl,[postbyte_register]
6455
	shl	cl,3
6471
	shl	cl,3