Board logo

标题: 进制转换 [打印本页]

作者: zzz19760225     时间: 2016-6-25 20:15    标题: 进制转换

二进制到其他九个进制的转换想法方法路子实现效果。

硬盘分区表,一个和操作系统一样重要的空间,操作系统的地基部分。
网络搜索都是主动回答主流使用的方向性回答,没有或避免了可用的信息内容。
所以中国人的汉字系统,需要有一个自己公开信息的自由软件信息的地基。
硬件大地,硬盘效率的稳固地基(分区表),引导系统之门,综合使用的操作系统房子之家,软件的家具,网络的窗户。

[ Last edited by zzz19760225 on 2016-7-3 at 08:59 ]
作者: zzz19760225     时间: 2016-6-26 18:27
进制转换,涉及到电脑硬件运转,存储,不同语言和习惯的互相交流的非语言之语言。
硬件启动相关语言,硬盘分区格式语言,系统软件应用,信息存储,用户。
如果都是建立在一个语言基础上的不同分类区别,就是算法不同的使用距离和节奏的内容。

精简指令集          risc
http://baike.sogou.com/v65057042.htm?fromTitle=risc


mips 中文学习手册 pdf 微盘

[ Last edited by zzz19760225 on 2017-7-14 at 05:56 ]
作者: zzz19760225     时间: 2016-6-26 18:28
wolf11级
2010-01-06 回答
楼主不要叫这个真了。事实上对于计算机来说存储都是用二进制,但是为了阅读方便,一般都是以十六进制方式阅读的。因为16进制的一位正好对应二进制的四位。而计算机是以字节为单位计算的,一个字节是8位二进制正好是2位16进制数。为了方便一般都用16进制来表示,典型软件是UltraEdit-32.换算我就不说了,楼上两位说的很明白了。你可以用windows自带的计算器去算。一般熟悉的人口算就能出来了。其实你只要记住0-F这16个数对应的二进制就可以了。原则上说没有大小限制,但是文件太大的话打开的时候肯定要收内存的限制。

绿色软件联盟的WINHEX
http://www.xdowns.com/soft/softdown.asp?softid=2767

[ Last edited by zzz19760225 on 2017-12-6 at 18:00 ]
作者: zzz19760225     时间: 2016-6-26 18:29
英文字符模式向像素模式的进制自动转换计算,
全声音模式,类似钢琴的转换计算,
声形俱全的名,向实存在模式的转化探索

[ Last edited by zzz19760225 on 2016-7-7 at 07:48 ]
作者: zzz19760225     时间: 2016-6-26 18:29
256色彩和声音的波形,为基础字符,也是基础范围,声色互化的进制。
声色转化为磁或波的再次进制,
基本的为两仪四象,四个方位,前后独立存在和比较的纵波,左右相异存在的横波。
十字和田字,横竖和十字象。
声色的心身物之色,和不可思议的空无,组成一个谦虚,这个空无和谦虚的描述,存在,该怎么表现。
这里可能有个一,原点缘点的生成,寻找,定义,自在的需要。
描述眼睛本身的难度,眼睛所见为一个内容,这个眼睛所见有天晴的色彩,阴天的色彩,黄昏的色彩,黎明的色雨中的色彩。眯眼的眼睫毛虚影,含泪时光线的效果,闭上眼皮时各种游动。
盲人的没有,与眼睛正常者的无光线环境和闭眼的差异,其中所包含的愿意选择怎么看,与愿意如何描述所见的选择,形成一和二的自内容,到与其他内容一起的时候,形成个人独立的自有存在和参与群体比较的同异效果。
群体比较和同异道理,与群体一体与终极大同世界的关系,理想的共产主义,理想国,环境天然规则的熟悉利用,黑暗规则,人物两字包括这些内容。

[ Last edited by zzz19760225 on 2016-7-9 at 08:36 ]
作者: zzz19760225     时间: 2016-6-26 18:32
硬盘磁盘存储结构与存储加工的关系
分区表制作软件,加工工艺,
分区表内容
111第一个分区,第一个硬盘,第一台电脑活动系统,
boot,c分区,ssd硬盘,第一台电脑
11,
1,
三种表示方法,类似时间日期,可以直接显示时间,也可以加上日期,年月。

高低电平,磁盘电路存储?

[ Last edited by zzz19760225 on 2016-7-10 at 20:59 ]
作者: zzz19760225     时间: 2016-6-26 18:33
主要是各种算法,数学的,编程语言引用的,操作系统引用的,硬件引用的等等。

[ Last edited by zzz19760225 on 2016-10-13 at 08:58 ]
作者: zzz19760225     时间: 2016-6-26 18:36
百进制计数系统 (2011-08-31 21:13:31)
http://blog.sina.com.cn/s/blog_88c362fb0100t4os.html

数值对照表
  下表中,百进制(Hectimal)使用H来表示,十进制(Decimal)使用D来表示。
  
H         D         H         D
0         0         ο         50
1         1         π         51
2         2         ρ         52
3         3         σ         53
4         4         τ         54
5         5         υ         55
6         6         φ         56
7         7         χ         57
8         8         ψ         58
9         9         ω         59
A         10         甲         60
B         11         乙         61
C         12         丙         62
D         13         丁         63
E         14         戊         64
F         15         己         65
G         16         庚         66
H         17         辛         67
I         18         壬         68
J         19         癸         69
K         20         子         70
L         21         丑         71
M         22         寅         72
N         23         卯         73
O         24         辰         74
P         25         巳         75
Q         26         午         76
R         27         未         77
S         28         申         78
T         29         酉         79
U         30         戍         80
V         31         亥         81
W         32         赵         82
X         33         钱         83
Y         34         孙         84
Z         35         李         85
α         36         周         86
β         37         吴         87
γ         38         郑         88
δ         39         王         89
ε         40         冯         90
ζ         41         陈         91
η         42         褚         92
θ         43         卫         93
ι         44         蒋         94
κ         45         沈         95
λ         46         韩         96
μ         47         杨         97
ν         48         朱         98
ξ         49         秦         99



数学实用工具:数学符号大全
  1、几何符号
  ⊥   ‖   ∠   ⌒   ⊙   ≡   ≌    △
  2、代数符号
  ∝   ∧   ∨   ~   ∫   ≠    ≤   ≥   ≈   ∞   ∶
  3、运算符号
  如加号(+),减号(-),乘号(×或·),除号(÷或/),两个集合的并集(∪),交集(∩),根号(√),对数(log,lg,ln),比(:),微分(dx),积分(∫),曲线积分(∮)等。
  4、集合符号
  ∪   ∩   ∈
  5、特殊符号
  ∑    π(圆周率)
  6、推理符号
  |a|    ⊥    ∽    △    ∠    ∩    ∪    ≠    ≡    ±    ≥    ≤    ∈    ←
  ↑    →    ↓    ↖    ↗    ↘    ↙    ‖    ∧    ∨
  &;   §
  ①   ②   ③   ④   ⑤   ⑥   ⑦   ⑧   ⑨   ⑩
  Γ    Δ    Θ     ∧    Ξ    Ο    ∏     ∑    Φ     Χ    Ψ    Ω
  α    β    γ    δ    ε    ζ    η    θ    ι    κ    λ    μ     ν
  ξ    ο    π    ρ    σ    τ    υ    φ    χ    ψ    ω
  Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ
  ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ
  ∈   ∏   ∑   ∕   √   ∝   ∞   ∟ ∠    ∣   ‖   ∧   ∨   ∩   ∪   ∫   ∮
  ∴   ∵   ∶   ∷   ∽   ≈   ≌   ≈   ≠   ≡   ≤   ≥   ≤   ≥    ≮   ≯   ⊕   ⊙    ⊥
  ⊿   ⌒     ℃
  指数0123:o123
  7、数量符号
  如:i,2+i,a,x,自然对数底e,圆周率π。
  8、关系符号
  如“=”是等号,“≈”是近似符号,“≠”是不等号,“>”是大于符号,“<”是小于符号,“≥”是大于或等于符号(也可写作“≮”),“≤”是小于或等于符号(也可写作“≯”),。“→ ”表示变量变化的趋势,“∽”是相似符号,“≌”是全等号,“‖”是平行符号,“⊥”是垂直符号,“∝”是成正比符号,(没有成反比符号,但可以用成正比符号配倒数当作成反比)“∈”是属于符号,“??”是“包含”符号等。
  9、结合符号
  如小括号“()”中括号“〔〕”,大括号“{}”横线“—”
  10、性质符号
  如正号“+”,负号“-”,绝对值符号“| |”正负号“±”
  11、省略符号
  如三角形(△),直角三角形(Rt△),正弦(sin),余弦(cos),x的函数(f(x)),极限(lim),角(∠),
  ∵因为,(一个脚站着的,站不住)
  ∴所以,(两个脚站着的,能站住) 总和(∑),连乘(∏),从n个元素中每次取出r个元素所有不同的组合数(C(r)(n) ),幂(A,Ac,Aq,x^n)等。
  12、排列组合符号
  C-组合数
  A-排列数
  N-元素的总个数
  R-参与选择的元素个数
  !-阶乘 ,如5!=5×4×3×2×1=120
  C-Combination- 组合
  A-Arrangement-排列
  13、离散数学符号
  ├ 断定符(公式在L中可证)
  ╞ 满足符(公式在E上有效,公式在E上可满足)
  ┐ 命题的“非”运算
  ∧ 命题的“合取”(“与”)运算
  ∨ 命题的“析取”(“或”,“可兼或”)运算
  → 命题的“条件”运算
  A<=>B 命题A 与B 等价关系
  A=>B 命题 A与 B的蕴涵关系
  A* 公式A 的对偶公式
  wff 合式公式
  iff 当且仅当
  ↑ 命题的“与非” 运算( “与非门” )
  ↓ 命题的“或非”运算( “或非门” )
  □ 模态词“必然”
  ◇ 模态词“可能”
  φ 空集
  ∈ 属于(??不属于)
  P(A) 集合A的幂集
  |A| 集合A的点数
  R^2=R○R [R^n=R^(n-1)○R] 关系R的“复合”
  (或下面加 ≠) 真包含
  ∪ 集合的并运算
  ∩ 集合的交运算
  - (~) 集合的差运算
  〡 限制
  [X](右下角R) 集合关于关系R的等价类
  A/ R 集合A上关于R的商集
  [a] 元素a 产生的循环群
  I (i大写) 环,理想
  Z/(n) 模n的同余类集合
  r(R) 关系 R的自反闭包
  s(R) 关系 的对称闭包
  CP 命题演绎的定理(CP 规则)
  EG 存在推广规则(存在量词引入规则)
  ES 存在量词特指规则(存在量词消去规则)
  UG 全称推广规则(全称量词引入规则)
  US 全称特指规则(全称量词消去规则)
  R 关系
  r 相容关系
  R○S 关系 与关系 的复合
  domf 函数 的定义域(前域)
  ranf 函数 的值域
  f:X→Y f是X到Y的函数
  GCD(x,y) x,y最大公约数
  LCM(x,y) x,y最小公倍数
  aH(Ha) H 关于a的左(右)陪集
  Ker(f) 同态映射f的核(或称 f同态核)
  [1,n] 1到n的整数集合
  d(u,v) 点u与点v间的距离
  d(v) 点v的度数
  G=(V,E) 点集为V,边集为E的图
  W(G) 图G的连通分支数
  k(G) 图G的点连通度
  △(G) 图G的最大点度
  A(G) 图G的邻接矩阵
  P(G) 图G的可达矩阵
  M(G) 图G的关联矩阵
  C 复数集
  N 自然数集(包含0在内)
  N* 正自然数集
  P 素数集
  Q 有理数集
  R 实数集
  Z 整数集
  Set 集范畴
  Top 拓扑空间范畴
  Ab 交换群范畴
  Grp 群范畴
  Mon 单元半群范畴
  Ring 有单位元的(结合)环范畴
  Rng 环范畴
  CRng 交换环范畴
  R-mod 环R的左模范畴
  mod-R 环R的右模范畴
  Field 域范畴
  Poset 偏序集范畴
+  plus 加号;正号
  -  minus 减号;负号
  ±    plus or minus 正负号
  ×   is multiplied by 乘号
  ÷    is divided by 除号
  =  is equal to 等于号
  ≠  is not equal to 不等于号
  ≡  is equivalent to 全等于号
  ≌ is approximately equal to 约等于
  ≈  is approximately equal to 约等于号
  <  is less than 小于号
  >  is more than 大于号
  ≤  is less than or equal to 小于或等于
  ≥  is more than or equal to 大于或等于
  %  per cent 百分之…
  ∞  infinity 无限大号
  √  (square) root 平方根
  X squared X的平方
  X cubed X的立方
  ∵ since; because 因为
  ∴ hence 所以
  ∠ angle 角
  ⌒ semicircle 半圆
  ⊙ circle 圆
  ○  circumference 圆周
  △ triangle 三角形
  ⊥ perpendicular to 垂直于
  ∪ intersection of 并,合集
  ∩  union of 交,通集
  ∫  the integral of …的积分
  ∑  (sigma) summation of 总和
  °    degree 度
  ′  minute 分
  〃  second 秒
  #  number …号
  @  at 单价

[ Last edited by zzz19760225 on 2017-5-29 at 15:28 ]
作者: zzz19760225     时间: 2016-6-26 18:36
1
作者: zzz19760225     时间: 2016-6-26 18:37
1
作者: zzz19760225     时间: 2016-6-26 18:38
1
作者: zzz19760225     时间: 2016-6-26 18:39
1
作者: zzz19760225     时间: 2016-6-26 18:40
1
作者: zzz19760225     时间: 2016-6-26 18:41
用半导体元器件做二进制和16进制GB180303的基本单位模型

[ Last edited by zzz19760225 on 2017-7-24 at 10:24 ]
作者: zzz19760225     时间: 2016-6-26 18:41
1几何图形的图形文字所包含的类似基因模式的,层面次序趋向的结构语言与使用结果语言。预计会发生什么事情,但是无法预计到结果;无法预计未来会发生什么事情;一切可以预计,预计的路和层。

[ Last edited by zzz19760225 on 2016-8-23 at 14:51 ]
作者: zzz19760225     时间: 2016-6-26 18:43    标题: 指令集

1

[ Last edited by zzz19760225 on 2016-12-12 at 14:46 ]
作者: zzz19760225     时间: 2016-6-26 18:44    标题: 龙芯自有指令集

1

[ Last edited by zzz19760225 on 2016-12-12 at 14:47 ]
作者: zzz19760225     时间: 2016-6-26 18:45
1
作者: zzz19760225     时间: 2016-6-26 18:50
1
作者: zzz19760225     时间: 2016-6-26 18:52
1
作者: zzz19760225     时间: 2016-6-26 18:56
1
作者: zzz19760225     时间: 2016-6-26 18:58
1
作者: zzz19760225     时间: 2016-6-26 19:01
1
作者: zzz19760225     时间: 2016-6-26 19:02
1
作者: zzz19760225     时间: 2016-6-26 19:03
1
作者: zzz19760225     时间: 2016-6-26 19:07
1
作者: zzz19760225     时间: 2016-6-26 19:08
1
作者: zzz19760225     时间: 2016-6-26 19:08
1
作者: zzz19760225     时间: 2016-6-26 19:10
1
作者: zzz19760225     时间: 2016-6-26 19:11
1
作者: zzz19760225     时间: 2016-6-26 19:12    标题: 英特尔和艾慢点指令集(肯德基和麦当劳的竞赛秀)

1

[ Last edited by zzz19760225 on 2016-12-12 at 14:49 ]
作者: zzz19760225     时间: 2016-6-26 19:15
1
作者: zzz19760225     时间: 2016-6-26 19:17
1
作者: zzz19760225     时间: 2016-6-26 19:19
1
作者: zzz19760225     时间: 2016-6-26 19:26
1
作者: zzz19760225     时间: 2016-6-26 19:27
1
作者: zzz19760225     时间: 2016-6-26 19:29
1
作者: zzz19760225     时间: 2016-6-26 19:33
1
作者: zzz19760225     时间: 2016-6-26 19:34
1
作者: zzz19760225     时间: 2016-6-26 19:35
1
作者: zzz19760225     时间: 2016-6-26 19:36
1
作者: zzz19760225     时间: 2016-6-26 19:37
1
作者: zzz19760225     时间: 2016-6-26 19:38
1
作者: zzz19760225     时间: 2016-6-26 19:40
1
作者: zzz19760225     时间: 2016-6-26 19:40
1
作者: zzz19760225     时间: 2016-6-26 19:41
指令集
编辑词条
指令集
指令集(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 ]
作者: zzz19760225     时间: 2016-6-26 19:42    标题: 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 ]
作者: zzz19760225     时间: 2016-6-26 19:43
1
作者: zzz19760225     时间: 2016-6-26 19:43
1
作者: zzz19760225     时间: 2016-6-26 19:44
1
作者: zzz19760225     时间: 2016-6-26 19:46
1
作者: zzz19760225     时间: 2016-6-26 19:47
1
作者: zzz19760225     时间: 2016-6-26 19:47
1
作者: zzz19760225     时间: 2016-6-26 19:48
1
作者: zzz19760225     时间: 2016-6-26 19:49
1
作者: zzz19760225     时间: 2016-6-26 19:51
1
作者: zzz19760225     时间: 2016-6-26 19:52
1
作者: zzz19760225     时间: 2016-6-26 19:52
1
作者: zzz19760225     时间: 2016-6-26 19:53
1
作者: zzz19760225     时间: 2016-6-26 19:54
1
作者: zzz19760225     时间: 2016-6-26 19:55
http://www.cnblogs.com/lilongjia ... /06/14/2080551.html

七种寻址方式(直接寻址方式)
2011-06-14 13:49 by 李龙江, 21651 阅读, 0 评论, 收藏, 编辑
指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。

在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。

例:假设有指令:MOV BX, [1234H],在执行时,(DS)=2000H,内存单元21234H的值为5213H。问该指令执行后,BX的值是什么?

解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用下图来表示。

从图中,可看出执行该指令要分三部分:

由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;

访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;

取单元21234H的值5213H,并按“高高低低”的原则存入寄存器BX中。

所以,在执行该指令后,BX的值就为5213H。


由于数据段的段寄存器默认为DS,如果要指定访问其它段内的数据,可在指令中用段前缀的方式显式地书写出来。

下面指令的目标操作数就是带有段前缀的直接寻址方式。

MOV ES:[1000H], AX

直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值,该寻址方式可在64K字节的段内进行寻址。

注意:立即寻址方式和直接寻址方式的书写格式的不同,直接寻址的地址要写在括号“[”,“]”内。在程序中,直接地址通常用内存变量名来表示,如:MOV BX, VARW,其中,VARW是内存字变量。

试比较下列指令中源操作数的寻址方式(VARW是内存字变量):
  MOV AX, 1234H MOV AX, [1234H] ;前者是立即寻址,后者是直接寻址
  MOV AX, VARW MOV AX, [VARW] ;两者是等效的,均为直接寻址

---------------------------------------------------------------------------------------------------------------------------------
http://www.cnblogs.com/lilongjia ... /06/14/2080569.html


七种寻址方式(寄存器间接寻址方式)
2011-06-14 13:57 by 李龙江, 7851 阅读, 1 评论, 收藏, 编辑
操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:



寄存器间接寻址方式读取存储单元的原理如图所示。

在不使用段超越前缀的情况下,有下列规定:

若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;
若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。

例:假设有指令:MOV BX,[DI],在执行时,(DS)=1000H,(DI)=2345H,存储单元12345H的内容是4354H。问执行指令后,BX的值是什么?

解:根据寄存器间接寻址方式的规则,在执行本例指令时,寄存器DI的值不是操作数,而是操作数的地址。该操作数的物理地址应由DS和DI的值形成,即:

PA=(DS)*16+DI=1000H*16+2345H=12345H。

所以,该指令的执行效果是:把从物理地址为12345H开始的一个字的值传送给BX。

其执行过程如图所示。

----------------------------------------------------------------------------------------------------------------------------------
http://www.cnblogs.com/lilongjia ... /06/14/2080574.html


七种寻址方式(寄存器相对寻址方式)
2011-06-14 14:01 by 李龙江, 6500 阅读, 0 评论, 收藏, 编辑
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、D

I)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。

在不使用段超越前缀的情况下,有下列规定:

    若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;

    若有效地址用BP来指定,则其缺省的段寄存器为SS。

指令中给出的8位/16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。当所得的有效地址超过0FFFFH,则取其64K的模。

例:假设指令:MOV BX, [SI+100H],在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为2715H,问该指令执行后,BX的值是什么?

解:根据寄存器相对寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(SI)+100H=2345H+100H=2445H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2445H=12445H。

所以,该指令的执行效果是:把从物理地址为12445H开始的一个字的值传送给BX。

其执行过程如图所示。

--------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/lilongjia ... /06/14/2080576.html

七种寻址方式(基址加变址寻址方式)
2011-06-14 14:03 by 李龙江, 6343 阅读, 0 评论, 收藏, 编辑
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。

在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。

例:假设指令:MOV BX, [BX+SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问该指令执行后,BX的值是什么?

解:根据基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(BX)+(SI)=2100H+0011H=2111H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2111H=12111H

所以,该指令的执行效果是:把从物理地址为12111H开始的一个字的值传送给BX。

其执行过程如图所示。

-----------------------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/lilongjia ... /06/14/2080576.html

七种寻址方式(基址加变址寻址方式)
2011-06-14 14:03 by 李龙江, 6343 阅读, 0 评论, 收藏, 编辑
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如公式所示。

在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。

例:假设指令:MOV BX, [BX+SI],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问该指令执行后,BX的值是什么?

解:根据基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(BX)+(SI)=2100H+0011H=2111H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2111H=12111H

所以,该指令的执行效果是:把从物理地址为12111H开始的一个字的值传送给BX。

其执行过程如图所示。

-------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/lilongjia ... /06/14/2080581.html

七种寻址方式(相对基址加变址寻址方式)
2011-06-14 14:07 by 李龙江, 5701 阅读, 0 评论, 收藏, 编辑
操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如公式所示。

在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则其缺省的段寄存器为SS;否则,其缺省的段寄存器为DS。

指令中给出的8位/16位偏移量用补码表示。在计算有效地址时,如果偏移量是8位,则进行符号扩展成16位。当所得的有效地址超过0FFFFH,则取其64K的模。

例:假设指令:MOV AX, [BX+SI+200H],在执行时,(DS)=1000H,(BX)=2100H,(SI)=0010H,内存单元12310H的内容为1234H。问该指令执行后,AX的值是什么?

解:根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:

EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H

该操作数的物理地址应由DS和EA的值形成,即:

PA=(DS)*16+EA=1000H*16+2310H=12310H

所以,该指令的执行效果是:把从物理地址为12310H开始的一个字的值传送给AX。其执行过程如图所示。

从相对基址加变址这种寻址方式来看,由于它的可变因素较多,看起来就显得复杂些,但正因为其可变因素多,它的灵活性也就很高。比如:
  
用D1来访问一维数组D1的第i个元素,它的寻址有一个自由度,用D2[j]来访问二维数组D2的第i行、第j列的元素,其寻址有二个自由度。多一个可变的量,其寻址方式的灵活度也就相应提高了。

相对基址加变址寻址方式有多种等价的书写方式,下面的书写格式都是正确的,并且其寻址含义也是一致的。

MOV AX, [BX+SI+1000H]   MOV AX, 1000H[BX+SI]
MOV AX, 1000H[BX][SI]    MOV AX, 1000H[SI][BX]

但书写格式BX [1000+SI]和SI[1000H+BX]等是错误的,即所用寄存器不能在“[“,”]”之外,该限制对寄存器相对寻址方式的书写也同样起作用。

相对基址加变址寻址方式是以上7种寻址方式中最复杂的一种寻址方式,它可变形为其它类型的存储器寻址方式。下表列举出该寻址方式与其它寻址方式之间的变形关系。

-------------------------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/lilongjia ... /06/14/2080588.html

七种寻址方式(32位地址的寻址方式)
2011-06-14 14:10 by 李龙江, 2609 阅读, 0 评论, 收藏, 编辑
在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一个组成部分。

当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。

32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;
32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。

下面列举几个32位地址寻址指令:

MOV AX, [123456H]
MOV EAX, [EBX]
MOV EBX, [ECX*2]
MOV EBX, [EAX+100H]
MOV EDX, [EAX*4+200H]
MOV EBX, [EAX+EDX*2]
MOV EBX, [EAX+EDX*2+300H]
MOV AX, [ESP]

用32位地址偏移量进行寻址的有效地址计算公式归纳如公式所示。



由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。具体规定如下:

1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;

如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;

2、默认段寄存器的选用取决于基址寄存器;

3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS;

4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。

下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

指令的举例        访问内存单元所用的段寄存器
MOV  AX, [123456H]        ;默认段寄存器DS
MOV  EAX, [EBX+EBP]        ;默认段寄存器DS
MOV  EBX, [EBP+EBX]        ;默认段寄存器SS
MOV  EBX, [EAX+100H]        ;默认段寄存器DS
MOV  EDX, ES:[EAX*4+200H]        ;显式段寄存器ES
MOV  [ESP+EDX*2], AX         ;默认段寄存器SS
MOV  EBX, GS:[EAX+EDX*2+300H]        ;显式段寄存器GS
MOV  AX, [ESP]         ;默认段寄存器SS

----------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/lilongjia ... /06/15/2081124.html

寄存器表
2011-06-15 07:55 by 李龙江, 1167 阅读, 2 评论, 收藏, 编辑
http://www.cnblogs.com/del/archive/2008/01/31/1059880.html转自万一的网志

类型        名称        二进制码        寄存器说明
多功能寄存器        AL        0        累加寄存器低八位
AH        100        累加寄存器低八位
AX        0        16 位累加寄存器
EAX        0        32 位累加寄存器
BL        11        基址寄存器低八位
BH        111        基址寄存器低八位
BX        11        16 位基址寄存器
EBX        11        32 位基址寄存器
CL        1        计数寄存器低八位
CH        101        计数寄存器低八位
CX        1        16 位计数寄存器
ECX        1        32 位计数寄存器
DL        10        数据寄存器低八位
DH        110        数据寄存器低八位
DX        10        16 位数据寄存器
EDX        10        32 位数据寄存器
指针寄存器        SP        100        16 位堆栈指针寄存器
ESP        100        32 位堆栈指针寄存器
BP        101        16位基址指针寄存器
EBP        101        32 位基址指针寄存器
变址寄存器        DI        111        16 位目标变址寄存器
EDI        111        32位目标变址寄存器
SI        110        16 位源变址寄存器
ESI        110        32位源变址寄存器
专用寄存器        IP        *        16 位指令指针寄存器
EIP        *        32 位指令指针寄存器
FLAGS        *        16 位标志寄存器
EFLAGS        *        32位标志寄存器
段寄存器        CS        1        代码段寄存器
DS        11        数据段寄存器
ES        0        附加段寄存器
SS        10        堆栈段寄存器
FS        100        标志段寄存器
GS        101        全局段寄存器
控制寄存器        CR0        0        控制寄存器零
CR1*        1        控制寄存器一
CR2        10        控制寄存器二
CR3        11        控制寄存器三
CR4        100        控制寄存器四
CR5*        101        控制寄存器五
CR6*        110        控制寄存器六
CR7*        111        控制寄存器七
调试寄存器        DR0        0        调试寄存器零
DR1        1        调试寄存器一
DR2        10        调试寄存器二
DR3        11        调试寄存器三
DR4*        100        调试寄存器四
DR5*        101        调试寄存器五
DR6        110        调试寄存器六
DR7        111        调试寄存器七
任务寄存器        TR0        0        任务寄存器零
TR1        1        任务寄存器一
TR2        10        任务寄存器二
TR3        11        任务寄存器三
TR4        100        任务寄存器四
TR5        101        任务寄存器五
TR6        110        任务寄存器六
TR7        111        任务寄存器七
浮点寄存器        ST0        0        浮点寄存器零
ST1        1        浮点寄存器一
ST2        10        浮点寄存器二
ST3        11        浮点寄存器三
ST4        100        浮点寄存器四
ST5        101        浮点寄存器五
ST6        110        浮点寄存器六
ST7        111        浮点寄存器七
多媒体寄存器        MM0        0        媒体寄存器零
MM1        1        媒体寄存器一
MM2        10        媒体寄存器二
MM3        11        媒体寄存器三
MM4        100        媒体寄存器四
MM5        101        媒体寄存器五
MM6        110        媒体寄存器六
MM7        111        媒体寄存器七
单指令流、多数据流寄存器        XMM0        0        单指令流、多数据流寄存器零
XMM1        1        单指令流、多数据流寄存器一
XMM2        10        单指令流、多数据流寄存器二
XMM3        11        单指令流、多数据流寄存器三
XMM4        100        单指令流、多数据流寄存器四
XMM5        101        单指令流、多数据流寄存器五
XMM6        110        单指令流、多数据流寄存器六
XMM7        111        单指令流、多数据流寄存器七
注: 英文名称有星号"*"的表示作为保留域, 实际并没有使用, 二进制码有星号"*"表示无需二进制数表示

---------------------------------------------------------------------------------------------------------------------------------------

http://www.cnblogs.com/lilongjia ... /06/15/2081128.html

汇编指令速查
2011-06-15 08:01 by 李龙江, 544 阅读, 0 评论, 收藏, 编辑
http://www.cnblogs.com/del/archive/2010/03/16/1687665.html转自万一网志

指令        功能
AAA        调整加
AAD        调整除
AAM        调整乘
AAS        调整减
ADC        进位加
ADD        加
AND        与
ARPL        调整优先级
BOUND        检查数组
BSF        位右扫描
BSR        位左扫描
BSWAP        交换字节
BT        位测试
BTC        位测试求反
BTR        位测试清零
BTS        位测试置一
CALL        过程调用
CBW        转换字节
CDQ        转换双字
CLC        进位清零
CLD        方向清零
CLI        中断清零
CLTS        任务清除
CMC        进位求反
CMOVA        高于传送
CMOVB        低于传送
CMOVE        相等传送
CMOVG        大于传送
CMOVL        小于传送
CMOVNA        不高于传送
CMOVNB        不低于传送
CMOVNE        不等传送
CMOVNG        不大于传送
CMOVNL        不小于传送
CMOVNO        不溢出传送
CMOVNP        非奇偶传送
CMOVNS        非负传送
CMOVO        溢出传送
CMOVP        奇偶传送
CMOVS        负号传送
CMP        比较
CMPSB        比较字节串
CMPSD        比较双字串
CMPSW        比较字串
CMPXCHG        比较交换
CMPXCHG486        比较交换486
CMPXCHG8B        比较交换8字节
CPUID        CPU标识
CWD        转换字
CWDE        扩展字
DAA        调整加十
DAS        调整减十
DEC        减一
DIV        除
ENTER        建立堆栈帧
HLT        停
IDIV        符号整除
IMUL        符号乘法
IN        端口输入
INC        加一
INSB        端口输入字节串
INSD        端口输入双字串
INSW        端口输入字串
JA        高于跳转
JB        低于跳转
JBE        不高于跳转
JCXZ        计数一六零跳转
JE        相等跳转
JECXZ        计数三二零跳转
JG        大于跳转
JL        小于跳转
JMP        跳转
JMPE        跳转扩展
JNB        不低于跳转
JNE        不等跳转
JNG        不大于跳转
JNL        不小于跳转
JNO        不溢出跳转
JNP        非奇偶跳转
JNS        非负跳转
JO        溢出跳转
JP        奇偶跳转
JS        负号跳转
LAHF        加载标志低八
LAR        加载访问权限
LDS        加载数据段
LEA        加载有效地址
LEAVE        清除过程堆栈
LES        加载附加段
LFS        加载标志段
LGDT        加载全局描述符
LGS        加载全局段
LIDT        加载中断描述符
LMSW        加载状态字
LOADALL        加载所有
LOADALL286        加载所有286
LOCK        锁
LODSB        加载源变址字节串
LODSD        加载源变址双字串
LODSW        加载源变址字串
LOOP        计数循环
LOOPE        相等循环
LOOPNE        不等循环
LOOPNZ        非零循环
LOOPZ        为零循环
LSL        加载段界限
LSS        加载堆栈段
LTR        加载任务
MONITOR        监视
MOV        传送
MOVSB        传送字节串
MOVSD        传送双字串
MOVSW        传送字串
MOVSX        符号传送
MOVZX        零传送
MUL        乘
MWAIT       
NEG        求补
NOP        空
NOT        非
OR        或
OUT        端口输出
OUTSB        端口输出字节串
OUTSD        端口输出双字串
OUTSW        端口输出字串
POP        出栈
POPA        全部出栈
POPF        标志出栈
PUSH        压栈
PUSHA        全部压栈
PUSHF        标志压栈
RCL        进位循环左移
RCR        进位循环右移
RDMSR        读专用模式
RDPMC        读执行监视计数
RDSHR       
RDTSC        读时间戳计数
REP        重复
REPE        相等重复
REPNE        不等重复
RET        过程返回
RETF        远过程返回
RETN        近过程返回
ROL        循环左移
ROR        循环右移
RSM        恢复系统管理
SAHF        恢复标志低八
SAL        算术左移
SALC       
SAR        算术右移
SBB        借位减
SCASB        扫描字节串
SCASD        扫描双字串
SCASW        扫描字串
SETA        高于置位
SETB        低于置位
SETE        相等置位
SETG        大于置位
SETL        小于置位
SETNA        不高于置位
SETNB        不低于置位
SETNE        不等置位
SETNG        不大于置位
SETNL        不小于置位
SETNO        不溢出置位
SETNP        非奇偶置位
SETNS        非负置位
SETO        溢出置位
SETP        奇偶置位
SETS        负号置位
SGDT        保存全局描述符
SHL        逻辑左移
SHLD        双精度左移
SHR        逻辑右移
SHRD        双精度右移
SIDT        保存中断描述符
SLDT        保存局部描述符
SMI       
SMINT       
SMINTOLD       
SMSW        保存状态字
STC        进位设置
STD        方向设置
STI        中断设置
STOSB        保存字节串
STOSD        保存双字串
STOSW        保存字串
STR        保存任务
SUB        减
SYSCALL        系统调用
SYSENTER        系统进入
SYSEXIT        系统退出
SYSRET        系统返回
TEST        数测试
UD0        未定义指令0
UD1        未定义指令1
UD2        未定义指令2
UMOV       
VERW        校验写
WAIT        等
WBINVD        回写无效高速缓存
WRMSR        写专用模式
WRSHR       
XADD        交换加
XBTS       
XCHG        交换
XLAT        换码
XOR        异或
XSTORE       


指令        功能
EMMS        媒体空MMX状态
F2XM1        浮点栈顶绝对值
FADD        浮点加
FADDP        浮点加出栈
FBLD        浮点加载十数
FBSTP        浮点保存十数出栈
FCHS        浮点正负求反
FCLEX        浮点检查错误清除
FCMOVB        浮点低于传送
FCMOVBE        浮点不高于传送
FCMOVE        浮点相等传送
FCMOVNB        浮点不低于传送
FCMOVNBE        浮点高于传送
FCMOVNE        浮点不等传送
FCMOVNU        浮点有序传送
FCMOVU        浮点无序传送
FCOM        浮点比较
FCOMI        浮点比较加载标志
FCOMIP        浮点比较加载标志出栈
FCOMP        浮点比较出栈
FCOMPP        浮点比较出栈二
FCOS        浮点余弦
FDECSTP        浮点栈针减一
FDISI        浮点检查禁止中断
FDIV        浮点除
FDIVP        浮点除出栈
FDIVR        浮点反除
FDIVRP        浮点反除出栈
FENI        浮点检查禁止中断二
FFREE        浮点释放
FFREEP        浮点释放出栈
FIADD        浮点加整数
FICOM        浮点比较整数
FICOMP        浮点比较整数出栈
FIDIV        浮点除整数
FIDIVR        浮点反除
FILD        浮点加载整数
FIMUL        浮点乘整数
FINCSTP        浮点栈针加一
FINIT        浮点检查初始化
FIST        浮点保存整数
FISTP        浮点保存整数出栈
FISTTP         
FISUB        浮点减整数
FISUBR        浮点反减整数
FLD        浮点加载数
FLD1        浮点加载一
FLDCW        浮点加载控制器
FLDENV        浮点加载环境
FLDL2E        浮点加载L2E
FLDL2T        浮点加载L2T
FLDLG2        浮点加载LG2
FLDLN2        浮点加载LN2
FLDPI        浮点加载PI
FLDZ        浮点加载零
FMUL        浮点乘
FMULP        浮点乘出栈
FNCLEX        浮点不检查错误清除
FNDISI        浮点不检查禁止中断
FNENI        浮点不检查禁止中断二
FNINIT        浮点不检查初始化
FNOP        浮点空
FNSAVE        浮点不检查保存状态
FNSTCW        浮点不检查保存控制器
FNSTENV        浮点不检查保存环境
FNSTSW        浮点不检查保存状态器
FPATAN        浮点部分反正切
FPREM        浮点部分余数
FPREM1        浮点部分余数二
FPTAN        浮点部分正切
FRNDINT        浮点舍入求整
FRSTOR        浮点恢复状态
FSAVE        浮点检查保存状态
FSCALE        浮点比例运算
FSETPM        浮点设置保护
FSIN        浮点正弦
FSINCOS        浮点正余弦
FSQRT        浮点平方根
FST        浮点保存
FSTCW        浮点检查保存控制器
FSTENV        浮点检查保存环境
FSTP        浮点保存出栈
FSTSW        浮点检查保存状态器
FSUB        浮点减
FSUBP        浮点减出栈
FSUBR        浮点反减
FSUBRP        浮点反减出栈
FTST        浮点比零
FUCOM        浮点无序比较
FUCOMI        浮点反比加载标志
FUCOMIP        浮点反比加载标志出栈
FUCOMP        浮点无序比较出栈
FUCOMPP        浮点无序比较出栈二
FWAIT        浮点等
FXAM        浮点检查
FXCH        浮点交换
FXTRACT        浮点分解
FYL2X        浮点求L2X
FYL2XP1        浮点求L2XP1
MOVED        媒体双字传送
MOVEQ        媒体四字传送
PACKSSDW        媒体符号双字压缩
PACKSSWB        媒体符号字压缩
PACKUSWB        媒体无符号字压缩
PADDB        媒体截断字节加
PADDD        媒体截断双字加
PADDSB        媒体符号饱和字节加
PADDSIW         
PADDSW        媒体符号饱和字加
PADDUSB        媒体无符号饱和字节加
PADDUSW        媒体无符号饱和字加
PADDW        媒体截断字加
PAND        媒体与
PANDN        媒体与非
PAVEB         
PCMPEQB        媒体字节比等
PCMPEQD        媒体双字比等
PCMPEQW        媒体字比等
PCMPGTB        媒体字节比大
PCMPGTD        媒体双字比大
PCMPGTW        媒体字比大
PDISTIB         
PMACHRIW         
PMADDWD         
PMAGW         
PMULHRIW         
PMULHRWC         
PMULHW         
PMVGEZB         
PMVLZB         
PMVNZB         
PMVZB         
POR        媒体或
PSLLD        媒体双字左移
PSLLQ        媒体四字左移
PSLLW        媒体字左移
PSRAD        媒体双字算术右移
PSRAW        媒体字算术右移
PSRLD        媒体双字右移
PSRLQ        媒体四字右移
PSRLW        媒体字右移
PSUBB        媒体截断字节减
PSUBSB        媒体符号饱和字节减
PSUBSIW         
PSUBSW        媒体符号饱和字减
PSUBUSB        媒体无符号饱和字节减
PSUBUSW        媒体无符号饱和字减
PSUBW        媒体截断字减
PUNPCKHBW        媒体字节高位解压
PUNPCKHDQ        媒体双字高位解压
PUNPCKHWD        媒体字高位解压
PUNPCKLBW        媒体字节低位解压
PUNPCKLDQ        媒体双字低位解压
PUNPCKLWD        媒体字低位解压

[ Last edited by zzz19760225 on 2016-12-12 at 15:24 ]
作者: zzz19760225     时间: 2016-6-26 19:55
1
作者: zzz19760225     时间: 2016-6-26 19:56
1
作者: zzz19760225     时间: 2016-6-26 19:57
1
作者: zzz19760225     时间: 2016-6-26 19:57
1
作者: zzz19760225     时间: 2016-6-26 19:59
1
作者: zzz19760225     时间: 2016-6-26 19:59
1
作者: zzz19760225     时间: 2016-6-26 20:00
1
作者: zzz19760225     时间: 2016-6-26 20:01
1
作者: zzz19760225     时间: 2016-6-26 20:06
1
作者: zzz19760225     时间: 2016-6-26 20:07
1
作者: zzz19760225     时间: 2016-6-26 20:08
1
作者: zzz19760225     时间: 2016-6-26 20:08
1
作者: zzz19760225     时间: 2016-6-26 20:10
1
作者: zzz19760225     时间: 2016-6-26 20:12
1
作者: zzz19760225     时间: 2016-6-26 20:13    标题: 工具

(linux下vim编辑二进制和十六进制文件)
http://cloudtech.iteye.com/blog/1692452

(转)vim+xxd=强大的十六进制编辑器


原文地址:http://xineohpanihc.iteye.com/blog/1148741
vim配置文件地址:https://digital-ldentification.googlecode.com/files/vimrc
vim是黑客文化中强大的编辑器。利用它调用外部十六进制文件显示命令xxd就可以顺利的编辑二进制文件了。
其中,%在vimComandLine时代表当前文件的路径,xxd是以十六进制显示一个文件,xxd -r>是将十六进制还原为二进制。
下面举一个例子,备份我们的MBR。
sudo dd if=/dev/sda of=~/mbr.backup bs=512 count=1
题外话:其中含有分区表,这时我们可以利用这个命令恢复我们的MBr:
sudo dd if=~/mbr.backup of=/dev/sda bs=512 count=1
sudo dd if=~/mbr.backup of=/dev/sda bs=1 count=66 seek=446(恢复分区表)
好了,这个就是我们的MBR文件,是二进制的。

首先以二进制的方式打开它:
vim mbr.backup -b
再在vim 命令模式下输入:
:%!xxd #参数%指当前所编辑的文件
此时MBR文件会以十六进制显示,现在就可以编辑它了。。
========================================================
0000090: be88 7de8 1c01 be05 7cf6 c280 7448 b441 ..}.....|...tH.A
00000a0: bbaa 55cd 135a 5272 3d81 fb55 aa75 3783 ..U..ZRr=..U.u7.
00000b0: e101 7432 31c0 8944 0440 8844 ff89 4402 ..t21..D.@.D..D.
00000c0: c704 1000 668b 1e5c 7c66 895c 0866 8b1e ....f..\|f.\.f..
00000d0: 607c 6689 5c0c c744 0600 70b4 42cd 1372 `|f.\..D..p.B..r
00000e0: 05bb 0070 eb76 b408 cd13 730d f6c2 800f ...p.v....s.....
00000f0: 84d0 00be 937d e982 0066 0fb6 c688 64ff .....}...f....d.
0000100: 4066 8944 040f b6d1 c1e2 0288 e888 f440 @f.D...........@
0000110: 8944 080f b6c2 c0e8 0266 8904 66a1 607c .D.......f..f.`|
0000120: 6609 c075 4e66 a15c 7c66 31d2 66f7 3488 f..uNf.\|f1.f.4.
0000130: d131 d266 f774 043b 4408 7d37 fec1 88c5 .1.f.t.;D.}7....
0000140: 30c0 c1e8 0208 c188 d05a 88c6 bb00 708e 0........Z....p.
0000150: c331 dbb8 0102 cd13 721e 8cc3 601e b900 .1......r...`...
0000160: 018e db31 f6bf 0080 8ec6 fcf3 a51f 61ff ...1..........a.
0000170: 265a 7cbe 8e7d eb03 be9d 7de8 3400 bea2 &Z|..}....}.4...
0000180: 7de8 2e00 cd18 ebfe 4752 5542 2000 4765 }.......GRUB .Ge
0000190: 6f6d 0048 6172 6420 4469 736b 0052 6561 om.Hard Disk.Rea
00001a0: 6400 2045 7272 6f72 0d0a 00bb 0100 b40e d. Error........
00001b0: cd10 ac3c 0075 f4c3 e3b9 76fb 0000 8001 ...<.u....v.....
00001c0: 0100 07fe ffff 3f00 0000 499d d801 00fe ......?...I.....
00001d0: ffff 0ffe ffff c59d d801 eb4c 6a23 0000 ...........Lj#..
00001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.

================================================================
编辑完了以后,我们需要还原为二进制文件:
:%!xxd -r #参数-r是指将当前的十六进制转换为二进制

好了,保存退出:
:wq
==========================================
VIM显示十六进制出错出处:http://www.cnblogs.com/lidp/archive/2009/06/26/1697873.html

在linux下用vim打开jpg文件,使用%!xxd进行16进制显示时,文件头显示为"3f3f
3f3f 0011 0804"文件尾端显示为 "3f3f
0a";而同样的操作在windows下,就显示为"ffd8 ffc0 0011 0804"和 "ffd9
0a",这才是正确的jpeg文件头和文件尾标志。
很蹊跷 !
初时,我以为是jpeg在windows和linux下是不同的文件头,后来把jpg后缀去掉,就一个纯文件,现象依旧。考虑可能不是操作系统的差异了。
重新使用ghex打开jpeg数据查看,发现显示正常,为"ffd8 ffc0 0011
0804"和 "ffd9 0a",正确。
估计应该是vim的问题了。
3f的ascii码是?,那表示vim对文件头、尾没有正常解析,是不是和vim解析文件时用的编码格式有关系呢?
打开.vimrc配置项,屏蔽掉下面这句话:
set fileencodings=utf-8,gb2312,gbk,gb18030,ucs-bom
再用vim打开jpeg文件,显示"ffd8 ffc0 0011 0804"和 "ffd9 0a",
显示正确。
原来,为了支持识别和显示中文,我规定了vim的fileencodings,
当vim打开文件时,会使用规定的编码格式对数据进行解析,可惜jpeg的文件头FFD8、尾FFD9
不是任何一个中文的编码,vim找不到对应的中文字,就显示为??,即:3f3f。
至此,困惑全部打开。




通常来说文件分为文本和二进制文件两大类,文本文件的编辑很容易,Windows下的notepad、UltraEdit都很好用,二进制文件的编辑在Windows下也有很多工具,UltraEdit也不错,但是Linux下呢?今天终于发现了一个好方法,但是最终出处找不到了。
首先创建一个二进制文件:
view sourceprint?

Ruby代码收藏代码
[oracle@logservertmp]$echo-n"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz">test.bin
[oracle@logservertmp]$cattest.bin
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
[oracle@logservertmp]$
注意echo 一定要跟上 -n 选项,否则会被自动加上一个换行行,再用vim打开 test.bin
Ruby代码收藏代码
[oracle@logservertmp]$vim-btest.bin
vim 的 -b 选项是告诉 vim 打开的是一个二进制文件,不指定的话,会在后面加上 0x0a ,即一个换行符。
在命令模式下键入:
Ruby代码收藏代码
:%!xxd

如果 vim 后面没有加 -b 选项就会出现可恶的 0x0a:

如果有 -b 选项就不会有这种情况:

然后进入编辑模式改,改就是了,我将A、B对应的41、42改成61、62,将a、b对应的61、62改成41、42。

回到命令模式输入:
Ruby代码收藏代码
:%!xxd-r

此时可以发现AB和ab的位置互换了。

最后在命令模式中输入 :wq 保存退出即可。


-----------------------------------------------------------------------------------------------------------


vim可以很方便地编辑二进制文件,个人认为它比emacs的二进制编辑方式更好用。vim中二进制文件的编辑是先通过外部程序xxd来把文件dump成其二进制的文本形式,然后就可以按通常的编辑方式对文件进行编辑,编辑完成后再用xxd转化为原来的形式即可。
可分如下几步进行:
(1) 首先以二进制方式编辑这个文件:vim-b datafile
(2) 现在用xxd把这个文件转换成十六进制: :%!xxd
文本看起来像这样:
0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.
现在你可以随心所欲地阅读和编辑这些文本了。Vim把这些信息当作普通文本来对待。修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。
(3) 最后,用下面的命令把它转换回来: :%!xxd-r
只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。
xxd是linux的一个命令,vim可以通过”!”来调用外部命令,其功能就是进行十六进制的dump或者反之。
VIM编辑二进制文件 (vim手册载录)
*23.4* 二进制文件
你可以用Vim来编辑二进制文件。Vim本非为此而设计的,因而有若干局限。但你能读取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,其它的就跟原来那个一模一样。
要保证Vim别把它那些聪明的窍门用错地方,启动Vim时加上 ”-b” 参数:
vim -b datafile
这个参数设定了 'binary' 选项。其作用是排除所有的意外副作用。例如,'textwidth' 设为零,免得文本行给擅自排版了。并且,文件一律以 Unix 文件格式读取。
二进制模式可以用来修改某程序的消息报文。小心别插入或删除任何字符,那会让程序运行出问题。用 “R” 命令进入替换模式。
文件里的很多字符都是不可显示的。用 Hex 格式来显示它们的值:
:set display=uhex
另外,也可以用命令 “ga” 来显示光标下的字符值。当光标位于一个 <Esc> 字符上时,该命令的输出看起来就像这样:
<^[>  27, Hex 1b,  Octal 033
文件中也许没那么多换行符。你可以关闭 'wrap' 选项来获得总览的效果:
        :set nowrap
字节位置
要发现你在文件中的当前字节位置,请用这个命令:
g CTRL-G
其输出十分冗长:
    Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206
最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 'fileformat' 选项导致换行符字节不同的影响。
要移到文件中某个指定的字节,请用 “go” 命令。例如,要移到字节 2345:
2345go
使用XXD
一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你可以在Vim里通过转换程序 “xxd” 来达到这效果。该程序是随Vim一起发布的。
首先以二进制方式编辑这个文件:
vim -b datafile
现在用xxd把这个文件转换成十六进制:
        :%!xxd
文本看起来像这样:
        0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI
        0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0
        0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59.
现在你可以随心所欲地阅读和编辑这些文本了。Vim把这些信息当作普通文本来对待。修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。
最后,用下面的命令把它转换回来:
:%!xxd -r
只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。


--------------------------------------------------------------------------------------------------------

xxd使用手册

目录:

★ 命令行参数简介
★ xxd使用中的注意事项
★ xxd使用举例
. 从偏移0x10开始显示,也就是缺省情况下的第一行不显示
. 显示倒数0x30个字节(缺省情况下倒数3行)
. 显示120字节,连续显示,每行20字节
. 显示120字节,每行12字节
. 显示0x6c偏移开始的12个字节
. 创建一个65537字节大小的文件,除了最后一个字节是'A',其余都是0x00
. 使用autoskip选项
. 创建只包含一个'A'字节的文件
. 复制输入文件到输出文件,且给输出文件前部增加100字节的0x00
. 二进制文件打补丁
. Read single characters from a serial line

★ 命令行参数简介

xxd -h
xxd [options] [infile [outfile]]
xxd -r [options] [infile [outfile]]

xxd可以创建给定文件或标准输入的hexdump,也可以还原一个hexdump成以前的二进
制文件。如果没有指定文件或指定文件名为-,则采用标准输入。如果没有指定输出
文件或指定文件名为-,则采用标准输出。

-a
toggle autoskip: A single '*' replaces nul-lines. Default off.

-b
采用2进制显示,而不是默认的16进制

xxd -l 32 -b scz.sh
0000000: 00100011 00100001 00100000 00101111 01100010 01101001 #! /bi
0000006: 01101110 00101111 01110011 01101000 00001010 00100011 n/sh.#
000000c: 00001010 00100011 00100000 11001000 10100001 11010110 .# ...
0000012: 11110111 11001001 11101000 10110001 10111000 10111010 ......
0000018: 11000101 00001010 00100011 00100000 01100011 01100001 ..# ca
000001e: 01110100 00100000 t

-c cols
默认16,-i指定时采用12,-p指定时采用30,-b指定时采用6,最大256
-c8、-c 8、-c 010是等价的,其他选项类似。

xxd -c 8 -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f #! /bin/
0000008: 73 68 0a 23 0a 23 20 c8 sh.#.# .
0000010: a1 d6 f7 c9 e8 b1 b8 ba ........
0000018: c5 0a 23 20 63 61 74 20 ..# cat

-E
不用ASCII显示,而采用EBCDIC编码,不影响16进制显示

xxd -E -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f 73 68 0a 23 0a 23 20 c8 ......>........H
0000010: a1 d6 f7 c9 e8 b1 b8 ba c5 0a 23 20 63 61 74 20 .O7IY...E..../..

-g bytes
比较下面三种显示方式,缺省bytes为2,指定-b时采用1。

xxd -l 32 -g 0 scz.sh
0000000: 2321202f62696e2f73680a230a2320c8 #! /bin/sh.#.# .
0000010: a1d6f7c9e8b1b8bac50a232063617420 ..........# cat

xxd -l 32 -g 1 scz.sh
0000000: 23 21 20 2f 62 69 6e 2f 73 68 0a 23 0a 23 20 c8 #! /bin/sh.#.# .
0000010: a1 d6 f7 c9 e8 b1 b8 ba c5 0a 23 20 63 61 74 20 ..........# cat

xxd -l 32 -g 2 scz.sh
0000000: 2321 202f 6269 6e2f 7368 0a23 0a23 20c8 #! /bin/sh.#.# .
0000010: a1d6 f7c9 e8b1 b8ba c50a 2320 6361 7420 ..........# cat

-h
显示帮助信息

-i
以C语言数组形式显示,如果输入来自stdin,则有所区别

unsigned char scz_sh[] = {
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23,
0x0a, 0x23, 0x20, 0xc8, 0xa1, 0xd6, 0xf7, 0xc9, 0xe8, 0xb1, 0xb8, 0xba,
0xc5, 0x0a, 0x23, 0x20, 0x63, 0x61, 0x74, 0x20
};
unsigned int scz_sh_len = 32;

注意区分下面两条命令执行效果的不同

xxd -l 12 -i < scz.sh
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23

xxd -l 12 -i scz.sh
unsigned char scz_sh[] = {
0x23, 0x21, 0x20, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x0a, 0x23
};
unsigned int scz_sh_len = 12;

-l len
只显示<len>这么多字节

-p
以连续的16进制表示显示,比较下面的不同显示效果

xxd -u -l 32 scz.sh
0000000: 2321 202F 6269 6E2F 7368 0A23 0A23 20C8 #! /bin/sh.#.# .
0000010: A1D6 F7C9 E8B1 B8BA C50A 2320 6361 7420 ..........# cat

xxd -u -l 32 -p scz.sh
2321202F62696E2F73680A230A2320C8A1D6F7C9E8B1B8BAC50A23206361
7420

-r
reverse operation: convert (or patch) hexdump into binary.
If not writing to stdout, xxd writes into its output file without
truncating it. Use the combination -r -p to read plain hexadecimal
dumps without line number information and without a particular
column layout. Additional Whitespace and line-breaks are allowed
anywhere.

这个选项要用的话,一定要提前测试

-seek offset
When used after -r : revert with <offset> added to file positions
found in hexdump.

-s [+][-]seek
start at <seek> bytes abs. (or rel.) infile offset. + indicates
that the seek is relative to the current stdin file position
(meaningless when not reading from stdin). - indicates that the seek
should be that many characters from the end of the input (or if
combined with + : before the current stdin file position).
Without -s option, xxd starts at the current file position.

-u
采用大写16进制字母显示,缺省采用小写16进制字母

-v
显示版本信息

★ xxd使用中的注意事项

xxd -r has some builtin magic while evaluating line number information. If the ouput file
is seekable, then the linenumbers at the start of each hexdump line may be out of order,
lines may be missing, or overlapping. In these cases xxd will lseek(2) to the next position.
If the output file is not seekable, only gaps are allowed, which will be filled by null-
bytes.

xxd -r never generates parse errors. Garbage is silently skipped.

When editing hexdumps, please note that xxd -r skips everything on the input line after
reading enough columns of hexadecimal data (see option -c). This also means, that changes to
the printable ascii (or ebcdic) columns are always ignored. Reverting a plain (or
postscript) style hexdump with xxd -r -p does not depend on the correct number of columns.
Here an thing that looks like a pair of hex-digits is interpreted.

xxd -s +seek may be different from xxd -s seek , as lseek(2) is used to "rewind" input. A
'+' makes a difference if the input source is stdin, and if stdin's file position is not at
the start of the file by the time xxd is started and given its input. The following
examples may help to clarify (or further confuse!)...

Rewind stdin before reading; needed because the `cat' has already read to the end of stdin.
% sh -c 'cat > plain_copy; xxd -s 0 > hex_copy' < file

Hexdump from file position 0x480 (=1024+128) onwards. The `+' sign means "relative to the
current position", thus the `128' adds to the 1k where dd left off.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 > hex_snippet' < file

Hexdump from file position 0x100 ( = 1024-768) on.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +-768 > hex_snippet' < file

However, this is a rare situation and the use of `+' is rarely needed. the author prefers
to monitor the effect of xxd with strace(1) or truss(1), whenever -s is used.

★ xxd使用举例

.. 从偏移0x10开始显示,也就是缺省情况下的第一行不显示
xxd -s 0x10 scz.sh

.. 显示倒数0x30个字节(缺省情况下倒数3行)
xxd -s -0x30 -g 1 scz.sh

.. 显示120字节,连续显示,每行20字节
xxd -l 120 -p -c 20 scz.sh

.. 显示120字节,每行12字节
xxd -l 120 -c 12 -g 1 scz.sh

.. 显示0x6c偏移开始的12个字节
xxd -l 12 -c 12 -g 1 -s 0x6c scz.sh

.. 创建一个65537字节大小的文件,除了最后一个字节是'A',其余都是0x00
echo 10000: 41 | xxd -r > scz.txt

od -A x -t x1 scz.txt
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
010000 41
010001

.. 使用autoskip选项

xxd -a scz.txt
0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
*
0010000: 41 A

注意,缺省情况下autoskip功能是关闭的,但od看样子缺省就是打开的。

.. 创建只包含一个'A'字节的文件
echo '010000: 41' | xxd -r -s -0x10000 > scz_1

注意对比这些效果
echo '010: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1

echo '010: 41 42 43 44 45 46' | xxd -r -s -0x10 > scz_1
等价于
echo '0: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1

echo '010: 41 42 43 44 45 46' | xxd -r -s -0x12 > scz_1
执行的时候报错,xxd: sorry, cannot seek backwards.

echo '010: 41 42 43 44 45 46' | xxd -r -s 0x10 > scz_1
等价于
echo '020: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1

.. 复制输入文件到输出文件,且给输出文件前部增加100字节的0x00
xxd scz_1 | xxd -r -s 100 > scz_2

od -A x -t x1 scz_2
000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
000060 00 00 00 00 41
000065

.. 二进制文件打补丁
echo '0: 41 42 43 44 45 46' | xxd -r -s 0 > scz_1
od -A x -t x1 scz_1
echo '4: 47 48' | xxd -r - scz_1
od -A x -t x1 scz_1

.. Use xxd as a filter within an editor such as vim(1) to hexdump a region
marked between `a' and `z'.
:'a,'z!xxd

.. Use xxd as a filter within an editor such as vim(1) to recover a
binary hexdump marked between `a' and `z'.
:'a,'z!xxd -r

.. Use xxd as a filter within an editor such as vim(1) to recover one line
of a hexdump. Move the cursor over the line and type:
!!xxd -r

.. Read single characters from a serial line
xxd -c1 < /dev/term/b &
stty < /dev/term/b -echo -opost -isig -icanon min 1
echo -n foo > /dev/term/b

[ Last edited by zzz19760225 on 2016-12-15 at 01:31 ]
作者: zzz19760225     时间: 2017-11-27 16:17
1
作者: zzz19760225     时间: 2017-11-27 16:17
1
作者: zzz19760225     时间: 2017-11-27 16:17
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:18
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19    标题: 数学

函数:
冥函数
指数函数
对数函数
三角函数
反三角函数
常数函数

01.必修1——函数(基础点拨)                                                                : 苗金利           琴诸葛
https://www.bilibili.com/video/av11832845/?from=search&seid=8629257587730841330

[ Last edited by zzz19760225 on 2017-11-27 at 16:51 ]
作者: zzz19760225     时间: 2017-11-27 16:19
冥函数:
x=y z
x=y,z;
m:x=y,z;
x,y,z,=任何数字的可能结果,例如负数-10。

[ Last edited by zzz19760225 on 2017-11-27 at 16:35 ]
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1
作者: zzz19760225     时间: 2017-11-27 16:19
1




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5