汇编基础

(本文更新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.
原文地址:https://www.cnblogs.com/spenghui/p/7531175.html