汇编资料(一) (转)

作者在 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
汇编 | 阅读 1052 次
文章评论,共1条
aqaq110
2011-02-10 12:20
1
<img src="image/face/1.gif" class="face">
游客请输入验证码