Assembly 如何访问xmm寄存器中的值
我希望对用户输入的整数求和。我使用比较和跳跃设置了一个循环。这是我接近它的方式,但我无法让它工作Assembly 如何访问xmm寄存器中的值,assembly,nasm,cpu-registers,sse,Assembly,Nasm,Cpu Registers,Sse,我希望对用户输入的整数求和。我使用比较和跳跃设置了一个循环。这是我接近它的方式,但我无法让它工作 ;====Display message asking user======== mov qword rdi, stringformat mov qword rsi, promptfloatnumber mov
;====Display message asking user========
mov qword rdi, stringformat
mov qword rsi, promptfloatnumber
mov qword rax, 0
call printf
;====Input number========
push qword 0
mov qword rdi, floatinputformat
mov qword rsi, rsp
mov qword rax, 0
call scanf
pop r14
;===== Copy input to SSE======
push r14
movsd xmm1, [rsp]
pop rax
;=== Keeps a total count throughout the loops? =====
addsd xmm0,xmm1 ;xmm0 = xmm0 + xmm1
;Then it jumps back up if user wants to input more values
然后我只需要显示xmm0,这是总的权利?我不知道该怎么做。我试过这样的东西
mov rdi, formatfloatdecimaloutput
mov qword rax, 1
call printf
这就是我的OS X机器上的
clang
是如何做到的——为了清晰起见,对其进行了注释:
# this is the constant '(double)2.5'
LCPI0_0:
.quad 4612811918334230528 ## double 2.500000e+00
## (0x4004000000000000)
leaq L_.str(%rip), %rdi # arg1 = format string address
movsd LCPI0_0(%rip), %xmm0 # float arg2 = 2.5
movb $1, %al # number of floating-point arguments
callq _printf
.section __TEXT,__cstring,cstring_literals
L_.str:
.asciz "%f\n" # here's the format string