中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] [3] [4] [5] [6] [7] [8] [9] »
作者:
标题: 进制转换 上一主题 | 下一主题
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 46 楼』:  

指令集
编辑词条
指令集
指令集(2)
指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序。拥有这些指令集,CPU就可以更高效地运行。Intel有x86,x86-64,MMX,SSE,SSE2,SSE3,SSSE3(SuperSSE3),SSE4.1,SSE4.2和针对64位桌面处理器的EM-64T。AMD主要是3D-Now!指令集。在原有的指令集基础上,增加到52条指令,其中包含了部分SSE指令,该指令集主要用于新型的AMD CPU上。
快速导航
词条图册
中文名称        指令集
外文名称        Instruction set
作用对象        新型的AMDCPU       
含义        指令集是存储在CPU内部
分类        SSE指令集
指令数量        52条


1简介
2其他
3词条图册
1 简介 编辑
SSE指令集

Streaming SIMD Extensions

由于MMX指令并没有带来3D游戏性能的显著提升,1999年Intel公司在Pentium IIICPU产品中推出了数据流单指令序列扩展指令(SSE)。SSE兼容MMX指令,它可以通过SIMD(单指令多数据技术)和单时钟周期并行处理多个浮点来有效地提高浮点运算速度。

在MMX指令集中,借用了浮点处理器的8个寄存器,这样导致了浮点运算速度降低。而在SSE指令集推出时,Intel公司在Pentium III CPU中增加了8个128位的SSE指令专用寄存器。而且SSE指令寄存器可以全速运行,保证了与浮点运算的并行性。[1]

SSE2指令集

在Pentium 4 CPU中,Intel公司开发了新指令集SSE2。这一次新开发的SSE2指令一共144条,包括浮点SIMD指令、整形SIMD指令、SIMD浮点和整形数据之间转换、数据在MMX寄存器中转换等几大部分。其中重要的改进包括引入新的数据格式,如:128位SIMD整数运算和64位双精度浮点运算等。为了更好地利用高速缓存。另外,在Pentium 4中还新增加了几条缓存指令,允许程序员控制已经缓存过的数据。[2]

SSE3指令集

相对于SSE2,SSE3又新增加了13条新指令,此前它们被统称为pni(prescott new instructions)。13条指令中,一条用于视频解码,两条用于线程同步,其余用于复杂的数学运算、浮点到整数转换和SIMD浮点运算。[3]

SSE4指令集

SSE4又增加了50条新的增加性能的指令,这些指令有助于编译、媒体、字符/文本处理和程序指向加速。

SSE4指令集将作为Intel公司未来“显著视频增强”平台的一部分。该平台的其他视频增强功能还有Clear Video技术(CVT)和统一显示接口(UDI)支持等,其中前者是对ATi AVIVO技术的回应,支持高级解码、后处理和增强型3D功能。[4]

2 其他 编辑
3D Now!扩展指令集

3D Now!指令集是AMD公司1998年开发的多媒体扩展指令集,共有21条指令。针对MMX指令集没有加强浮点处理能力的弱点,重点提高了AMD公司K6系列CPU对3D图形的处理能力。由于指令有限,3D Now!指令集主要用于3D游戏,而对其他商业图形应用处理支持不足。

X86指令集

要知道什么是指令集还要从当今的X86架构的CPU说起。X86指令集是Intel为其第一块16位CPU(i8086)专门开发的,IBM1981年推出的世界第一台PC机中的CPU—i8088(i8086简化版)使用的也是X86指令,同时电脑中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器则另外使用X87指令,以后就将X86指令集和X87指令集统称为X86指令集。虽然随着CPU技术的不断发展,Intel陆续研制出更新型的i80386、i80486直到今天,但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel公司所生产的所有CPU仍然继续使用X86指令集,所以它的CPU仍属于X86系列。由于Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了今天庞大的X86系列及兼容CPU阵容。

EM64T指令集

Intel公司的EM64T(Extended Memory 64 Technology)即64位内存扩展技术。该技术为服务器和工作站平台应用提供扩充的内存寻址能力,拥有更多的内存地址空间,可带来更大的应用灵活性,特别有利于提升音频视频编辑、CAD设计等复杂工程软件及游戏软件的应用。

常说的64位指的是AMD公司出的64位CPU,而EM64T则是Inter公司按照自己的意思理解出来的64位,也就是和AMD公司的64位对应的另一种叫法。

RISC指令集

RISC指令集是以后高性能CPU的发展方向。它与传统的CISC(复杂指令集)相对。相比而言,RISC的指令格式统一,种类比较少,寻址方式也比复杂指令集少。使用RISC指令集的体系结构主要有ARM、MIPS。

3DNow!+指令集

在原有的指令集基础上,增加到52条指令,其中包含了部分SSE指令,该指令集主要用于新型的AMD CPU上。[5]

[ Last edited by zzz19760225 on 2016-12-12 at 14:50 ]



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 47 楼』:  MMX指令集

MMX指令集/MMX指令集 编辑
MMX指令集中包括有57条多媒体指令,通过这些指令可以一次处理多个数据,在处理结果超过实际处理能力的时候也能进行正常处理,这样在软件的配合下,就可以得到更高的性能。MMX的益处在于,当时存在的操作系统不必为此而做出任何修改便可以轻松地执行MMX程序。但是,问题也比较明显,那就是MMX指令集与x87浮点运算指令不能够同时执行,必须做密集式的交错切换才可以正常执行,这种情况就势必造成整个系统运行质量的下降。


http://blog.csdn.net/arau_sh/article/details/7575043
http://blog.csdn.net/arau_sh/article/details/7575059
http://blog.csdn.net/arau_sh/article/details/7575066


MMX指令集(详解)
标签: 编译器存储英特尔fpc扩展
2012-05-17 09:44 559人阅读 评论(0) 收藏 举报
分类: Asm(33)  
目录(?)[+]
转自 http://blog.csdn.net/dahan_wangtao/article/details/1944153

EMMS        MMX状态置空:
将FP特征字置空(全1),使后续浮点指令可以使用浮点寄存器,其他MMX指令自动置FP为全0.本指令应在所有MMX例程结束和调用可含有FP指令的例程时使用,以清除MMX状态.
MOVD mm,r/m32
MOVD r/m32,mm        转移32位数据:
将32位数据从整型寄存器/内存移到MMX寄存器,和反向移动.MOVD不能在MMX寄存器之间,内存之间及整型寄存器之间移动数据.目标操作数为MMX寄存器时,32位源操作数写入目标寄存器的低32位.目标寄存器"0扩展"为64位.源操作数为MMX寄存器时,该寄存器的低32位被写入目标操作数.
MOVQ mm,r/m64
MOVQ r.m64,mm        转移64位数据:
将64位数据从整型寄存器/内存移到MMX寄存器,和反向移动.目标操作数和源操作数可为MMX寄存器,64位内存操作数.但MOVQ不能在内存和内存之间进行数据转移.
PACKSSWB mm,mm/m64
PACKSSDW mm,mm/m64
有符号饱和方式数据成组:
将MMX寄存器和MMX寄存器/内存单元中的有符号字组变成MMX寄存器的有符号字节组.和将MMX寄存器和MMX寄存器/内存单元中的有符号双字组变成MMX寄存器的有符号字组.(注1)
PACKUSWB mm,mm/m64        无符号饱和方式数据成组
将MMX寄存器和MMX寄存器/内存单元中的有符号字组变成MMX寄存器的无符号字节组.(注1)
PADDB mm,mm/m64
PADDW mm,mm/m64
PADDD mm,mm/m64
环绕方式数据组相加:
按环绕方式将MMX寄存器/内存单元中的字节组(字组,双字组)相加到MMX寄存器中(注1)
PADDSB mm,mm/m64
PADDSW mm,mm/m64
饱和方式有符号数据组相加:
按饱和方式将MMX寄存器/内存单元中的有符号字节组(字组)相加到MMX寄存器中的有符号字节组(字组)数据.(注1)
PADDUSB mm,mm/m64
PADDUSW mm,mm/m64
饱和方式无符号数据组相加:
按饱和方式将MMX寄存器/内存单元中的无符号字节组(字组)相加到MMX寄存器中的无符号字节组(字组)数据.(注1)
PAND mm,mm/m64
逐位逻辑与:
将MMX寄存器/内存单元中的64位数据进行与操作,结果存于MMX寄存器中.
PANDN mm,mm/m64
逐位逻辑与非:
将MMX寄存器中的64位值取反,再将取反后的MMX寄存器与MMX寄存器/内存单元中的64位数据进行与操作,结果存于MMX寄存器中.
PCMPEQB mm,mm/m64
PCMPEQW mm,mm/m64
PCMPEQD mm,mm/m64
成组数据的相等比较:
将MMX寄存器与MMX寄存器/内存单元中的字节组(字组,双字组)数据进行相等比较.
该指令将目标操作数和源操作数的相应数据元素进行比较,相等则目标寄存器的对应数据元素被置为全1,否则置为全0.
eg:PCMPEQE mm,mm/m64
mm        ?        ?        00000000000000111        0111000111000111
mm/m64        ?        ?        11111110000001100        0111000111000111
结果mm        ?        ?        00000000000000000        1111111111111111
PCMPGTB mm,mm/m64
PCMPGTW mm,mm/m64
PCMPGTD mm,mm/m64
成组数据的相等比较:
将MMX寄存器与MMX寄存器/内存单元中的字节组(字组,双字组)数据进行大于比较.
该指令将目标操作数和源操作数的相应数据元素进行比较,大于则目标寄存器的对应数据元素被置为全1,否则置为全0.(参考上一条)
PMADDWD mm,mm/m64        数据组(字组)的乘加:
将MMX寄存器与MMX寄存器/内存单元中的字组数据相乘,然后将32位结果逐对相加并作为双字存于MMX寄存器中.
eg:PMADDWD mm,mm/m64
mm        ?        ?        0111000111000111        0111000111000111
操作        *        *        *        *
mm,mm/m64        ?        ?        1000000000000000        0000010000000000
操作        /_____+____/        /______+_____/
mm        ?        ?        1100100011100011        1001110000000000
PMULHW mm,mm/m64
成组数据(字组)的乘后取高位:
将MMX寄存器与MMX寄存器/内存单元中的有符号字组数据相乘,然后将结果的高16位存入MMX寄存器.
eg:PMULHW mm,mm/m64
mm        ?        ?        0111000111000111        0111000111000111
操作        *        *        *        *
mm/m64        ?        ?        1000000000000000        0000010000000000
操作        High Order        High Order        High Order        High Order
mm        ?        ?        1100011100011100        0000000111000111
PMULLW mm,mm/m64
成组数据(字组)的乘后取低位:
将MMX寄存器与MMX寄存器/内存单元中的有符号字组数据相乘,然后将结果的低16位存入MMX寄存器.(参考上一条)
POR mm,mm/m64        逐位逻辑或:
将MMX寄存器/内存单元中的64位数据进行或操作,结果存于MMX寄存器中.
PSLLW mm,mm/m64
PSLLD mm,mm/m64
PSLLQ mm,mm/m64
PSLLW mm,imm8
PSLLD mm,imm8
PSLLQ mm,imm8
成组数据的逻辑左移:
将MMX寄存器中的字(双字,四字)数据按MMX寄存器/内存单元指定的个数左移,低位移入0.
将MMX寄存器中的字(双字,四字)数据按8位立即数指定的个数左移,低位移入0.
PSRAW mm,mm/m64
PSRAD mm,mm/m64
PSRAW mm,imm8
PSRAD mm,imm8        成组数据的算术右移:
将MMX寄存器中的字(双字)数据按MMX寄存器/内存单元指定的个数右移,移动中保持符号位.
将MMX寄存器中的字(双字)数据按8位立即数指定的个数右移,移动中保持符号位.
PSRLW mm,mm/m64
PSRLD mm,mm/m64
PSRLQ mm,mm/m64
PSRLW mm,imm8
PSRLD mm,imm8
PSRLQ mm,imm8        成组数据的逻辑右移:
将MMX寄存器中的字(双字)数据按MMX寄存器/内存单元指定的个数右移,移出位用0填充.
将MMX寄存器中的字(双字)数据按8位立即数指定的个数右移,移出位用0填充.
PSUBB mm,mm/m64
PSUBW mm,mm/m64
PSUBD mm,mm/m64        环绕方式成组数据相减:
从MMX寄存器中按字节(字,双字)减去MMX寄存器/内存单元中的字节(字,双字)组.(注1)
PSUBSB mm,mm/m64
PSUBSW mm,mm/m64
饱和方式有符号成组数据相减:
从MMX寄存器中的有符号成组字节(字)组数据减去MMX寄存器/内存单元中的有符号字节(字)组数据.(注1)
PSUBUSB mm,mm/m64
PSUBUSW mm,mm/m64        饱和方式有符号成组数据相减:
从MMX寄存器中的无符号成组字节(字)组数据减去MMX寄存器/内存单元中的无符号字节(字)组数据.(注1)
PUNPCKHBW mm,mm/m64
PUNPCKHWD mm,mm/m64
PUNPCKHDQ mm,mm/m64        高位成组数据分解:
此指令交替取出源操作数和目标操作数的数据元素的高半部分,写入目标操作数中,数据元素的低半部分被忽略.
eg:PUNPCKHBW mm,mm/m64

PUNPCKLBW mm,mm/m64
PUNPCKLWD mm,mm/m64
PUNPCKLDQ mm,mm/m64        低位成组数据分解:
此指令交替取出源操作数和目标操作数的数据元素的低半部分,写入目标操作数中,数据元素的高半部分被忽略.(参考上一条)
PXOR mm,mm/m64        逐位逻辑异或:
将MMX寄存器/内存单元中的64位数据进行异或操作,结果存于MMX寄存器中.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
补充:
PMULHUW - 压缩无符号乘法取高位
操作码
指令
说明
0F E4 /r
PMULHUW mm1, mm2/m64
将 mm1 寄存器与 mm2/m64 中的压缩无符号字整数相乘,并将结果的高 16 位存储到 mm1。
66 0F E4 /r
PMULHUW xmm1, xmm2/m128
将 xmm1 与 xmm2/m128 中的压缩无符号字整数相乘,并将结果的高 16 位存储到 xmm1。
说明
对目标操作数(第一个操作数)与源操作数(第二个操作数)中的压缩无符号字整数执行 SIMD 乘法,并将每个 32 位中间结果的高 16 位存储到目标操作数。(图 3-7 显示使用 64 位操作数时此操作的情况)。源操作数可以是 MMX™ 技术寄存器或 64 位内存位置,也可以是 XMM 寄存器或 128 位内存位置。目标操作数可以是 MMX 或 XMM 寄存器。


PMULHUW 与 PMULHW 指令操作
操作
PMULHUW instruction with 64-bit operands:
TEMP0[31-0]  DEST[15-0] * SRC[15-0]; * Unsigned multiplication *
TEMP1[31-0]  DEST[31-16] * SRC[31-16];
TEMP2[31-0]  DEST[47-32] * SRC[47-32];
TEMP3[31-0] DEST[63-48] * SRC[63-48];
DEST[15-0]  TEMP0[31-16];
DEST[31-16]  TEMP1[31-16];
DEST[47-32]  TEMP2[31-16];
DEST[63-48]  TEMP3[31-16];

PMULHUW instruction with 128-bit operands:
TEMP0[31-0]  DEST[15-0] * SRC[15-0]; * Unsigned multiplication *
TEMP1[31-0] DEST[31-16] * SRC[31-16];
TEMP2[31-0]  DEST[47-32] * SRC[47-32];
TEMP3[31-0] DEST[63-48] * SRC[63-48];
TEMP4[31-0] DEST[79-64] * SRC[79-64];
TEMP5[31-0]  DEST[95-80] * SRC[95-80];
TEMP6[31-0]  DEST[111-96] * SRC[111-96];
TEMP7[31-0] DEST[127-112] * SRC[127-112];
DEST[15-0]  TEMP0[31-16];
DEST[31-16]  TEMP1[31-16];
DEST[47-32]  TEMP2[31-16];
DEST[63-48]  TEMP3[31-16];
DEST[79-64]  TEMP4[31-16];
DEST[95-80]  TEMP5[31-16];
DEST[111-96]  TEMP6[31-16];
DEST[127-112]  TEMP7[31-16];
英特尔(R) C++ 编译器等价内部函数
PMULHUW __m64 _mm_mulhi_pu16(__m64 a, __m64 b)
PMULHUW __m128i _mm_mulhi_epu16 ( __m128i a, __m128i b)
影响的标志
无。

保护模式异常
#GP(0) - 如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。(仅限 128 位操作)。如果内存操作数未对齐 16 字节边界,不论是哪一段。

#SS(0) - 如果内存操作数有效地址超出 SS 段限制。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

#PF(错误代码) - 如果发生页错误。

#AC(0)(仅限 64 位操作)- 如果启用对齐检查并在当前特权级别为 3 时进行未对齐的内存引用。

实地址模式异常
#GP(0)(仅限 128 位操作)- 如果内存操作数未对齐 16 字节边界,不论是哪一段。如果操作数的任何部分出现在 0 到 FFFFH 的有效地址空间之外。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

虚 8086 模式异常
与“实地址模式”中的异常相同。

#PF(错误代码) - 页错误。

#AC(0)(仅限 64 位操作)- 如果在启用对齐检查的情况下进行未对齐的内存引用。

数值异常
无。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PACKUSWB - 无符号饱和压缩
操作码
指令
说明
0F 67 /r
PACKUSWB mm, mm/m64
使用饱和运算将 mm 中的 4 个有符号字与 mm/m64 中的 4 个有符号字压缩成 8 个无符号字节,结果放入 mm。
66 0F 67 /r
PACKUSWB xmm1, xmm2/m128
使用饱和运算将 xmm1 与 xmm2/m128 中的有符号字压缩成无符号字节,结果放入 xmm1。
说明
使用饱和运算将目标操作数(第一个操作数)中的 4 个有符号字与源操作数(第二个操作数)中的 4 个有符号字压缩成 8 个有符号字节,结果放入目标操作数(请参阅“图 3-5”)。如果字的有符号值超出无符号字节的范围(即大于 FFH 或小于 00H),则分别将饱和字节值 FFH 或 00H 存储到目标操作数。

目标操作数必须是 MMX™ 技术寄存器;源操作数可以是 MMX 寄存器,也可以是四字内存位置。

将源操作数 xmm2/m128 中的八个有符号字与目标操作数 xmm1 中的八个有符号字压缩成十六个无符号字节,结果放入目标寄存器 xmm1。如果字的有符号值大于或小于无符号字节的范围,则对该值执行饱和运算(上溢时为 FFH,下溢时为 00H)。目标操作数是 XMM 寄存器。源操作数可以是 XMM 寄存器或 128 位内存操作数。


图 3-5. PACKUSWB 指令的操作
操作
PACKUSWB instruction with 64-bit operands:
DEST[7..0] SaturateSignedWordToUnsignedByte DEST[15..0];
DEST[15..8]  SaturateSignedWordToUnsignedByte DEST[31..16];
DEST[23..16]  SaturateSignedWordToUnsignedByte DEST[47..32];
DEST[31..24]  SaturateSignedWordToUnsignedByte DEST[63..48];
DEST[39..32]  SaturateSignedWordToUnsignedByte SRC[15..0];
DEST[47..40]  SaturateSignedWordToUnsignedByte SRC[31..16];
DEST[55..48]  SaturateSignedWordToUnsignedByte SRC[47..32];
DEST[63..56]  SaturateSignedWordToUnsignedByte SRC[63..48];

PACKUSWB instruction with 128-bit operands:
DEST[7-0]  SaturateSignedWordToUnsignedByte (DEST[15-0]);
DEST[15-8]  SaturateSignedWordToUnsignedByte (DEST[31-16]);
DEST[23-16]  SaturateSignedWordToUnsignedByte (DEST[47-32]);
DEST[31-24]  SaturateSignedWordToUnsignedByte (DEST[63-48]);
DEST[39-32]  SaturateSignedWordToUnsignedByte (DEST[79-64]);
DEST[47-40]  SaturateSignedWordToUnsignedByte (DEST[95-80]);
DEST[55-48]  SaturateSignedWordToUnsignedByte (DEST[111-96]);
DEST[63-56]  SaturateSignedWordToUnsignedByte (DEST[127-112]);
DEST[71-64]  SaturateSignedWordToUnsignedByte (SRC[15-0]);
DEST[79-72]  SaturateSignedWordToUnsignedByte (SRC[31-16]);
DEST[87-80]  SaturateSignedWordToUnsignedByte (SRC[47-32]);
DEST[95-88]  SaturateSignedWordToUnsignedByte (SRC[63-48]);
DEST[103-96]  SaturateSignedWordToUnsignedByte (SRC[79-64]);
DEST[111-104]  SaturateSignedWordToUnsignedByte (SRC[95-80]);
DEST[119-112]  SaturateSignedWordToUnsignedByte (SRC[111-96]);
DEST[127-120]  SaturateSignedWordToUnsignedByte (SRC[127-112]);
英特尔(R) C++ 编译器等价内部函数
__m64 _mm_packs_pu16(__m64 m1, __m64 m2)
影响的标志
无。

保护模式异常
#GP(0) - 如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。(仅限 128 位操作)。如果内存操作数未对齐 16 字节边界,不论是哪一段。

#SS(0) - 如果内存操作数有效地址超出 SS 段限制。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

#PF(错误代码) - 如果发生页错误。

#AC(0)(仅限 64 位操作)- 如果启用对齐检查并在当前特权级别为 3 时进行未对齐的内存引用。

实地址模式异常
#GP(0)(仅限 128 位操作)- 如果内存操作数未对齐 16 字节边界,不论是哪一段。如果操作数的任何部分出现在 0 到 FFFFH 的有效地址空间之外。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

虚 8086 模式异常
与“实地址模式”中的异常相同。

#PF(错误代码) - 页错误。

#AC(0)(仅限 64 位操作)- 如果在启用对齐检查的情况下进行未对齐的内存引用。

---------------------------------------------------------------------------------------------------------------------------------------
PACKSSWB/PACKSSDW - 有符号饱和压缩
操作码
指令
说明
0F 63 /r
PACKSSWB mm1, mm2/m64
使用饱和运算将 mm1 中的 4 个与 mm2/m64 中的 4 个压缩有符号字整数压缩成 8 个压缩有符号字节整数,结果放入 mm1。
66 0F 63 /r
PACKSSWB xmm1, xmm2/m128
使用饱和运算将 xmm1 中的 8 个与 xxm2/m128 中的 8 个压缩有符号字整数压缩成 16 个压缩有符号字节整数,结果放入 xxm1。
0F 6B /r
PACKSSDW mm1, mm2/m64
使用饱和运算将 mm1 中的 2 个与 mm2/m64 中的 2 个压缩有符号双字整数压缩成 4 个压缩有符号字整数,结果放入 mm1。
66 0F 6B /r
PACKSSDW xmm1, xmm2/m128
使用饱和运算将 xmm1 中的 4 个与 xxm2/m128 中的 4 个压缩有符号双字整数压缩成 8 个压缩有符号字整数,结果放入 xxm1。
说明
使用饱和运算将压缩有符号字整数压缩成压缩有符号字节整数 (PACKSSWB),或是将压缩有符号双字整数压缩成压缩有符号字整数 (PACKSSDW)。PACKSSWB 指令将目标操作数(第一个操作数)中的 4 个有符号字与源操作数(第二个操作数)中的 4 个有符号字压缩成 8 个有符号字节,结果放入目标操作数。如果字的有符号值超出有符号字节的范围(即大于 7FH 或小于 80H),则分别将饱和字节值 7FH 或 80H 存储到目标操作数。

PACKSSDW 指令将目标操作数(第一个操作数)中的 2 个有符号双字与源操作数(第二个操作数)中的 2 个有符号双字压缩成 4 个有符号字,结果放入目标操作数(请参阅“图 3-4”)。如果双字的有符号值超出有符号字的范围(即大于 7FFFH 或小于 8000H),则分别将饱和字节值 7FFFH 或 8000H 存储到目标操作数。

PACKSSWB 与 PACKSSDW 指令的目标操作数必须是 MMX™ 技术寄存器;源操作数可以是 MMX 寄存器,也可以是四字内存位置。

使用有符号饱和运算压缩源操作数与目标操作数中的有符号数据元素,结果写入目标操作数。目标操作数是 XMM 寄存器。源操作数可以是 XMM 寄存器或 128 位内存操作数。

PACKSSWB 指令将源操作数中的八个有符号字与目标操作数中的八个有符号字压缩成十六个有符号字节,结果放入目标操作数。如果字的有符号值大于或小于有符号字节的范围,则对该值执行饱和运算(上溢时 7FH,下溢时 80H)。

PACKSSDW 指令将源操作数中的四个有符号双字与目标操作数中的四个有符号双字压缩成八个有符号字,结果放入目标寄存器。如果双字的有符号值大于或小于有符号字的范围,则对该值执行饱和运算(上溢时 7FFFH,下溢时 8000H))。


图 3-4. PACKSSDW 指令的操作
操作
PACKSSWB instruction with 64-bit operands
DEST[7..0]  SaturateSignedWordToSignedByte DEST[15..0];
DEST[15..8]  SaturateSignedWordToSignedByte DEST[31..16];
DEST[23..16]  SaturateSignedWordToSignedByte DEST[47..32];
DEST[31..24]  SaturateSignedWordToSignedByte DEST[63..48];
DEST[39..32]  SaturateSignedWordToSignedByte SRC[15..0];
DEST[47..40]  SaturateSignedWordToSignedByte SRC[31..16];
DEST[55..48]  SaturateSignedWordToSignedByte SRC[47..32];
DEST[63..56]  SaturateSignedWordToSignedByte SRC[63..48];

PACKSSDW instruction with 64-bit operands
DEST[15..0]  SaturateSignedDoublewordToSignedWord DEST[31..0];
DEST[31..16]  SaturateSignedDoublewordToSignedWord DEST[63..32];
DEST[47..32]  SaturateSignedDoublewordToSignedWord SRC[31..0];
DEST[63..48]  SaturateSignedDoublewordToSignedWord SRC[63..32];

PACKSSWB instruction with 128-bit operands
DEST[7-0]  SaturateSignedWordToSignedByte (DEST[15-0]);
DEST[15-8]  SaturateSignedWordToSignedByte (DEST[31-16]);
DEST[23-16]  SaturateSignedWordToSignedByte (DEST[47-32]);
DEST[31-24]  SaturateSignedWordToSignedByte (DEST[63-48]);
DEST[39-32]  SaturateSignedWordToSignedByte (DEST[79-64]);
DEST[47-40]  SaturateSignedWordToSignedByte (DEST[95-80]);
DEST[55-48]  SaturateSignedWordToSignedByte (DEST[111-96]);
DEST[63-56]  SaturateSignedWordToSignedByte (DEST[127-112]);
DEST[71-64]  SaturateSignedWordToSignedByte (SRC[15-0]);
DEST[79-72]  SaturateSignedWordToSignedByte (SRC[31-16]);
DEST[87-80]  SaturateSignedWordToSignedByte (SRC[47-32]);
DEST[95-88]  SaturateSignedWordToSignedByte (SRC[63-48]);
DEST[103-96]  SaturateSignedWordToSignedByte (SRC[79-64]);
DEST[111-104]  SaturateSignedWordToSignedByte (SRC[95-80]);
DEST[119-112]  SaturateSignedWordToSignedByte (SRC[111-96]);
DEST[127-120]  SaturateSignedWordToSignedByte (SRC[127-112]);

PACKSSDW instruction with 128-bit operands
DEST[15-0]  SaturateSignedDwordToSignedWord (DEST[31-0]);
DEST[31-16]  SaturateSignedDwordToSignedWord (DEST[63-32]);
DEST[47-32]  SaturateSignedDwordToSignedWord (DEST[95-64]);
DEST[63-48]  SaturateSignedDwordToSignedWord (DEST[127-96]);
DEST[79-64]  SaturateSignedDwordToSignedWord (SRC[31-0]);
DEST[95-80]  SaturateSignedDwordToSignedWord (SRC[63-32]);
DEST[111-96]  SaturateSignedDwordToSignedWord (SRC[95-64]);
DEST[127-112]  SaturateSignedDwordToSignedWord (SRC[127-96]);
英特尔(R) C++ 编译器等价内部函数
__m64 _mm_packs_pi16(__m64 m1, __m64 m2)
__m64 _mm_packs_pi32 (__m64 m1, __m64 m2)
影响的标志
无。

保护模式异常
#GP(0) - 如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。(仅限 128 位操作)。如果内存操作数未对齐 16 字节边界,不论是哪一段。

#SS(0) - 如果内存操作数有效地址超出 SS 段限制。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

#PF(错误代码) - 如果发生页错误。

#AC(0)(仅限 64 位操作)- 如果启用对齐检查并在当前特权级别为 3 时进行未对齐的内存引用。

实地址模式异常
#GP(0)(仅限 128 位操作)- 如果内存操作数未对齐 16 字节边界,不论是哪一段。如果操作数的任何部分出现在 0 到 FFFFH 的有效地址空间之外。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

虚 8086 模式异常
与“实地址模式”中的异常相同。

#PF(错误代码) - 页错误。

#AC(0)(仅限 64 位操作)- 如果在启用对齐检查的情况下进行未对齐的内存引用。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PMULLW - 压缩有符号乘法取低位
操作码
指令
说明
0F D5 /r
PMULLW mm, mm/m64
将 mm1 寄存器与 mm2/m64 中的压缩有符号字整数相乘,并将结果的低 16 位存储到 mm1。
66 0F D5 /r
PMULLW xmm1, xmm2/m128
将 xmm1 与 xmm2/m128 中的压缩有符号字整数相乘,并将结果的低 16 位存储到 xmm1。
说明
对目标操作数(第一个操作数)与源操作数(第二个操作数)中的压缩有符号字整数执行 SIMD 乘法,并将每个 32 位中间结果的低 16 位存储到目标操作数。(下图显示此操作使用 64 位操作数时的情况)。源操作数可以是 MMX™ 技术寄存器或 64 位内存位置,也可以是 XMM 寄存器或 128 位内存位置。目标操作数可以是 MMX 或 XMM 寄存器。


图 3-8. PMULLU 指令操作
操作
PMULLW instruction with 64-bit operands:
TEMP0[31-0]  DEST[15-0] * SRC[15-0]; * Signed multiplication *
TEMP1[31-0]  DEST[31-16] * SRC[31-16];
TEMP2[31-0]  DEST[47-32] * SRC[47-32];
TEMP3[31-0] DEST[63-48] * SRC[63-48];
DEST[15-0]  TEMP0[15-0];
DEST[31-16]  TEMP1[15-0];
DEST[47-32]  TEMP2[15-0];
DEST[63-48]  TEMP3[15-0];

PMULLW instruction with 64-bit operands:
TEMP0[31-0]  DEST[15-0] * SRC[15-0]; * Signed multiplication *
TEMP1[31-0] DEST[31-16] * SRC[31-16];
TEMP2[31-0]  DEST[47-32] * SRC[47-32];
TEMP3[31-0] DEST[63-48] * SRC[63-48];
TEMP4[31-0] DEST[79-64] * SRC[79-64];
TEMP5[31-0]  DEST[95-80] * SRC[95-80];
TEMP6[31-0]  DEST[111-96] * SRC[111-96];
TEMP7[31-0] DEST[127-112] * SRC[127-112];
DEST[15-0]  TEMP0[15-0];
DEST[31-16]  TEMP1[15-0];
DEST[47-32]  TEMP2[15-0];
DEST[63-48]  TEMP3[15-0];
DEST[79-64]  TEMP4[15-0];
DEST[95-80]  TEMP5[15-0];
DEST[111-96]  TEMP6[15-0];
DEST[127-112]  TEMP7[15-0];
英特尔(R) C++ 编译器等价内部函数
PMULLW __m64 _mm_mullo_pi16(__m64 m1, __m64 m2)
PMULLW __m128i _mm_mullo_epi16 ( __m128i a, __m128i b)
影响的标志
无。

保护模式异常
#GP(0) - 如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。(仅限 128 位操作)。如果内存操作数未对齐 16 字节边界,不论是哪一段。

#SS(0) - 如果内存操作数有效地址超出 SS 段限制。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

#PF(错误代码) - 如果发生页错误。

#AC(0)(仅限 64 位操作)- 如果启用对齐检查并在当前特权级别为 3 时进行未对齐的内存引用。

实地址模式异常
#GP(0)(仅限 128 位操作)- 如果内存操作数未对齐 16 字节边界,不论是哪一段。如果操作数的任何部分出现在 0 到 FFFFH 的有效地址空间之外。

#UD - 如果 CR0 中的 EM 设置为 1。(仅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(仅限 128 位操作)。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#MF(仅限 64 位操作)- 如果存在未决的 x87 FPU 异常。

虚 8086 模式异常
与“实地址模式”中的异常相同

#PF(错误代码) - 页错误。

#AC(0)(仅限 64 位操作)- 如果在启用对齐检查的情况下进行未对齐的内存引用。

数值异常
无。


-----------------------------------------------------------------------------------------------------------------------------------------------
PSLLDQ - 压缩双四字逻辑左移
操作码
指令
说明
66 0F 73 /7 ib
PSLLDQ xmm1, imm8
将 xmm1 左移 imm8 字节,清除低位。
说明
按计数操作数(第二个操作数)指定的字节数,将目标操作数(第一个操作数)左移。空出的低位字节被清除(设置为全 0)。如果计数操作数指定的值大于 15,则将目标操作数设置为全 0。目标操作数是 XMM 寄存器。计数操作数是 8 位立即数。

操作
TEMP  COUNT;
if (TEMP > 15) TEMP  16;
DEST  DEST << (TEMP * 8);
英特尔(R) C++ 编译器等价内部函数
PSLLDQ __m128i _mm_slli_si128 ( __m128i a, int imm)
影响的标志
无。

保护模式异常
#UD - 如果 CR0 中的 EM 设置为 1。如果 CR4 中的 OSFXSR 是 0。如果 CPUID 功能标志 SSE-2 是 0。

#NM - 如果 CR0 中的 TS 设置为 1。

实地址模式异常
与“保护模式”中的异常相同。

虚 8086 模式异常
与“保护模式”中的异常相同。

数值异常
无。

-----------------------------------------------------------------------------------------------------------------------------------------------
PSHUFD - 压缩双字乱序
操作码
指令
说明
66 0F 70 /r ib
PSHUFD xmm1, xmm2/m128,imm8
按照 imm8 中的编码对 xmm2/m128 中的双字执行乱序处理,结果存储到 xmm1。
说明
从源操作数(第二个操作数)中复制双字,按照顺序操作数(第三个操作数)选择的位置,将它们插入目标操作数(第一个操作数)。图 3-10 显示 PSHUFD 指令的操作与顺序操作数的编码。顺序操作数中的每 2 个位字段选择目标操作数中一个双字位置的内容。例如,顺序操作数的位 0 与 1 选择目标操作数中双字 0 的内容。顺序操作数位 0 与 1 的编码(请参阅“图 3-10”中的字段编码)确定要将源操作数中的哪个双字复制到目标操作数的双字 0。

源操作数可以是 XMM 寄存器或 128 位内存位置。目标操作数是 XMM 寄存器。顺序操作数是 8 位立即数。

请注意,此指令允许将源操作数中的一个双字复制到目标操作数中的多个双字位置。


图 3-10 PSHUFD 指令操作
操作
DEST[31-0]  (SRC >> (ORDER[1-0] * 32) )[31-0]
DEST[63-32]  (SRC >> (ORDER[3-2] * 32) )[31-0]
DEST[95-64]  (SRC >> (ORDER[5-4] * 32) )[31-0]
DEST[127-96]  (SRC >> (ORDER[7-6] * 32) )[31-0]
英特尔(R) C++ 编译器等价内部函数
PSHUFD __m128i _mm_shuffle_epi32(__m128i a, int n)
影响的标志
无。

保护模式异常
#GP(0) - 如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果内存操作数未对齐 16 字节边界,不论是哪一段。

#SS(0) - 如果内存操作数有效地址超出 SS 段限制。

#UD - 如果 CR0 中的 EM 设置为 1。如果 CR4 中的 OSFXSR 是 0。如果 CPUID 功能标志 SSE-2 是 0。

#NM - 如果 CR0 中的 TS 设置为 1。

#PF(错误代码) - 如果发生页错误。

实地址模式异常
#GP(0) - 如果内存操作数未对齐 16 字节边界,不论是哪一段。如果操作数的任何部分出现在 0 到 FFFFH 的有效地址空间之外。

#UD - 如果 CR0 中的 EM 设置为 1。如果 CR4 中的 OSFXSR 是 0。如果 CPUID 功能标志 SSE-2 为 0。

#NM - 如果 CR0 中的 TS 设置为 1。

虚 8086 模式异常
与“实地址模式”中的异常相同。

#PF(错误代码) - 页错误。

数值异常
无。



Intel体系结构MMX 指令集(表结构)
2012-05-17 09:46 314人阅读 评论(0) 收藏 举报
分类: Asm(33)  
转自http://blog.csdn.net/dahan_wangtao/article/details/1816513
Intel体系结构MMX 指令集
成组算术        环绕方式        有符号饱和模式        无符号饱和模式
Addition        PADD        PADDS        PADDUS
Subtraction        PSUB        PSUBS        PSUBUS
Multiplication        PMULL/H                  
Multiply&add        PMADD                  
Shift right Arithmetic        PSRA                  
Compare        PCMPcc                  
转换        常规        有符号饱和模式        无符号饱和模式
Pack                 PACKSS        PACKUS
Unpack        PUNPCKL/H                  
逻辑操作        成组        全64位         
And                 PAND         
And not                 PANDN         
Or                 POR         
Exclusive or                 PXOR         
Shift left        PSLL        PSLL         
Shift right        PSRL        PSRL         
转移及内存操作        32位        64位         
Register-register move        MOVD        MOVQ         
Load from memory        MOVD        MOVQ         
Store to memory        MOVD        MOVQ         
其它                           
Empty multimedia state        EMMS                  


MMX指令
标签: 数据结构扩展byte图形算法
2012-05-17 09:46 255人阅读 评论(0) 收藏 举报
分类: Asm(33)  
转自 http://blog.csdn.net/dahan_wangtao/article/details/1816513

最近学习相关的多媒体数据操作指令, 统计了一下的MMX指令,作为知识积累。
MMX的数据结构
多媒体软件具有如下显著的特点:
1、 小整型数据类型(图形数据为8位 ,声频数据为16位)
2、 对小整型数据的频繁且重复的计算操作(例如被频繁的调用的核心算法);
3、 许多操作具有内存的并行性(例如对大量的数据进行同一个加,减或乘法运算操作);
MMX技术设计了一套基本的,通用的紧缩整形指令,共57条。
所谓“紧缩整形数据”是指多个8/16/32位的整形数据组合成为一个64位的数据.MMX指令主要就是使用
这种紧缩整形数据,它又分成4种整形类型:紧缩字节、紧缩字、紧缩双字、紧缩4字
。紧缩字节(Packed Byte): 8个字节组合成一个64位的数据;
。紧缩字 (Packed Word): 4个字组合成一个64位的数据;
。紧缩双字(Packed Doubleword): 2个双字组合成一个64位的数据;
。紧缩4字 (Packed Quadword):一个64位数据
这样一条MMX指令就能够同时处理8/4/2个数据单元,这就是所谓的“单指令多数据SIMD”结构。这种结构
是MMX技术把机器性能提高的最根本因素。
为了方便使用64位紧缩整形数据,MMX技术含有8个64位的MMX寄存器(MM0-----MM7),只有MMX指令可以使用MMX寄存器。

值得一提的是,MMX寄存器是随机存取的,但实际上是借用了8个浮点数据寄存器实现的。浮点处理单元FPU有8个浮点寄存器FPR,以堆栈方式存取。每个浮点数据寄存器有80位,高16位用于指数和符号,低64位用于有效数字。MMX利用其64位有效数字部分用做随机存取的64位的MMX寄存器。

MMX指令集
1、算术运算:
PADD[B、W、D] 环绕加[字节,字,双字]
PADDS[B , W] 有符号饱和加[字节,字]
PADDUS[B , W] 无符号饱和加[字节,字]
PSUB[B、W、D] 环绕减[字节,字,双字]
PSUBS[B,W] 有符号饱和减[字节,字]
PSUBUS[D,W] 无符号饱和减【字节,字】
PMULHW 紧缩字乘后取高位
PMULLW 紧缩字乘后取低位
PMADDWD 紧缩字乘,积相加
2、比较:
PCMPEQ[B,W,D] 紧缩比较是否相等【字节,字,双字】
PCMPGT[B,W,D] 紧缩比较是否大于【字节,字,双字】
3、类型转换:
PACKUSWB 按无符号饱和压缩【字成字节】
PACKSS[WB,DW] 按有符号饱和压缩【字/双字成/字节/字】
PUNPCKH[BW,WD,DQ] 扩展高位【字节,字,双字成字,双字,4字】
PUNPCKL[BW,WD,DQ] 扩展地位【字节,字,双字成字,双字,4字】
4、逻辑运算:
PAND 紧缩逻辑与
PANDN 紧缩逻辑与非
POR 紧缩逻辑或
PXOR 紧缩逻辑异或
5、位移:
PSLL[W,D,Q] 紧缩逻辑左移[字,双字,4字]
PSRL[W,D,Q] 紧缩逻辑右移[字,双字,4字]
PSRA[W,D] 紧缩算术右移【字,双字】
7、数据传送:
MOV[D,Q] 从MMX寄存器传人/传出【双字/4字】
8、状态清除
EMMS 清除MMX状态

[ Last edited by zzz19760225 on 2016-12-12 at 14:56 ]



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 48 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 49 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 50 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 51 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 52 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 53 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 54 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 55 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 56 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 57 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 58 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 59 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 60 楼』:  

1



1<词>,2[句],3/段\,4{节},5(章)。
2016-6-26 19:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] [7] [8] [9] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: