标签:
上一波代码:http://www.cnblogs.com/20145207lza/p/5954525.html
这周脱坑!!!!!
控制
(1)状态寄存器(条件码寄存器)
- sub d,s 是d-s,结果送回d中,即送回目的操作数中。
- cmp d,s 也是d-s,但结果不送回目的操作数中,是利用减法进行两个数值的比较。
(2)访问条件码
(3)跳转指令
例:
jmp *%eax 用寄存器%eax中的值作为跳转目标。
jmp *(%eax) 以%eax中的值作为读地址,从存储器中读出跳转目标。
(4)翻译条件分支
if(test-expr)
then-statement
else
else-statement
(注:test-expr 整数表达式[假/真])
t = test-expr;
if (!t)
goto false;
then-statement
goto done;
false:
else-statement
done:
(5)循环
do
body-statement
while(test-expr);
loop:
body-statement
t = test-expr;
if(t)
goto loop;
while (test-expr)
body-statement
if(!test-expr)
goto done;
do
body-statement
while(test-expr);
done:
t = test-expr;
if(!t)
goto done:
loop:
body-statement
t = test-expr;
if(t)
goto loop;
done:
for(init-expr;test-expr;update-expr)
body-statement
init-expr;
while(test-expr)
{
body-statement
update-expr;
}
init-expr;
if(!test-expr)
goto done;
do{
body-statement
update-expr;
}while(test-expr);
done;
init-expr
t = test-expr;
if(!t)
goto done:
loop:
body-statement
t = test-expr;
if(t)
goto loop
done:
(6)条件传送指令
(7)switch语句
过程
(1)概述
(2)栈帧结构
栈帧: 为单个过程分配的那部分栈
- 寄存器%ebp为帧指针
- 寄存器%esp为栈指针
- 栈指针值适当减小可以分配没有指定初始值的数据的空间
- 类似的,可以通过增加栈指针来释放空间
(3)转移控制
movl %ebp,%esp
popl %ebp
(4)寄存器使用惯例
- %eax,%edx,%ecx 划分为调用者保存寄存器
- %ebx,%esi,%edi 划分为被调用者保存寄存器
- %ebp,%esp 保持寄存器
- %eax 保存函数返回值
(5)递归过程
GDB调试器
#作业
pushl %ebp
movl %esp,%ebp
subl $4,%esp
movl $8,(%esp)
movl %eax,(%esp)
add $3,%eax
popl %ebp
addl $1,%eax
代码托管:https://git.oschina.net/24ktyrant/codes
标签:
原文地址:http://www.cnblogs.com/20145207lza/p/5967017.html