20189229 张子松 第二周作业

本文详细解析了一个简单程序从源代码到汇编代码的转换过程,通过实例介绍了如何使用GCC编译器生成32位汇编代码,并深入分析了汇编指令的执行流程,包括函数调用、参数传递及返回值处理等关键步骤。

计算机是如何工作的_试验一

汇编一个简单的程序

初始程序如下:

int g(int x)
{
  return x + 3;
}

int f(int x)
{
  return g(x);
}

int main(void)
{
  return f(8) + 1;
}

之后,在终端中输入命令:gcc -S -o main.s main.c -m32
-S目的为输出汇编文件,-o后跟输出目标文件名称,-m32用来产生32位汇编代码。
打开main.s后为汇编代码,如图:
1508007-20181021001637663-1715049255.png

汇编文件中有一些“.”打头的字符串是编译器在链接阶段需要的辅助信息或在预编译阶段将头文件展开的信息,可通过命令:g/.s*/d将其删掉再进行汇编代码分析,删除后如图:
1508007-20181021001914361-603294902.png

分析汇编指令执行过程

如上图,简化后的汇编指令很容易看出只剩g,f,main三个函数,下面对每行汇编指令做简要分析:

g:
        pushl   %ebp //将ebp的值压栈,指向4的位置
        movl    %esp, %ebp //ebp也指向esp的位置
        movl    8(%ebp), %eax //变址寻址ebp 加8,赋值给eax
        addl    $3, %eax //将立即数3加到eax中,变为11
        popl    %ebp //将现在ebp的值出栈,指向4的位置,esp指向6
        ret //pop %eip eip指向5的位置
f:
        pushl   %ebp //将ebp的值压栈,esp向下移动一个存储单位
        movl    %esp, %ebp //把esp的值赋给ebp(标号)
        subl    $4, %esp //esp减4,指向5的位置
        movl    8(%ebp), %eax //ebp变址寻址8,赋给eax,eax等于8
        movl    %eax, (%esp) //将eax放到esp的位置
        call    g //pushl eip;movl g %eip   此时eip指向g
        leave   //movl %ebp %esp;popl %ebp
        ret  //pop %eip
main:
        pushl   %ebp //把EBP寄存器的值压栈,先把ESP寄存器指向下一栈空间
        movl    %esp, %ebp //将EBP寄存器变为ESP寄存器的值,指向标号1的位置
        subl    $4, %esp //将ESP向下移动一个栈空间
        movl    $8, (%esp) //将立即数8放入ESP指向的当前位置,标号2
        call    f //pushl eip;movl f %eip   此时eip指向f
        addl    $1, %eax //将立即数1加到eax中
        leave //movl %ebp %esp;popl %ebp
        ret  //pop %eip

如下图:
1508007-20181021010731242-812883454.png

1508007-20181021010743292-1004965280.png

转载于:https://www.cnblogs.com/zisong/p/9823659.html

摘 要 在当今数字化浪潮下,传统农业向智慧农业转型成为必然趋势。为解决农业信息流通不畅、服务效率低下等问题,本研究致力于开发一款基于 Spring Boot 的农业服务小程序。 此小程序针对普通用户、商家用户、专家用户和管理员四类角色,设计了丰富且实用的功能。普通用户可轻完成注册登录,在首页浏览农业资讯,使用购物车选购农产品,还能享受咨询服务、预约专家指导等。商家用户能够管理商城,包括商品分类、订单处理与配送、售后管理等。专家用户在后台处理咨询与预约服务,为农业生产提供专业建议。管理员则全面掌控系统,涵盖用户管理、服务管理、公告发布等工作。 开发过程中,采用 Spring Boot 框架搭建系统,其便捷的开发特性提高了开发效率;选用 MySQL 数据库存储数据,保障数据的稳定与安全;运用 Java 语言实现业务逻辑,确保系统的可扩展性。经过严格的可行性分析、系统设计、功能实现与测试,验证了系统在技术、经济、操作和社会层面的可行性。 该农业服务小程序的成功开发,有效提升了农业服务的质量与效率,促进了农产品的流通,为农业从业者提供了专业支持,有力推动了农业的信息化与现代化发展。不过,系统仍存在功能拓展、性能优化等方面的改进空间,未来将持续完善,以更好地服务农业领域。 关键词:Spring Boot;农业服务小程序;智慧农业;系统开发;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值