作者在 2010-12-30 20:10:15 发布以下内容
寄存器
通用 8个32位奇存器,用于处理数据
段 6个16位寄存器,用于处理内存访问
指令指针 单一的32位寄存器,指向要执行的下一条指令码
浮点数据 8个80位寄存器,指向要执行的下一条指令
控制 5个32位寄存器,用于确定处理器的操作模式
调试 8个32位寄存器,用于在调试处理时包含信息
通用寄存器
EAX 用于操作数和结果数据的累加器
EBX 指向数据内存段中的数据指针
ECX 字符串和循环操作的计数器
EDX I/O指针
EDI 用于字符串操作的目标的数据指针
ESI 用于字符操作的源的数据指针
ESP 堆栈指针
EBP 堆栈数据指针
段寄存器 (平坦内存模式、分段模式、实地址模式)
CS 代码段
DS 数据段
SS 堆栈段
ES 附加段指针
FS 附加段指针
GS 附加段指针
控制寄存器
CR0 控制操作模式和处理
CR1 当前没有使用
CR2 内存页面错误信息
CR3 内存页面目录信息
CR4 支持处理器特性和说明处理器特性能力的标志
标志
状态标志
标志 位 名称
CF 0 进位标志
PF 2 奇偶标志
AF 4 辅助进位标志
ZF 6 零标志
SF 7 符号标志
OF 11 溢出标志
控制标志
标志 位 名称
TF 8 陷阱标志
IF 9 中断使能标志
IOPL 12和13 I/O特权级别标志
NT 14 嵌套任务标志
RF 16 恢复标志
VM 17 虚拟8086模式标志
VIF 19 虚拟中断标志
VIP 20 虚拟中断挂起标志
ID 21 识别标志
GNU TOOLS
rpm -qa | grep binutils
dpkg -1 | grep binutil
binutil包含
as 汇编器
ld 连接器
gcc 编译器
gdb 调试器程序
kdbg KDE调试器
objdump 反汇编工具
gprof 简档程序
strace 程序跟踪工具
段
数据段
.ascii 文本字符串
.asciz 以空字符结尾的文本字符串
.byte 字节值
.double 双精度浮点数
.float 单精度浮点数
.int 32位整数
.long 32位整数(和.int相同)
.octa 16字节整数
.quad 8字节整数
.short 16位整数
.single 单精度浮点数
bss段
.comm 声明末初始化的数据的通用内存区域
.lcomm 声明末初始化的数据的本地通用内存区域
汇编指令集
(X)表于尾部可以更换
l 32位
w 16位
b 8位
----------------------------------------------------------------
nop 空指令
----------------------------------------------------------------
----------------------------------------------------------------
CPUID 收集程序正在基其上运行的处理器信息
----------------------------------------------------------------
EXA CPUID输出
----------------------------------------------------------------
0 厂商ID(Vendor ID)字符和技术的最大CPUID选项值
1 处理器类型、系列、型号和分步信息
2 处理器缓存配置
3 处理器序列号
4 缓存配置(线程数、核心数量和物理属性)
5 监视信息
80000000h 扩展的厂商ID字符器和支持的级别
80000001h 扩展的处理器类型、系列、型号和分步信息
80000002h~80000004h 扩展的处理器名称字符串
--------------------------------------------------------------
--------------------------------------------------------------
ADDL 清空堆栈参数
--------------------------------------------------------------
addl source, destination
--------------------------------------------------------------
MOV (X)l w b 传送数据
--------------------------------------------------------------
movx source, destination
--------------------------------------------------------------
CMOV (X)l w b 条件传送数据
--------------------------------------------------------------
cmovx source, destination
EFLAGS位 名称 描述
CF 进位(Carry)标志 数学表达式产生进位或者错位
OF 溢出(Overflow)标志 整数值过大或者过小
PF 奇偶校验(Parity)标志 寄存器包含数学操作造成的错误数据
SF 符号(Sign)标志 指出结果为正还是负
ZF 零(Zero)标志 数学操作的结果为零
指令对 描述 EFLAGS状态
CMOVA/CMOVNBE 大于/小于或者不等于 (CF或者ZF)=0
CMOVAE/CMOVNB 大于或者等于/不小于 CF = 0
CMOVNC 无进位 CF = 0
CMOVB/CMOVNAE 小于/不大于 CF = 1
CMOVC 进位 CF = 1
CMOVBE/CMOVNA 小于或者等于/不大于 (CF或ZF) = 1
CMOVE/CMOVZ 等于/零 ZF = 1
CMOVNE/CMOVNZ 不等于/不为零 ZF = 0
CMOVP/CMOVPE 奇偶校验 PF = 1
CMOVNP/CMOVPO 非奇偶校验/奇偶验 PF = 0
指令对 描述 EFLAGS状态
CMOVGE/CMOVNL 大于或者等于/不小于 (SF异域OF) = 0
CMOVL/CMOVNGE 小于/不大于或者等于 (SF民域OF) = 1
CMOVLE/CMOVNG 小于或者等于/不小于 ((SF异域OF)或ZF) = 1
CMOVO 溢出 OF = 1
CMOVNO 末溢出 OF = 0
CMOVS 带符号(负) SF = 1
CMOVNS 无符号(非负) SF = 0
--------------------------------------------------------------
XCHG 在两个寄存器之间或者存在内存位置之间交换值
--------------------------------------------------------------
cmovx operand1, operand2
--------------------------------------------------------------
BSWP 反转一个32位寄存器中的字节序
--------------------------------------------------------------
常应用于大小端交换
0~7位和24~31位进行交换
8~15位和16~23位交换
bswap %ebx
--------------------------------------------------------------
XADD 交换两个值并把总和存储在目标操作数中
--------------------------------------------------------------
xadd source, destination
--------------------------------------------------------------
CMPXCHG 把一个值和一个外部值进行比较,并且交换它和另一个值
--------------------------------------------------------------
cmpxchg source, destination
--------------------------------------------------------------
CMPXCHG8G 比较两个64位值并且交换它们
--------------------------------------------------------------
cmpxchg8b destination
--------------------------------------------------------------
PUSH (X) l w b 把新的数据项目存到堆栈
--------------------------------------------------------------
pushx source
--------------------------------------------------------------
POP (X) l w b 从堆栈中取回数据
--------------------------------------------------------------
popx destination
指令对 描述
PUSHA/POPA 压入或者弹出所有16位通用寄存器
PUSHAD/POPAD 压入或者弹出所有32位通用寄存器
PUSHF/POPF 压入或者弹出EFLAGS寄存器的底16位
PUSHFD/POPFD
--------------------------------------------------------------
JMP 跳转
--------------------------------------------------------------
jmp location
--------------------------------------------------------------
CALL 调用函数
--------------------------------------------------------------
call address
--------------------------------------------------------------
RET 调用返回指令
--------------------------------------------------------------
--------------------------------------------------------------
指令 描述 EFLAGS
--------------------------------------------------------------
JA 如果大于(above),刚转跳 CF = 0 与 ZF = 0
JAE 如果大于(above)或等于,则转跳 CF = 0
JB 如果小于(below),则转跳 CF = 1
JBE 如果小于(below)或等于,则转跑 CF = 1 或 ZF = 1
JC 如果进位,则转跳 CF = 1
JCXZ 如果CX寄存器为0,则跳转
JECXZ 如果ECX寄存器为0,则跳转
JE 如果相等,则跳转 ZF = 1
JG 如果大于(greater),则跳转 ZF = 0 与 SF = OF
JGE 如果大于(greater)或等于,则跳转 SF = OF
JL 如果小于(less),则转跳 SF<>OF
JLE 如果小于(less)或者小于,则跳转 ZF = 1 或 SF <> OF
JNA 如果不大于(above),则跳转 CF = 1 或 ZF = 1
JNAE 如果不大于(above)或等于,则跳转 CF = 1
JNB 如果不小于(below),则转跳 CF = 0
JNBE 如果不小于(below)或等于,则跳转 CF = 0 与 ZF = 0
JNC 如果无进位,则转跳 CF = 0
JNE 如果不等于,则转跳 ZF = 0
JNG 如果不大于(greater),则跳转 ZF = 1 或 SF<>OF
JNGE 如果不大于(greater)或等于,则跳转 SF<>OF
JNL 如果不小于(less),则跳转 SF = OF
JNLE 如果不小于(less)或者小于,则跳转 ZF = 0 与 SF = OF
JNO 如果不溢出,则转跳 OF = 0
JNP 如果不奇偶校验,则转跳 PF = 0
JNS 如果无符号,则跳转 SF = 0
JNZ 如果非零,则跳转 ZF = 0
JO 如果溢出,则跳转 OF = 1
JP 如果奇偶校验,则转跳 PF = 1
JPE 如果偶校验,则跳出 PF = 1
JPO 如果奇偶校验,则跳转 PF = 0
JS 如果带符号,则跳转 SF = 1
JZ 如果为零,则跳转 ZF = 1
--------------------------------------------------------------
jxx address
--------------------------------------------------------------
CMP 比较指令
--------------------------------------------------------------
cmp operand1, operand2
cmp %eax, %ebx
jeg greater
--------------------------------------------------------------
指令 描述
--------------------------------------------------------------
CLC 清空进位标志(设置它为零)
CMC 对进位标志求反(把它改变为相反的值)
STC 设置进位标志(设置它为1)
--------------------------------------------------------------
--------------------------------------------------------------
INC 递增
--------------------------------------------------------------
--------------------------------------------------------------
DEC 递减
--------------------------------------------------------------
--------------------------------------------------------------
指令 描述
--------------------------------------------------------------
LOOP 循环直到ECX寄存器为零
LOOPE/LOOPZ 循环直到ECX寄存器为零,或者没有设置ZF标志
LOOPNE/LOOPNZ 循环直到ECX寄存器为零,或者设置了ZF标志
--------------------------------------------------------------
loop address
--------------------------------------------------------------
MOVZX 用把零值加载到EBX中 (无符号)
--------------------------------------------------------------
EBX:ECX
movzx source, destination
--------------------------------------------------------------
MOVSX 用把零值加载到EBX中 (带符号)
--------------------------------------------------------------
EBX:ECX
movsx source, destination
--------------------------------------------------------------
MOVQ 把数据传送到MMX寄存器中
--------------------------------------------------------------
movq source, destination
--------------------------------------------------------------
MOVDQA/MOVDQU 用于把128位数据传送到MMX寄存器中,或者是MMX寄存器传送数据
--------------------------------------------------------------
movdqa source, destination
--------------------------------------------------------------
FLD 用于把浮点传送入和公传送出FPU寄传器
--------------------------------------------------------------
fld source
通用 8个32位奇存器,用于处理数据
段 6个16位寄存器,用于处理内存访问
指令指针 单一的32位寄存器,指向要执行的下一条指令码
浮点数据 8个80位寄存器,指向要执行的下一条指令
控制 5个32位寄存器,用于确定处理器的操作模式
调试 8个32位寄存器,用于在调试处理时包含信息
通用寄存器
EAX 用于操作数和结果数据的累加器
EBX 指向数据内存段中的数据指针
ECX 字符串和循环操作的计数器
EDX I/O指针
EDI 用于字符串操作的目标的数据指针
ESI 用于字符操作的源的数据指针
ESP 堆栈指针
EBP 堆栈数据指针
段寄存器 (平坦内存模式、分段模式、实地址模式)
CS 代码段
DS 数据段
SS 堆栈段
ES 附加段指针
FS 附加段指针
GS 附加段指针
控制寄存器
CR0 控制操作模式和处理
CR1 当前没有使用
CR2 内存页面错误信息
CR3 内存页面目录信息
CR4 支持处理器特性和说明处理器特性能力的标志
标志
状态标志
标志 位 名称
CF 0 进位标志
PF 2 奇偶标志
AF 4 辅助进位标志
ZF 6 零标志
SF 7 符号标志
OF 11 溢出标志
控制标志
标志 位 名称
TF 8 陷阱标志
IF 9 中断使能标志
IOPL 12和13 I/O特权级别标志
NT 14 嵌套任务标志
RF 16 恢复标志
VM 17 虚拟8086模式标志
VIF 19 虚拟中断标志
VIP 20 虚拟中断挂起标志
ID 21 识别标志
GNU TOOLS
rpm -qa | grep binutils
dpkg -1 | grep binutil
binutil包含
as 汇编器
ld 连接器
gcc 编译器
gdb 调试器程序
kdbg KDE调试器
objdump 反汇编工具
gprof 简档程序
strace 程序跟踪工具
段
数据段
.ascii 文本字符串
.asciz 以空字符结尾的文本字符串
.byte 字节值
.double 双精度浮点数
.float 单精度浮点数
.int 32位整数
.long 32位整数(和.int相同)
.octa 16字节整数
.quad 8字节整数
.short 16位整数
.single 单精度浮点数
bss段
.comm 声明末初始化的数据的通用内存区域
.lcomm 声明末初始化的数据的本地通用内存区域
汇编指令集
(X)表于尾部可以更换
l 32位
w 16位
b 8位
----------------------------------------------------------------
nop 空指令
----------------------------------------------------------------
----------------------------------------------------------------
CPUID 收集程序正在基其上运行的处理器信息
----------------------------------------------------------------
EXA CPUID输出
----------------------------------------------------------------
0 厂商ID(Vendor ID)字符和技术的最大CPUID选项值
1 处理器类型、系列、型号和分步信息
2 处理器缓存配置
3 处理器序列号
4 缓存配置(线程数、核心数量和物理属性)
5 监视信息
80000000h 扩展的厂商ID字符器和支持的级别
80000001h 扩展的处理器类型、系列、型号和分步信息
80000002h~80000004h 扩展的处理器名称字符串
--------------------------------------------------------------
--------------------------------------------------------------
ADDL 清空堆栈参数
--------------------------------------------------------------
addl source, destination
--------------------------------------------------------------
MOV (X)l w b 传送数据
--------------------------------------------------------------
movx source, destination
--------------------------------------------------------------
CMOV (X)l w b 条件传送数据
--------------------------------------------------------------
cmovx source, destination
EFLAGS位 名称 描述
CF 进位(Carry)标志 数学表达式产生进位或者错位
OF 溢出(Overflow)标志 整数值过大或者过小
PF 奇偶校验(Parity)标志 寄存器包含数学操作造成的错误数据
SF 符号(Sign)标志 指出结果为正还是负
ZF 零(Zero)标志 数学操作的结果为零
指令对 描述 EFLAGS状态
CMOVA/CMOVNBE 大于/小于或者不等于 (CF或者ZF)=0
CMOVAE/CMOVNB 大于或者等于/不小于 CF = 0
CMOVNC 无进位 CF = 0
CMOVB/CMOVNAE 小于/不大于 CF = 1
CMOVC 进位 CF = 1
CMOVBE/CMOVNA 小于或者等于/不大于 (CF或ZF) = 1
CMOVE/CMOVZ 等于/零 ZF = 1
CMOVNE/CMOVNZ 不等于/不为零 ZF = 0
CMOVP/CMOVPE 奇偶校验 PF = 1
CMOVNP/CMOVPO 非奇偶校验/奇偶验 PF = 0
指令对 描述 EFLAGS状态
CMOVGE/CMOVNL 大于或者等于/不小于 (SF异域OF) = 0
CMOVL/CMOVNGE 小于/不大于或者等于 (SF民域OF) = 1
CMOVLE/CMOVNG 小于或者等于/不小于 ((SF异域OF)或ZF) = 1
CMOVO 溢出 OF = 1
CMOVNO 末溢出 OF = 0
CMOVS 带符号(负) SF = 1
CMOVNS 无符号(非负) SF = 0
--------------------------------------------------------------
XCHG 在两个寄存器之间或者存在内存位置之间交换值
--------------------------------------------------------------
cmovx operand1, operand2
--------------------------------------------------------------
BSWP 反转一个32位寄存器中的字节序
--------------------------------------------------------------
常应用于大小端交换
0~7位和24~31位进行交换
8~15位和16~23位交换
bswap %ebx
--------------------------------------------------------------
XADD 交换两个值并把总和存储在目标操作数中
--------------------------------------------------------------
xadd source, destination
--------------------------------------------------------------
CMPXCHG 把一个值和一个外部值进行比较,并且交换它和另一个值
--------------------------------------------------------------
cmpxchg source, destination
--------------------------------------------------------------
CMPXCHG8G 比较两个64位值并且交换它们
--------------------------------------------------------------
cmpxchg8b destination
--------------------------------------------------------------
PUSH (X) l w b 把新的数据项目存到堆栈
--------------------------------------------------------------
pushx source
--------------------------------------------------------------
POP (X) l w b 从堆栈中取回数据
--------------------------------------------------------------
popx destination
指令对 描述
PUSHA/POPA 压入或者弹出所有16位通用寄存器
PUSHAD/POPAD 压入或者弹出所有32位通用寄存器
PUSHF/POPF 压入或者弹出EFLAGS寄存器的底16位
PUSHFD/POPFD
--------------------------------------------------------------
JMP 跳转
--------------------------------------------------------------
jmp location
--------------------------------------------------------------
CALL 调用函数
--------------------------------------------------------------
call address
--------------------------------------------------------------
RET 调用返回指令
--------------------------------------------------------------
--------------------------------------------------------------
指令 描述 EFLAGS
--------------------------------------------------------------
JA 如果大于(above),刚转跳 CF = 0 与 ZF = 0
JAE 如果大于(above)或等于,则转跳 CF = 0
JB 如果小于(below),则转跳 CF = 1
JBE 如果小于(below)或等于,则转跑 CF = 1 或 ZF = 1
JC 如果进位,则转跳 CF = 1
JCXZ 如果CX寄存器为0,则跳转
JECXZ 如果ECX寄存器为0,则跳转
JE 如果相等,则跳转 ZF = 1
JG 如果大于(greater),则跳转 ZF = 0 与 SF = OF
JGE 如果大于(greater)或等于,则跳转 SF = OF
JL 如果小于(less),则转跳 SF<>OF
JLE 如果小于(less)或者小于,则跳转 ZF = 1 或 SF <> OF
JNA 如果不大于(above),则跳转 CF = 1 或 ZF = 1
JNAE 如果不大于(above)或等于,则跳转 CF = 1
JNB 如果不小于(below),则转跳 CF = 0
JNBE 如果不小于(below)或等于,则跳转 CF = 0 与 ZF = 0
JNC 如果无进位,则转跳 CF = 0
JNE 如果不等于,则转跳 ZF = 0
JNG 如果不大于(greater),则跳转 ZF = 1 或 SF<>OF
JNGE 如果不大于(greater)或等于,则跳转 SF<>OF
JNL 如果不小于(less),则跳转 SF = OF
JNLE 如果不小于(less)或者小于,则跳转 ZF = 0 与 SF = OF
JNO 如果不溢出,则转跳 OF = 0
JNP 如果不奇偶校验,则转跳 PF = 0
JNS 如果无符号,则跳转 SF = 0
JNZ 如果非零,则跳转 ZF = 0
JO 如果溢出,则跳转 OF = 1
JP 如果奇偶校验,则转跳 PF = 1
JPE 如果偶校验,则跳出 PF = 1
JPO 如果奇偶校验,则跳转 PF = 0
JS 如果带符号,则跳转 SF = 1
JZ 如果为零,则跳转 ZF = 1
--------------------------------------------------------------
jxx address
--------------------------------------------------------------
CMP 比较指令
--------------------------------------------------------------
cmp operand1, operand2
cmp %eax, %ebx
jeg greater
--------------------------------------------------------------
指令 描述
--------------------------------------------------------------
CLC 清空进位标志(设置它为零)
CMC 对进位标志求反(把它改变为相反的值)
STC 设置进位标志(设置它为1)
--------------------------------------------------------------
--------------------------------------------------------------
INC 递增
--------------------------------------------------------------
--------------------------------------------------------------
DEC 递减
--------------------------------------------------------------
--------------------------------------------------------------
指令 描述
--------------------------------------------------------------
LOOP 循环直到ECX寄存器为零
LOOPE/LOOPZ 循环直到ECX寄存器为零,或者没有设置ZF标志
LOOPNE/LOOPNZ 循环直到ECX寄存器为零,或者设置了ZF标志
--------------------------------------------------------------
loop address
--------------------------------------------------------------
MOVZX 用把零值加载到EBX中 (无符号)
--------------------------------------------------------------
EBX:ECX
movzx source, destination
--------------------------------------------------------------
MOVSX 用把零值加载到EBX中 (带符号)
--------------------------------------------------------------
EBX:ECX
movsx source, destination
--------------------------------------------------------------
MOVQ 把数据传送到MMX寄存器中
--------------------------------------------------------------
movq source, destination
--------------------------------------------------------------
MOVDQA/MOVDQU 用于把128位数据传送到MMX寄存器中,或者是MMX寄存器传送数据
--------------------------------------------------------------
movdqa source, destination
--------------------------------------------------------------
FLD 用于把浮点传送入和公传送出FPU寄传器
--------------------------------------------------------------
fld source