| |
|
|
p.specht
| Das folgende Prog para X4-ASM erstellt el Spatprodukt zweier Vektoren a a Dimension 500 x 500. Lo es es una Demonstration sin jedwede Gewähr!
Formel: c_i,j = a_i X (b_j)'
Título de la ventana "Spatprodukt zweier Randwert-Vektoren en una Matrix, con X4-ASM"
Ventana de Estilo 24:Cls:set("AsmMode",0)
'--------------------------
Var Asize& = 20
Var Bsize& = 4' ... Beispiele
'{--------------------------
imprimir "\n Spatprodukt zweier Randwert-Vektoren | . __ con el Dimensionen ";
imprimir format$("#,##0",Asize&);" y ";format$("#,##0",Bsize&)
declarar i&,j&,err&,tmp&,tm&
tmp&=&gettickcount
declarar a![Asize&-1],b![Bsize&-1],c![Asize&-1,Bsize&-1]
tmp&=&gettickcount-tmp&
Imprimir "\n Vektoren y Spat deklariert en ";tmp&;" ms."
'}
'{
imprimir "\n Werte zugewiesen en ... ";:Selección aleatoria
tmp&=&gettickcount
a![]=&index+1' rnd() ' 2e10
b![]=10*&index'rnd(100) ' rnd() ' -1.1e10
tmp&=&gettickcount-tmp&
imprimir tmp&; " ms."
'}
'{asmSPATPRODfloat
ASM "aSPATPRODf",5'addr(a![0]),sizeof(a![]),addr(b![0]),sizeof(b![]),addr(c![0,0])
'Irrtümer abfangen
mov edi,par2:cmp edi,501:jge err1
mov edi,par4:cmp edi,501:jge err1
'Init
mov eax,par1'vec->a_ram
mov ebx,par3'vec->b_ram
mov ecx,par5'vec->c_ram
mov edx,0'i->a
mov esi,0'j->b
FINIT
MAINLOOP:
FLD qword ptr [eax]
FLD qword ptr [ebx]
FMUL
FSTP qword ptr [ecx]
'nextrow:
inc edx
cmp edx,par2'if row = size_a
je prepnextcol
add eax,8
add ecx,8
jmp MAINLOOP
prepnextcol:
inc esi'nextcol
cmp esi,par4'if col=size_b
je noerr'then ende
mov edx,0
mov eax,par1'más resetvec_a
add ebx,8'next vec_b
add ecx,8'incr vec_c
jmp MAINLOOP
'Fehlertabelle
err1:
mov eax,$FFFFFFFF
jmp fertig
noerr:
mov eax,0
fertig:
ENDASM
tm&=&gettickcount
err&=aSPATPRODf( addr(a![0]),sizeof(a![]), addr(b![0]),sizeof(b![]), addr(c![0,0]) )
tm&=&gettickcount-tm&
'}
'{ Ausgabeteil
if err&
font 2:imprimir "\n *** Error ";err&;": Vektor a groß! ***":font 0
más
set("decimals",14):set("numwidth",18)
font 2:imprimir "\n\n Ergebnis errechnet en ";tm&;" ms."
waitinput 5000
imprimir "\n Spatmatrix:\n":font 0
whileloop 0,Asize&-1:i&=&Loop
whileloop 0,Bsize&-1:j&=&Loop
imprimir c![i&,j&],
endwhile:imprimir
endwhile:imprimir "\n---":beep
endif
waitinput
end
'}
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 26.05.2021 ▲ |
|
|
|