控制语句(if-else+循环+switch)汇编规则
【1】说说条件码
最常用的的条件码有:
- CF:进位标志 (无符号溢出)
- ZF:零标志
- SF:符号标志(结果为负数)
- OF:溢出标志 (补码溢出, 有符号溢出)
【2】有两类指令设置条件码而不改变任何其他寄存器
cmp(cmpb, cmpw, cmpl) + test(testb, testw, testl)
You should know
- if-else + 循环(while + for + do-while ) + switch , 都是以跳转指令为基础的。
- switch 的重点在于使用了 称为 “跳转表”的一个数据结构。
条件传送指令,如cmovl (contidional mov less )
【3】跳转指令及其编码(jmp 及其 jmp编码)
804828f : 74 05 ;je XXXXXX=0x05+0x8048291=0x8048296
(也即jmp编码后的代码存储的是相对于它下一条指令的偏移地址)-(干货)
8048291 : e8 1e 00 00 00 call 80482b4
【4】(if-else+循环+switch)汇编规则
4.1)翻译条件分支if-else(基于条件传送指令的if-else汇编代码)
从上图中的汇编代码,我们可以看到,if-else的汇编规则(干货)
- 1)先将变量暂存在registers中;
- 2)汇编计算 if-else 里面的表达式;
- 3)汇编比较 if-else的条件表达式;
- 4)then ……
4.2)循环( do-while + while + for )
4.2.1)do-while 汇编规则
由上图,我们知道 do-while 循环的汇编规则(干货)
- 1)暂存变量到registers,并初始化;
- 2)汇编执行循环主体
- 3)汇编计算while中的条件表达式的值(true or false);
4.2.2)while 汇编规则
由上图,我们知道while循环的汇编规则(干货)
- 1)暂存变量到registers, 并初始化;
- 2)汇编计算条件表达式的值(true or false);
- 3)汇编执行循环体;
- 4)再次汇编计算条件表达式的值(true or false);
4.2.3)for 汇编规则
由上图,我们知道for循环的汇编规则如下(干货)
- 1)暂存变量到registers, 并初始化;
- 2)汇编计算条件表达式的值(true or false);
- 3)汇编执行循环体;
- 4)汇编自增计数值i;
- 5)再次汇编计算条件表达式的值(true or false);
4.3) switch 汇编规则
从上图中的汇编代码,我们可以看到,switch的汇编规则(干货)
- 0)仔细看上图的.L7代码的排序,很有韵味;
- 1)用registers来存储变量;
- 2)判断n的case索引值偏移量(是否小于等于6):否》跳转到默认case;是》跳入case的偏移量地址;6是.L7表中表项的最大偏移值,7个表项(100, 101, 102, 103, 104, 105, 106),最大偏移值为6(基地址base=100);
(Attention): switch的(干货)就是它使用了一个叫做跳转表的东西, 而.L7 就是跳转表;
【5】条件传送指令
如条件传送指令 cmovl == contional mov l(后缀)
总的来说,条件数据传送指令提供了一种用条件控制转移来实现条件操作的替代策略。
版权声明:本文为博主原创文章,未经博主允许不得转载。
控制语句(if-else+循环+switch)汇编规则的更多相关文章
- 简易计算器实现:while循环+switch语句
个人练习: 写一个计算器,要求实现加减乘除功能,并且能循环接收新的数据,通过用户交互实现(即Scanner对象) 用到了 while循环 switch语句,实现了数据的循环输入并计算!!!!妙啊!!! ...
- Java控制语句——分支、循环、跳转
分支语句(if语句,switch语句): 循环语句(for,while,do...while); 跳转语句(break,continue,return): 分支语句(if语句,switch语句) if ...
- Python基础2:流程控制语句 while / for循环
[ while 循环 ] 如果要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+ ...
- 控制语句 for while if switch
一.for…in 结构 for i in 0...4{ print(i) //使用到了变量 i } for _ in 0...1{ // 后期没有使用到变量,可以直接用个下划线 _ 占位就行 ...
- 1-23-shell脚本之-if流程控制语句和for循环语句的使用
大纲: 1.逻辑判断 2.if流程控制语句 3.for循环控制语句 ---------------------------------------------- 在开始之前,先了解一下逻辑判断符号 ...
- Go-函数高级使用-条件分支-包管理-for循环-switch语句-数组及切片-与或非逻辑符
目录 科普 python 注释 # 函数高级 if else if else 包管理 下载第三方包 比较热门的框架 for 循环 for 循环的几种写法 switch 语句 数组及数组切片 数组迭代 ...
- linux条件测试操作(test)和if判断语句,while循环语句,break控制语句和for循环和case多分枝语句和select语句
条件测试操作 条件测试是专为影响"$?"的操作,是条件转移.循环语句的基础 test测试命令: test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0, ...
- oracle的控制语句if和循环语句loop while for
pl/sql的控制结构if-then if-then-else if-then-elsif-else 案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10% ...
- for循环的表达规则,for循环的嵌套,跳转语句;穷举;迭代;异常处理
for循环的基本格式 for(表达式1:表达式2:表达式3) { 循环体: } for循环的四要素 表达式1就是变量初始化:表达式2就是循环条件:表达式3是状态改变 static void Main( ...
随机推荐
- ecshop二次开发
模板开发首页参考资料: http://book.ecmoban.com/ http://pan.baidu.com/s/1bnezFUv 自行修改ecshop读写分离设置,请查看另一篇文章,ecsho ...
- SecureCRT上传、下载文件(使用sz与rz命令)
1.简述 借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器. 2.理解记忆 其中,对于sz和rz的理解与记忆我用了如下的方法 ...
- libevent库的使用方法
接写一个很简单的 Time Server 来当作例子:当你连上去以后 Server 端直接提供时间,然后结束连线.event_init() 表示初始化 libevent 所使用到的变数.event_s ...
- fastreport for .net 数据邦定
C# Code: private void button4_Click(object sender, EventArgs e){ //打印主从表数据 string file = Applic ...
- 【ps】gif动态图白边问题
(从死了一次又一次终于挂掉的百度空间中抢救出来的,发表日期 2014-08-13) 在制作gif动态图的时候发现有白边问题 网上说可以设成索引,但是这样一整连动画帧都一块丢掉了. 最终解决办法: 将要 ...
- chrome浏览器下用jQuery的load函数来跨域加载页面,响应状态status为(canceled)是什么情况? JSON和JSONP,也许你会豁然开朗,含jQuery用例
http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 问题来源:http://q.cnblogs.com ...
- MFC中修改静态文本框中文字的字体、颜色
假设有一个静态文本框控件,其ID为:IDC_STATIC_XSDJ,且关联一个control类的CStatic类型的变量m_static_xsdj. 设置字体时自然要用到CFont类,下面介绍两种方法 ...
- 推荐大家使用的CSS书写规范及顺序
@设计达人网 写了这么久的CSS,但大部分前端er都没有按照良好的CSS书写规范来写CSS代码,这样会影响代码的阅读体验,这里我总结一个CSS书写规范.CSS书写顺序供大家参考,这些是参考了国外一些文 ...
- Linux Kconfig及Makefile学习
内核源码树的目录下都有两个文档Kconfig (2.4版本是Config.in)和Makefile.分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源 ...
- 测试HAPROXY的文件分流办法
测试HAPROXY的文件分流办法 http://blog.chinaunix.net/uid-20553497-id-3054980.html http://blog.sina.com.cn/s/bl ...