文章目录
- 数字类型
- 整数
- SIMD 整数
- 二进制编码十进制
- 浮点数
- 转换
数字类型
- 无符号整数
- 有符号整数
- 二进制编码十进制
- 压缩二进制编码十进制
- 单精度浮点数
- 双精度浮点数
- 双扩展浮点数
SIMD 扩展类型- 64位压缩整数
- 128位压缩整数
- 128位压缩单精度浮点数
- 128位压缩双精度浮点数
整数
- 标准的整数大小
- Byte
- Word
- Doubleword
- Quadword
- 无符号整数
- 有符号整数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14# inttest.s - An example of using signed integers .section .data data: .int -45 .section .text .globl _start _start: nop movl $-345, %ecx movw $0xffb1, %dx movl data, %ebx movl $1, %eax int $0x80
- 扩展无符号整数
- 格式
movzx source, destination - 示例
- 格式
复制代码
1
2
3
4
5
6
7
8
9
10# movzxtest.s - An example of the MOVZX instruction .section .text .globl _start _start: nop movl $279, %ecx movzx %cl, %ebx movl $1, %eax int $0x80
- 扩展有符号整数
- 格式
movsx source, destination - 示例
- 格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13# movsxtest.s - An example of the MOVSX instruction .section .text .globl _start _start: nop movw $-79, %cx movl $0, %ebx movw %cx, %bx movsx %cx, %eax movl $1, %eax movl $0, %ebx int $0x80
- 在GAS中定义整数
- 示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14# quadtest.s - An example of quad integers .section .data data1: .int 1, -1, 463345, -333252322, 0 data2: .quad 1, -1, 463345, -333252322, 0 .section .text .globl _start _start: nop movl $1, %eax movl $0, %ebx int $0x80
SIMD 整数
- MMX整数
- 64位压缩字节整数
- 64位压缩字整数
- 64位压缩双字整数
- 移动MMX整数
- 格式
movq source, destination - 示例
- 格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# mmxtest.s - An example of using the MMX data types .section .data values1: .int 1, -1 values2: .byte 0x10, 0x50, 0xff, 0x32, 0x47, 0xe4, 0x00, 0x01 .section .text .globl _start _start: nop movq values1, %mm0 movq values2, %mm1 movl $1, %eax movl $0, %ebx int $0x80
- SSE 整数
- 128位压缩字节整数
- 128位压缩字整数
- 128位压缩双字整数
- 128位压缩四字整数
- 移动SSE整数
- 格式
movdqa source, destination - 示例
- 格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# ssetest.s - An example of using 128-bit SSE registers .section .data values1: .int 1, -1, 0, 135246 values2: .quad 1, -1 .section .text .globl _start _start: nop movdqu values1, %xmm0 movdqu values2, %xmm1 movl $1, %eax movl $0, %ebx int $0x80
二进制编码十进制
- BCD编码
- FPU BCD 值
- 格式
- fbld source 存入
- fbstp source 取出
- 示例
- 格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# bcdtest.s - An example of using BCD integer values .section .data data1: .byte 0x34, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00 data2: .int 2 .section .text .globl _start _start: nop fbld data1 fimul data2 fbstp data1 movl $1, %eax movl $0, %ebx int $0x80
浮点数
- 概念
- 科学计数法
- 二进制标记法
- 标准的浮点数类型
- 组成部分
- 标志位
- 有效数字
- 指数
- 组成部分
- IA-32 浮点数的值
数据类型 | 长度 | 有效数字长度 | 指数长度 | 范围 |
---|---|---|---|---|
单精度 | 32 | 24 | 8 | 1.1810^-38 ~ 3.4010^38 |
双精度 | 64 | 53 | 11 | 2.2310^-308 ~ 1.7910^308 |
扩展 | 80 | 64 | 15 | 3.3710^-4932 ~ 1.1810^4932 |
- 浮点数格式
- .float
- .double
- 移动浮点数
- 格式
fld source - 示例
- 格式
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# floattest.s - An example of using floating point numbers .section .data value1: .float 12.34 values2: .double 2353.631 .section .bss .lcomm data, 8 .section .text .globl _start _start: nop flds values1 fldl values2 fstl data movl $1, %eax movl $0, %ebx int $0x80
- 使用预置的浮点值
指令 | 描述 |
---|---|
FLD1 | 1.0 -> stack |
FLDL2T | log(base2)10 ->stack |
FLDL2E | log(base2)e -> stack |
FLDPI | pi -> stack |
FLDLG2 | log(base 10)2 -> stack |
FLDLN2 | log(base e)2 -> stack |
FLDZ | 0 -> stack |
复制代码
1
2* 示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# fpuvals.s - An example of pushing floating point constants .section .text .globl _start _start: nop fld1 fldl2t fldl2e fldpi fldlg2 fldln2 fldz movl $1, %eax movl $0, %ebx int $0x80
- SSE 浮点类型
- 单精度
指令 | 描述 |
---|---|
MOVAPS | 将4个对齐的单精度浮点数移动到寄存器或内存 |
MOVUPS | 将4个非对齐的单精度浮点数值移动到寄存器或内存 |
MOVSS | 将一个单精度浮点数移动到内存或一个寄存器的低双字 |
MOVLPS | 将两个单精度浮点数移动到内存或低四字寄存器 |
MOVHPS | 将两个单精度浮点数移动到内存或高四字寄存器 |
MOVLHPS | 从寄存器的低四字取出两个单精度浮点数 |
MOVHLPS | 从寄存器的高四字取出两个单精度浮点数 |
复制代码
1
2* 示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# ssefloat.s - An example of moving SSE FP data types .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 .globl _start _start: nop movups value1, %xmm0 movups value2, %xmm1 movups %xmm0, %xmm2 movups %xmm0, data movl $1, %eax movl $0, %ebx int $0x80
复制代码
1
2* 双精度
指令 | 描述 |
---|---|
MOVAPD | 将两个对齐的双精度浮点数移动到xmm寄存器 |
MOVUPD | 将两个非对齐的双精度浮点数移动到xmm寄存器 |
MOVSD | 将一个双精度的浮点数移动到内存或寄存器的低四字 |
MOVHPD | 将一个双精度浮点数移动到内存或寄存器的高四字 |
MOVLPD | 将一个双精度的浮点数移动到内存或低四字寄存器 |
复制代码
1
2* 示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# sse2float.s - An example of moving SSE2 FP data types .section .data value1: .double 12.34, 2345.543 value2: .double -5439.234, 32121.4 .section .bss .lcomm data, 16 .section .text .globl _start _start: nop movupd value1, %xmm0 movupd value2, %xmm1 movupd %xmm0, %xmm2 movupd %xmm0, data movl $1, %eax movl $0, %ebx int $0x80
转换
- 转换指令
指令 | 描述 |
---|---|
CVTDQ2PD | 压缩双字整数转换成压缩双精度浮点数 |
CVTDQ2PS | 压缩双字整数转换成单精度浮点数 |
CVTPD2DQ | 将两个压缩双精度浮点数转换成双字整数 |
CVTPD2PI | 将两个压缩双精度浮点数转换成双字整数 |
CVTPD2PS | 将两个双精度浮点数转换成压缩单精度浮点数 |
CVTPI2PD | 将压缩双字整数转换成压缩双精度浮点数 |
CVTPI2PS | 将压缩双字整数转换成单精度浮点数 |
CVTPS2DQ | 将压缩单精度浮点数转换成双字整数 |
CVTPS2PD | 将压缩单精度浮点数转换成压缩双精度浮点数 |
CVTPS2PI | 将压缩单精度浮点数转换成双字整数 |
CVTTPD2PI | 将压缩双精度浮点数转换成压缩双字整数 |
CVTTPD2DQ | 将压缩双精度浮点数转换成压缩双字整数 |
CVTTPS2DQ | 将压缩单精度浮点数转换成压缩双字整数 |
CVTTPS2PI | 将压缩单精度浮点数转换成压缩双字整数 |
- 示例
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# convtest.s - An example of data conversion .section .data value1: .float 1.25, 124.79, 200.0, -312.5 value2: .int 1, -435, 0, -25 .section .bss data: .lcomm data, 16 .section .text .globl _start _start: nop cvtps2dq value1, %xmm0 cvttps2dq value1, %xmm1 cvcvtdq2ps value2, %xmm2 movdqu %xmm0, data movl $1, %eax movl $0, %ebx int $0x80
最后
以上就是留胡子宝贝最近收集整理的关于AT&T汇编中的数字数字类型整数SIMD 整数二进制编码十进制浮点数转换的全部内容,更多相关AT&T汇编中的数字数字类型整数SIMD内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复