逻辑表达式汇编解析

来源:互联网 发布:sql学生信息管理系统 编辑:程序博客网 时间:2024/05/20 13:19

1:or || 表达式

 如果第一个符合条件则直接执行不在验证后面的条件

int main(){ int a;a=20;int b=30;if(a<20 || b>30){b=90;}}//************************//.file"b01.cpp".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6movl$20, -4(%rbp)   //a=20movl$30, -8(%rbp)   //b=30cmpl$19, -4(%rbp)   //a-19jle.L2             //a<=19 jmp .L2 cmpl$30, -8(%rbp)   //b-30jle.L3             //b<=30 jmp .L3 otherwhile jmp .L2 .L2:movl$90, -8(%rbp)  //next exe .L3.L3:movl$0, %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)".section.note.GNU-stack,"",@progbits


2:&&表达式

有一个条件不符立即跳出,不在检查下一个条件
int main(){ int a;a=20;int b=30;if(a<20 && b>30){b=90;}}//************************.file"b01.cpp".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6movl$20, -4(%rbp)  //a=20movl$30, -8(%rbp)   //b=30cmpl$19, -4(%rbp)   //a-19 jg.L2            //a>19 jmp .L2cmpl$30, -8(%rbp)  //b-30jle.L2            //b<=30  jmp .L2movl$90, -8(%rbp).L2:movl$0, %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)".section.note.GNU-stack,"",@progbits
3 not !运算符
 前面只要有一个为FALSE则直接执行,不检查后面的条件
int main(){ int a;a=20;int b=30;if(!(a<20 && b>30)){b=90;}}//*************************.file"b01.cpp".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6movl$20, -4(%rbp)  //a=20movl$30, -8(%rbp)  //b=30cmpl$19, -4(%rbp)  //a-30jg.L2            //a>19 jmp .L2cmpl$30, -8(%rbp)  //b-30jg.L3            //b-30>0 jmp .L3.L2:movl$90, -8(%rbp).L3:movl$0, %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)".section.note.GNU-stack,"",@progbits

4:?:三元表达式

int main(){ int a;a=20;int b=30;int c=a>b?a:b;}//**************************//.file"b01.cpp".text.globlmain.typemain, @functionmain:.LFB0:.cfi_startprocpushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq%rsp, %rbp.cfi_def_cfa_register 6movl$20, -4(%rbp)  //a=20movl$30, -8(%rbp)  //b=30movl-4(%rbp), %eax  //eax=20cmpl-8(%rbp), %eax  //a-bjle.L2             //a<=b jmp .L2movl-4(%rbp), %eax  //eax=20jmp.L3.L2:movl-8(%rbp), %eax  //eax=30.L3:movl%eax, -12(%rbp)//b=eaxmovl$0, %eaxpopq%rbp.cfi_def_cfa 7, 8ret.cfi_endproc.LFE0:.sizemain, .-main.ident"GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-11)".section.note.GNU-stack,"",@progbits




原创粉丝点击