6.7生成可执行文件210821

本文详细介绍了如何编译和运行一个MIPS程序,从内存结构到MIPS内存映射,再到编译、汇编、链接和加载四个步骤。在内存中,程序包含指令和数据,分为代码段、全局数据段、动态数据段和保留段。MIPS的全局数据段通过全局指针$gp访问,动态数据段包含堆和栈。编译过程将高级语言转换为汇编语言,再由汇编器生成机器代码。链接器合并多个目标文件并重新定位地址,最后操作系统加载可执行文件到内存并执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎样编译&运行一个程序

在这里插入图片描述

内存里面存储的内容

  • 指令(也称为text)
  • 数据
    • 全局/静态: 在程序运行之前分配
    • 动态: 在程序运行期间分配
  • 内存大小
    • MIPS地址宽度位32位,可寻址的空间最多为232= 4G字节,因此内存最大为4G
    • 字节地址从0x00000000 到0xFFFFFFFF
    • 字地址从0x00000000 到0xFFFFFFFC
  • 内存空间分4部分
    • 代码段、全局数据段、动态数据段、保留段

MIPS内存映射

  • 代码段存储机器语言程序,可储存256M字节代码
  • 全局数据段存储全局变量,可被任意函数使用,可储存64K数据,使用全局指针$gp访问,初始化为0x10008000,这个指针在程序执行时保持不变,任何全局变量都可通过gp加减正负16位的偏移量来访问,偏移量在汇编时确定下来,所以gp这个初始值定义在全局数据段的中间,这样使用带常数偏移量的基址寻址模式就可以访问整个全局变量空间
  • 动态数据段保存在堆和栈中,大概有2G字节空间,堆中数据可以按任意顺序使用和丢弃,在c中使用malloc语句,c++和java中使用new语句分配的内存都属于堆,栈主要用于过程调用,存储一些寄存器等等,以后进先出顺序访问,为了防止堆和栈增长到对方空间造成数据的破坏,堆从动态数据段的下方向上增长,栈从动态数据段的上方向下增长
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值