wenn ich mit dem befehl mulps/divps zwei xmm register multipliziere/addiere
erhalte ich nicht das gewünschte ergebnis.
bei der addition klappts, und bei der subtraktion auch, solange das ergebnis >= 0.
in den wunderbaren folien steht es auch nicht wirklich anders.
muss ich movaps benutzen, wenn ich multiplizieren will?
wenn ja, wie stelle ich sicher, dass die adressen meiner zeilen etc druch 4 teilbar sind.
Code: Alles auswählen
.data
zeile0: .long 10,10,10,10
vektor: .long 20,3,2,1
result: .long 0,0,0,0
str: .string "%d\n"
.text
.globl main
main:
leal zeile0, %esi
movups (%esi), %xmm0
leal vektor, %esi
movups (%esi), %xmm3
#addps %xmm0, %xmm3 # liefert 30
#divps %xmm0, %xmm3 # liefert 1073741834 anstatt 20/10 = 2
#subps %xmm0, %xmm3 # liefert 20-10 = 10
#mulps %xmm0, %xmm3 # liefert 0 anstatt 200
leal result, %eax
movups %xmm3, (%eax)
movl (%eax), %eax
pushl %eax
pushl $str
call printf
end:
movl $1, %eax
int $0x80