概述
想要开发操作系统,怎么能不知道汇编指令呢?于是翻看intel开发文档,把所有的汇编指令都做了一个整理,大家也可以收藏一下,以后肯定会用得着。
1 通用指令
1.1 数据传输指令
MOV——Move指令:可以在通用寄存器之间移动数据;在内存和通用寄存器或段寄存器之间移动数据;把立即数移动到通用寄存器。
CMOVE/CMOVZ——满足相等条件时移动/满足是0条件时移动。
CMOVNE/CMOVNZ——满足不相等条件时移动/满足不是0条件时移动。
CMOVA/CMOVNBE——满足大于条件时移动/满足不小于等于条件时移动。
CMOVAE/CMOVNB——满足大于等于条件时移动/满足不小于条件时移动。
CMOVB/CMOVNAE——满足小于条件时移动/满足不大于等于条件时移动。
CMOVBE/CMOVNA——满足小于等于条件时移动/满足不大于条件时移动。
CMOVG/CMOVNLE——满足大于条件时移动/满足不小于等于条件时移动。
CMOVGE/CMOVNL——满足大于等于条件时移动/满足不小于条件时移动。
CMOVL/CMOVNGE——满足小于条件时移动/满足不大于等于条件时移动。
CMOVLE/CMOVNG——满足小于等于条件时移动/满足不大于条件时移动。
CMOVC——满足有进位条件时移动。
CMOVNC——满足没有进位条件时移动。
CMOVO——满足有溢出条件时移动。
CMOVNO——满足没有溢出条件时移动。
CMOVS——满足是负数条件时移动。
CMOVNS——满足是正数条件时移动。
CMOVP/CMOVPE——满足奇偶校验位为1条件时移动/ 满足奇偶校验位为偶数条件时移动。
CMOVNP/CMOVPO——满足奇偶校验位为0条件时移动/ 满足奇偶校验位为奇数条件时移动。
XCHG——交换指令。
BSWAP——字节交换指令。
XADD——交换并相加指令。
CMPXCHG——比较交换指令。
CMPXCHG8B——8字节的比较交换指令。
PUSH——压栈指令。
POP——出栈指令。
PUSHA/PUSHAD——把常用寄存器的数据依次压栈。
POPA/POPAD——出栈并按顺序把值传给常用寄存器。
CWD/CDQ——转换word为doubleword/转换doubleword为quadword。
CBW/CWDE——转换byte为word/转换EAX寄存器中的word为doubleword。
MOVSX——Move并且以符号位扩展。
MOVZX——Move并且以0扩展。
1.2 二进制算术指令
ADCX——带进位的无符号加指令。
ADOX——带溢出位的无符号加指令。
ADD——整数相加指令。
ADC——带符号位的相加指令。
SUB——减法指令。
SBB——带借位的减法指令。
IMUL——带符号的乘法指令。
MUL——无符号的乘法指令。
IDIV——带符号的除法指令。
DIV——无符号的除法指令。
INC——自增指令。
DEC——自减指令。
NEG——取反指令。
CMP——比较指令。
1.3 小数运算指令
DAA——加法后进行小数位调整。
DAS——减法后进行小数位调整。
AAA——加法后进行ASCLL调整。
AAS——减法后进行ASCLL调整。
AAM——乘法后进行ASCLL调整。
AAD——除法后进行ASCLL调整。
1.4 逻辑指令
AND——与指令。
OR——或指令。
XOR——异或指令。
NOT——非指令。
1.5 移位及轮转指令
SAR——算术右移指令。
SHR——逻辑右移指令。
SAL/SHL——算术左移/逻辑左移指令。
SHRD——双精度右移指令。
SHLD——双精度左移指令。
ROR——循环右移指令。
ROL——循环左移指令。
RCR——带进位的循环右移指令。
RCL——带进位的循环左移指令。
1.6 位和字节指令
BT——位检测指令。
BTS——位检测并置位指令。
BTR——位检测并复位指令。
BTC——位检测并取反指令。
BSF——位扫描, 低 -> 高。
BSR——位扫描, 高 -> 低。
SETE/SETZ——相等置位/为0置位指令。
SETNE/SETNZ——不相等置位/不为0置位指令。
SETA/SETNBE——高于置位/不小于等于置位指令。
SETAE/SETNB/SETNC——高于等于置位/不小于置位/无进位置位指令。
SETB/SETNAE/SETC——小于置位/不高于等于置位/有进位置位指令。
SETBE/SETNA——小于等于置位/不大于置位指令。
SETG/SETNLE——大于置位/不小于等于置位指令。
SETGE/SETNL——大于等于置位/不小于置位指令。
SETL/SETNGE——小于置位/不大于等于置位指令。
SETLE/SETNG——小于等于置位/不大于置位指令。
SETS——负号置位指令。
SETNS——非负置位指令。
SETO——溢出置位指令。
SETNO——无溢出置位指令。
SETPE/SETP——奇偶位表示偶数置位指令/奇偶位置位指令。
SETPO/SETNP——奇偶位表示奇数置位指令/非奇偶位置位指令。
TEST——逻辑比较指令。
CRC32——为循环冗余检查更快速高效的实现和数据完整性协议的实现提供硬件加速指令。
POPCNT——该指令计算第二个操作数有多少个1,并把值返回给第一个操作数(目的寄存器)。
1.7 控制转移指令
JMP——跳转指令。
JE/JZ——相等跳转/为0跳转指令。
JNE/JNZ——不相等跳转/不为0跳转指令。
JA/JNBE——大于跳转/不小于等于跳转指令。
JAE/JNB——大于等于跳转/不小于跳转指令。
JB/JNAE——小于跳转/不大于等于跳转指令。
JBE/JNA——小于等于跳转/不大于跳转指令。
JG/JNLE——大于跳转/不小于等于跳转指令。
JGE/JNL——大于等于跳转/不小于跳转指令。
JL/JNGE——小于跳转/不大于等于跳转指令。
JLE/JNG——小于等于跳转/不大于跳转指令。
JC——有进位跳转指令。
JNC——无进位跳转指令。
JO——有溢出跳转指令。
JNO——无溢出跳转指令。
JS——负数跳转指令。
JNS——非负数跳转指令。
JPO/JNP——奇偶位表示奇数跳转指令/非奇偶位跳转指令。
JPE/JP——奇偶位表示偶数跳转指令/奇偶位跳转指令。
JCXZ/JECXZ——CX寄存器为0跳转/ECX寄存器为0跳转。
LOOP——以ECX寄存器中的数循环。
LOOPZ/LOOPE——ECX寄存器为零循环。
LOOPNZ/LOOPNE——ECX寄存器不为零循环。
CALL——过程调用指令。
RET——过程返回指令。
IRET——中断返回指令。
INT——软中断指令。
INTO——溢出中断指令。
BOUND——检查值是否超出边界指令。
ENTER——高级程序进入。
LEAVE——高级程序退出。
1.8 string指令
MOVS/MOVSB——传送string/传送字节串指令。
MOVS/MOVSW——传送string/传送双字节串指令。
MOVS/MOVSD——传送string/传送四字节串指令。
CMPS/CMPSB——string比较/字节串比较指令。
CMPS/CMPSW——string比较/双字节串比较指令。
CMPS/CMPSD——string比较/四字节串比较指令。
SCAS/SCASB——string扫描/字节串扫描指令。
SCAS/SCASW——string扫描/双字节串扫描指令。
SCAS/SCASD——string扫描/四字节串扫描指令。
LODS/LODSB——string装入/字节串装入指令。
LODS/LODSW——string装入/双字节串装入指令。
LODS/LODSD——string装入/四字节串装入指令。
STOS/STOSB——string存储/字节串存储指令。
STOS/STOSW——string存储/双字节串存储指令。
STOS/STOSD——string存储/四字节串存储指令。
REP——当ECX不为0时重复指令。
REPE/REPZ——相等重复指令。
REPNE/REPNZ——不相等重复指令。
1.9 I/0指令
IN——从端口输入指令。
OUT——向端口输出指令。
INS/INSB——向端口输入string/向端口输入字节指令。
INS/INSW——向端口输入string/向端口输入双字节指令。
INS/INSD——向端口输入string/向端口输入四字节指令。
OUTS/OUTSB——向端口输出string/向端口输出字节指令。
OUTS/OUTSW——向端口输出string/向端口输出双字节指令。
OUTS/OUTSD——向端口输出string/向端口输出四字节指令。
1.10 标志位指令
STC——设置进位指令。
CLC——清除进位指令。
CMC——进位取反指令。
CLD——清除方向标志指令。
STD——设置方向标志指令。
LAHF——从AH寄存器中加载标志位。
SAHF——储存标志位到AH寄存器。
PUSHF/PUSHFD——把EFLAGS值压栈。
POPF/POPFD——出栈,并把值赋给EFLAGS。
STI——设置中断标志指令。
CLI——清除中断标志指令。
1.11 段寄存器指令
LDS——使用DS加载远指针。
LES——使用ES加载远指针。
LFS——使用FS加载远指针。
LGS——使用GS加载远指针。
LSS——使用SS加载远指针。
1.12 其他指令
LEA——载入有效的地址指令。
NOP——空指令。
UD——未定义指令。
XLAT/XLATB——查表指令。
CPUID——处理器标识指令。
MOVBE——在交换数据字节后移动数据。
PREFETCHW——预取数据到缓存中等待写入。
PREFETCHWT1——预取T1数据到缓存中等待写入。
CLFLUSH——缓存线清除指令。
CLFLUSHOPT——有优化的缓存线清除指令。
2 系统指令
CLAC——清除AC标志位指令。
STAC——设置AC标志位指令。
LGDT——加载全局描述符表指令。
SGDT——保存全局描述符表指令。
LLDT——加载局部描述符表指令。
SLDT——保存局部描述符表指令。
LTR——加载任务寄存器指令。
STR——保存任务寄存器指令。
LIDT——加载中断描述符表指令。
SIDT——保存中断描述符表指令。
LMSW——以双字节加载机器状态指令。
SMSW——保存机器状态为双字节指令。
CLTS——清除任务切换标志指令。
ARPL——调整请求特权级指令。
LAR——加载访问权限指令。
LSL——加载段界限指令。
VERR——判断段是否可读指令。
VERW——判断段是否可写指令。
INVD——缓存失效,没有回写指令。
WBINVD——缓存失效,没有回写指令。
INVLPG ——TLB入口失效指令。
INVPCID——进程上下文识别失效指令。
LOCK (前缀) ——锁定总线指令。
HLT——挂起处理器指令。
RSM——返回系统管理模式。
RDMSR——读取MSR寄存器。
WRMSR——向MSR寄存器写入数据。
RDPMC——读性能监视计数器。
RDTSC——读时间戳。
RDTSCP——读时间戳和处理器ID。
SYSENTER——进入CPL = 0。
SYSEXIT——进入CPL = 3。
XSAVE——把处理器扩展的状态写进内存。
XSAVEC——把处理器扩展的状态压缩写进内存。
XSAVEOPT——把处理器扩展的状态优化后写进内存。
RDFSBASE——在任何特权等级下读取FS的基址。
RDGSBASE——在任何特权等级下读取GS的基址。
WRFSBASE——在任何特权等级下填写FS的基址。
WRGSBASE——在任何特权等级下填写GS的基址。
如果此篇文章对您有所帮助,请多多支持哦!您的支持是我一直写下去的动力!
最后
以上就是踏实野狼为你收集整理的操作系统开发--所有汇编指令集合的全部内容,希望文章能够帮你解决操作系统开发--所有汇编指令集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复