Naja, ganz so "klar" ist das nicht:FPK hat geschrieben:Kurzform: Der Typ des Ergebnisses einer Operation hängt immer von den Typen der Operanden ab, bei arithmetischen Operationen gilt eigentlich immer, dass der Typ gewählt wird, in den beiden Operanden passen, bei word*word ist das eben word, bei word*integer ist das longint. Damit ist klar, dass word*integer eine 32 Bit Operation verursacht.
Code: Alles auswählen
# [42] c_i32 := a_i16 * b_i16;
	lds	r18,(U_sMT_MATH_ss_A_I16)
	lds	r21,(U_sMT_MATH_ss_A_I16+1)
	lds	r22,(U_sMT_MATH_ss_B_I16)
	lds	r23,(U_sMT_MATH_ss_B_I16+1)
	mul	r18,r22
	mov	r19,r0
	mov	r20,r1
	mul	r21,r22
	add	r20,r0
	mul	r18,r23
	add	r20,r0
	clr	r1
	mov	r21,r20
	mov	r18,r1
	sbrc	r20,7
	com	r18
	mov	r20,r18
	sts	(U_sMT_MATH_ss_C_I32),r19
	sts	(U_sMT_MATH_ss_C_I32+1),r21
	sts	(U_sMT_MATH_ss_C_I32+2),r18
	sts	(U_sMT_MATH_ss_C_I32+3),r20Code: Alles auswählen
# [42] b_u16 := 15 * a_u16;
	lds	r18,(U_sMT_MATH_ss_A_U16)
	lds	r19,(U_sMT_MATH_ss_A_U16+1)
	mov	r20,r1
	mov	r21,r1
	ldi	r22,15
	mov	r23,r1
	mov	r24,r1
	mov	r25,r1
	call	fpc_mul_longint
	sts	(U_sMT_MATH_ss_B_U16),r22
	sts	(U_sMT_MATH_ss_B_U16+1),r23Stimmt für uint16 nicht. Bei int16, uint32, int32 macht er durchaus das Shift über alle 8 Bits für alle 2 oder 4 Bytes. Ich denk mir das doch nicht aus.FPK hat geschrieben:Stimmt für trunk jedenfalls nicht mehr:
 



 Verein
Verein 
 Links
Links Suche
Suche