# An example of using 128-bit SSE register (传送SSE整数)
# movdqa movdqu 用于把128位数据传送到XMM寄存器中,或者在XMM寄存器之间传送数据。
#
# 助记符 A 和 U 部分代表对准和不对准,它们表示数据是如何存储在内存中的。
#
# 对于对准16个字节边界的数据,就使用A选项,否则,就使用U选项。
#
# movdqa source, destination
#
# movdqa reg(128bit)/mm(128bit), reg(128bit)/mm(128bit)
#
# 注意: 不能在两个内存位置之间传送数据
.section .data
values1:
.int 1, -1, 0, 135246
values2:
.quad 1, -1
.section .text
.globl main
main:
nop
movdqu values1, %xmm0
movdqu values2, %xmm1
movl $1, %eax
movl $0, %ebx
int $0x80
# gcc -g -o 05-movdqa 05-movdqa.s -m32
gdb -q -f 05-movdqa
Reading symbols from 05-movdqa...
(gdb) b 25
Breakpoint 1 at 0x119e: file 05-movdqa.s, line 25.
(gdb) r
Starting program: /home/05-movdqa
Breakpoint 1, main () at 05-movdqa.s:25
/home/05-movdqa.s:25:544:beg:0x5655619e
25 movdqu values1, %xmm0
(gdb) s
/home/05-movdqa.s:26:568:beg:0x565561a6
26 movdqu values2, %xmm1
(gdb)
/home/05-movdqa.s:28:594:beg:0x565561ae
28 movl $1, %eax
(gdb) p/x $xmm0
$1 = {v4_float = {0x0, 0xffffffff, 0x0, 0x0}, v2_double = {0x7fffffffffffffff, 0x0}, v16_int8 = {0x1, 0x0, 0x0,
0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x4e, 0x10, 0x2, 0x0}, v8_int16 = {0x1, 0x0, 0xffff,
0xffff, 0x0, 0x0, 0x104e, 0x2}, v4_int32 = {0x1, 0xffffffff, 0x0, 0x2104e}, v2_int64 = {0xffffffff00000001,
0x2104e00000000}, uint128 = 0x2104e00000000ffffffff00000001}
(gdb) p/x $xmm1
$2 = {v4_float = {0x0, 0x0, 0xffffffff, 0xffffffff}, v2_double = {0x0, 0x7fffffffffffffff}, v16_int8 = {0x1,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, v8_int16 = {0x1, 0x0,
0x0, 0x0, 0xffff, 0xffff, 0xffff, 0xffff}, v4_int32 = {0x1, 0x0, 0xffffffff, 0xffffffff}, v2_int64 = {0x1,
0xffffffffffffffff}, uint128 = 0xffffffffffffffff0000000000000001}