汇编基础
(本文更新ing...)
0. 一些命令
汇编命令 | 等价伪代码 |
---|---|
mov eax, ecx | eax=ecx |
add eax, ecx | eax+=ecx |
sub eax, ecx | eax-=ecx |
inc eax | eax++ |
dec eax | eax-- |
lea eax, [ecx+4] | eax=ecx+4 |
leave | mov esp ebp,pop ebp |
retn | eip=esp,esp=esp+4 |
retn N | eip=esp,esp=esp+4+N |
1. jxx家族
测试标志位的jxx:
指令 | 描述 | 条件 | 别名 | 相反指令 |
---|---|---|---|---|
jc | 如果进位位被置位则跳转 | 进位标志=1 | jb,jnae | jnc |
jnc | 如果进位位没有置位则跳转 | 进位标志=0 | jnb,jae | jc |
jz | 如果0标志被置位则跳转 | 0标志=1 | je | jnz |
jnz | 如果0标志没有置位则跳转 | 0标志=0 | jne | jz |
js | 如果符号位被置位则跳转 | 符号标志=1 | jns | |
jns | 如果符号位没有被置位则跳转 | 符号标志=0 | js | |
jo | 如果溢出标志置位则跳转 | 溢出标志=1 | jno | |
jno | 如果溢出标志没有置位则跳转 | 溢出标志=0 | jo | |
jp | 如果奇偶校验位被置位则跳转 | 奇偶校验标志=1 | jpe | jnp |
jpe | 如果奇偶校验位为偶校验则跳转 | 奇偶校验标志=1 | jp | jpo |
jnp | 如果奇偶校验位没有被置位则跳转 | 奇偶校验标志=0 | jpo | jp |
jpo | 如果奇偶校验位为奇校验则跳转 | 奇偶校验标志=0 | jnp | jpe |
使用无符号数比较的jxx:
指令 | 描述 | 条件 | 别名 | 相反指令 |
---|---|---|---|---|
ja | 如果超过(>)则跳转 | 进位标志=0,0标志=0 | jnbe | jna |
jnbe | 如果不低于或等于(不 <=)则跳转 | 进位标志=0,0标志=0 | ja | jbe |
jae | 如果超过或等于(>=)则跳转 | 进位标志=0 | jnc,jnb | jnae |
jnb | 如果不低于则跳转(不 <) | 进位标志=0 | jnc,jae | jb |
jb | 如果低于(<)则跳转 | 进位标志=1 | jc,jnae | jnb |
jnae | 如果不超过或等于(不>=)则跳转 | 进位标志=1 | jc,jb | jae |
jbe | 如果低于或等于(<=)则跳转 | 进位标志=1或0标志=1 | jna | jnbe |
jna | 如果不超过(不>)则跳转 | 进位标志=1或0标志=1 | jbe | ja |
je | 如果相等(=)则跳转 | 0标志=1 | jz | jne |
jne | 如果不相等(<>)则跳转 | 0标志=0 | jnz | je |
使用有符号数比较的jxx:
指令 | 描述 | 条件 | 别名 | 相反指令 |
---|---|---|---|---|
jg | 如果大于(>)则跳转 | 符号标志=溢出标志或0标志=0 | jnle | jng |
jnle | 如果小于或等于(<=)则跳转 | 符号标志=溢出标志或0标志=0 | jg | jle |
jge | 如果大于或等于(>=)则跳转 | 符号标志=溢出标志 | jnl | jge |
jnl | 如果不小于(不<)则跳转 | 符号标志=溢出标志 | jge | jl |
jl | 如果小于(<)则跳转 | 符号标志<>溢出标志 | jnge | jnl |
jnge | 如果大于或等于(>=)跳转 | 符号标志<>溢出标志 | jl | jge |
jle | 如果小于或等于(<=)跳转 | 符号标志<>溢出标志或0标志=1 | jng | jnle |
jng | 如果不大于(不>)则跳转 | 符号标志<>溢出标志或0标志=1 | jle | jg |
je | 如果等于(=)则跳转 | 0标志=1 | jz | jne |
jne | 如果不等于(<>)则跳转 | 0标志=0 | jnz | je |
2. 流程控制命令
汇编伪代码 | 等价伪代码 |
---|---|
cmp a,b jle end ① end: |
if(a>b) |
cmp a,b jge end ① end: |
if(a<b) |
cmp a,b jne end ① end: |
if(a==b) |
if(a==1){①}else | |
switch(a){ case 'c':①;break; case 'x':②;break; default:③; } |
|
注意这里对 a-- 做了简化处理,实际的汇 编过程中会为 a-- 申请一个临时变量 |
do{①}while{a--}; |
while(a--) | |
for(i=0;i<100;i++) |
Those who seek some sort of a higher purpose or 'universal goal', who don't know what to live for, who moan that they must 'find themselves'. You hear it all around us. That seems to be theofficial bromide of our century. Every book you open. Every drooling self-confession. It seems to be the noble thing to confess. I'd think it would be the most shameful one.