| 指令 | 描述 |
| MOVAPS | 把4个对准的打包单精度值传送到XMM寄存器或者内存 |
| MOVUPS | 把4个不对准的打包单精度值传送到XMM寄存器或者内存 |
| MOVSS | 把1个单精度值传送到内存或者寄存器的低双字 |
| MOVLPS | 把2个单精度值传送到内存或者寄存器的低四字 |
| MOVHPS | 把2个单精度值传送到内存或者寄存器的高四字 |
| MOVLHPS | 把2个单精度值从低四字传送到高四字 |
| MOVHLPS | 把2个单精度值从高四字传送到低四字 |
.section .data
value1:
.float 12.34, 2345.543, -3493.2, 0.44901
value2:
.float -5439.234, 32121.4, 1.0094, 0.00003
.section .bss
.lcomm data, 16
.section .text
.global _start
_start:
nop
movups value1, %xmm0
movups value2, %xmm1
movups %xmm0, %xmm2
movups %xmm0, data
movl $1, %eax
movl $0, %ebx
int $0x80
(gdb) print $xmm0
$1 = {v4_float = {12.3400002, 2345.54297, -3493.19995, 0.449010015}, v2_double = {
5.6204289471764299e+24, 1.0439462282443856e-05}, v16_int8 = {-92, 112, 69, 65, -80, -104, 18,
69, 51, 83, 90, -59, -92, -28, -27, 62}, v8_int16 = {28836, 16709, -26448, 17682, 21299,
-15014, -7004, 16101}, v4_int32 = {1095069860, 1158846640, -983936205, 1055253668},
v2_int64 = {4977208420974555300, 4532279996355072819},
uint128 = 0x3ee5e4a4c55a5333451298b0414570a4}
(gdb) print $xmm1
$2 = {v4_float = {-5439.23389, 32121.4004, 1.00940001, 2.99999992e-05}, v2_double = {
8.7452727745837517e+33, 5.0800159140664774e-39}, v16_int8 = {-33, -7, -87, -59, -51, -14, -6,
70, 5, 52, -127, 63, -126, -88, -5, 55}, v8_int16 = {-1569, -14935, -3379, 18170, 13317,
16257, -22398, 14331}, v4_int32 = {-978716193, 1190851277, 1065432069, 939239554}, v2_int64 = {
5114667292431088095, 4034003168605058053}, uint128 = 0x37fba8823f81340546faf2cdc5a9f9df}
(gdb) print $xmm2
$3 = {v4_float = {12.3400002, 2345.54297, -3493.19995, 0.449010015}, v2_double = {
5.6204289471764299e+24, 1.0439462282443856e-05}, v16_int8 = {-92, 112, 69, 65, -80, -104, 18,
69, 51, 83, 90, -59, -92, -28, -27, 62}, v8_int16 = {28836, 16709, -26448, 17682, 21299,
-15014, -7004, 16101}, v4_int32 = {1095069860, 1158846640, -983936205, 1055253668},
v2_int64 = {4977208420974555300, 4532279996355072819},
uint128 = 0x3ee5e4a4c55a5333451298b0414570a4}
(gdb) x/4f &data
0x80490c0 <data>: 12.3400002 2345.54297 -3493.19995 0.449010015
| 指令 | 描述 |
| MOVAPD | 把2个对准的双精度值传送到XMM寄存器或者内存 |
| MOVUPD | 把2个不对准的双精度值传送到XMM寄存器或者内存 |
| MOVSD | 把1个双精度值传送到内存或者寄存器的低四字 |
| MOVHPD | 把1个双精度值传送到内存或者寄存器的高四字 |
| MOVLPD | |
| 把1个双精度值传送到内存或者寄存器的低四字 |
.section .data
value1:
.double 12.34, 2345.543
value2:
.double -5439.234, 32121.4
.section .bss
.lcomm data, 16
.section .text
.global _start
_start:
nop
movupd value1, %xmm0
movupd value2, %xmm1
movupd %xmm0, %xmm2
movupd %xmm0, data
movl $1, %eax
movl $0, %ebx
int $0x80
(gdb) print $xmm0
$1 = {v4_float = {5.84860315e+35, 2.63562489, 1.79352231e-36, 5.07264233}, v2_double = {12.34,
2345.5430000000001}, v16_int8 = {-82, 71, -31, 122, 20, -82, 40, 64, 117, -109, 24, 4, 22, 83,
-94, 64}, v8_int16 = {18350, 31457, -20972, 16424, -27787, 1048, 21270, 16546}, v4_int32 = {
2061584302, 1076407828, 68719477, 1084379926}, v2_int64 = {4623136420479977390,
4657376318677619573}, uint128 = 0x40a25316041893754028ae147ae147ae}
(gdb) print $xmm1
$2 = {v4_float = {-1.11704749e+24, -5.66396856, -1.58818684e-23, 6.98026705}, v2_double = {
-5439.2340000000004, 32121.400000000001}, v16_int8 = {68, -117, 108, -25, 59, 63, -75, -64,
-102, -103, -103, -103, 89, 94, -33, 64}, v8_int16 = {-29884, -6292, 16187, -16203, -26214,
-26215, 24153, 16607}, v4_int32 = {-412316860, -1061863621, -1717986918, 1088380505},
v2_int64 = {-4560669521124488380, 4674558677155944858},
uint128 = 0x40df5e599999999ac0b53f3be76c8b44}
(gdb) print $xmm2
$3 = {v4_float = {5.84860315e+35, 2.63562489, 1.79352231e-36, 5.07264233}, v2_double = {12.34,
2345.5430000000001}, v16_int8 = {-82, 71, -31, 122, 20, -82, 40, 64, 117, -109, 24, 4, 22, 83,
-94, 64}, v8_int16 = {18350, 31457, -20972, 16424, -27787, 1048, 21270, 16546}, v4_int32 = {
2061584302, 1076407828, 68719477, 1084379926}, v2_int64 = {4623136420479977390,
4657376318677619573}, uint128 = 0x40a25316041893754028ae147ae147ae}
(gdb) x/2gf &data
0x80490c0 <data>: 12.34 2345.5430000000001
| 欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |