MIPS结构体传参

本文讲解了C语言运行在MIPS体系中结构体传参的情况

硬件平台:Loongson 3A3000

系统:uos

在《see MIPS run》中11.2.5中描述到,会将结构体成员压缩到各个arg寄存器中进行传递
“we have to pack the register with data to mimic the arrangement of data in memory.”

  1. C语言代码:
    构造一个函数,参数为结构体,在main函数中调用函数,并传入结构体
	#include <stdio.h>
#include <stdint.h>struct shape{uint32_t a;uint16_t b
};void test(struct shape sp){uint32_t c = sp.a + sp.b;printf("%d \n", c); 
}void main()
{struct shape sp; sp.a = 12; sp.b = 32; test(sp);
}
  1. 汇编代码

0000000000000b00 <test>:b00:   67bdffc0    daddiu  sp,sp,-64b04:   ffbf0038    sd  ra,56(sp)b08:   ffbe0030    sd  s8,48(sp)b0c:   ffbc0028    sd  gp,40(sp)b10:   03a0f025    move    s8,spb14:   3c1c0002    lui gp,0x2b18:   0399e02d    daddu   gp,gp,t9b1c:   679c8320    daddiu  gp,gp,-31968b20:   ffc40010    sd  a0,16(s8)b24:   8fc30010    lw  v1,16(s8)b28:   97c20014    lhu v0,20(s8)b2c:   00621021    addu    v0,v1,v00000000000000b74 <main>:b74:   67bdffd0    daddiu  sp,sp,-48b78:   ffbf0028    sd  ra,40(sp)b7c:   ffbe0020    sd  s8,32(sp)b80:   ffbc0018    sd  gp,24(sp)b84:   03a0f025    move    s8,spb88:   3c1c0002    lui gp,0x2b8c:   0399e02d    daddu   gp,gp,t9b90:   679c82ac    daddiu  gp,gp,-32084b94:   2402000c    li  v0,12		//加载立即数到V0b98:   afc20000    sw  v0,0(s8)		//保存到栈中b9c:   24020020    li  v0,32		//加载立即数到V0ba0:   a7c20004    sh  v0,4(s8)	//保存到栈中ba4:   dfc40000    ld  a0,0(s8)ba8:   df828058    ld  v0,-32680(gp)bac:   0040c825    move    t9,v0bb0:   0411ffd3    bal b00 <test>
  • 在ba0代码执行完毕后栈内数据情况如下
    在这里插入图片描述
  • ba4 ld a0,0(s8); 把栈中8个字节加载到了a0寄存器,即图中0~8中的数据,即结构体中的a、b
  • b20 sd a0,16(s8); 把a0,放到栈中16offset
  • b24 lw v1,16(s8); 从栈中16offset读取前4个字节
  • b28 lhu v0,20(s8);从栈中20offset读取剩下两个字节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能家居 (8) ——智能家居项目整合(网络控制线程、语音控制线程,火灾报警线程)

目录mainPro.c&#xff08;主函数&#xff09;指令工厂inputCommand.hvoiceControl.c&#xff08;语音控制&#xff09;socketControl.c&#xff08;网络线程&#xff09;控制工厂contrlEquipments.hbathroomLight.c&#xff08;浴室灯&#xff09;secondfloorLight.c&#xff…

mpu 配置内存空间_ARM存储器之:存储保护单元MPU

本文引用地址&#xff1a;http://www.eepw.com.cn/article/257010.htm15.4.2内存访问顺序当ARM处理器产生一个内存访问信号时&#xff0c;内存保护单位MPU将负责检查要访问的地址是否在被定义的域中。①如果地址不在任何域中&#xff0c;存储器产生异常。如果内核预取指令则MPU…

对象创建过程之二(类加载器)

2019独角兽企业重金招聘Python工程师标准>>> JAVA为我们提供了两种动态加载机制。 第一种是隐式机制。其实new一个对象和调用类的静态方法时&#xff0c;就是隐式机制在工作。 第二种是显示机制。显示的机制又有两种策略 第一种是用public static Class<?> …

Python_堆栈和队列

堆栈和队列 (1)堆栈&#xff0c;新放进去的先取出 #encodingutf-8 >>> stack [3, 4, 5] >>> stack.append(6) >>> stack.append(7) >>> print (stack) [3, 4, 5, 6, 7] >>> print (stack.pop()) 7 >>> print (stack) […

智能家居 (10) ——人脸识别祥云平台编程使用(编译libcurl库支持SSL,安装SSL依赖库libssl、libcrypto)

目录说明人工智能OCR识别平台介绍人脸识别接口购买编程打通OCR后台实现人脸识别&#xff08;ubuntu上实现&#xff09;问题发现编译libcurl库支持SSL安装SSL依赖库openSSL(使用工具wget)curl库重新配置&#xff0c;编译&#xff0c;安装开启SSL后重新编译人脸识别.C文件传入图片…

解决Centos 7 VNC黑屏

在配置Centos 7下VNC时发现root用户可以正常登陆VNC桌面&#xff0c;而普通用户VNC桌面黑屏&#xff0c;分析~/.vnc/xstarup 后发现是普通用户没有执行/etc/X11/xinit/xinitrc的权限 #!/bin/shunset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS /etc/X11/xinit/xinitrc #…

MFC控件(7):Split Button

VS2008中可以看到MFC有一个叫Split Button的控件,要想看它的效果,瞧下QQ那聊天窗口的"发送", "消息记录"这两个按钮就知道了.实际上就是还有点像Combo Box了.不过它的实现应该是button加menu.所以它的消息处理可以分开成button的处理和menu的处理 往dialog…

srs 服务关闭命令_【经验总结】如何做到网络版工作站与服务器时间同步?

随着行业发展&#xff0c;越来越多的实验室色谱数据工作站由原来的单机版&#xff0c;升级为网络版。升级后带来的益不必多说&#xff0c;那么升级带来的困难你遇到过吗&#xff1f;快来跟小析姐一起看看牛人是如何解决问题的吧。最近公司将色谱工作站进行了升级&#xff0c;采…

oss图片尺寸调用方式_是时候来一场轰轰烈烈的OSS升级了

【摘要】伴随5G和云网部署的持续推进&#xff0c;运营商OSS升级建设都已经在不断加速。| 科 | 技 | 杂 | 谈 |中国通信行业第一自媒体【1】运营商的IT支撑系统&#xff0c;正迫切需要新一轮的调整转型。今天&#xff0c;中国移动在2020全球合作伙伴大会上宣布&#xff0c;全球最…

由C过渡到C++-入门知识点

从C语言过渡到C&#xff0c;这些知识点应该是比较重要的。 目录 第一个C程序名称空间特性coutcin 缺省参数重载提问&#xff1a;为什么C语言不支持重载而C支持 引用常引用 引用与函数返回值对于指针和引用的区别引用的底层实现两者在语法上两者在物理上两者的不同之处 内联函数…

gdb pwndbg插件安装

环境&#xff1a; gdb 9.2ubuntu 20(x64) 连接 pwndbggdb9.2gdb9.2网盘连接 密码: kaq4GDB中文教程 编译gdb 由于发行的gdb比较老&#xff0c;pwndbg建议使用高版本GDB&#xff0c;因此我们下载最新的GDB9.2 安装依赖 #apt install texinfo解压GDB,卸载自带GDB #tar -vxf…

Android--UI之DatePicker、TimePicker...

前言 这一篇博客分别讲解Android平台下&#xff0c;关于日期和时间的几个相关控件。包括DatePicker&#xff08;日期选择控件&#xff09;、TimePicker&#xff08;时间选择控件&#xff09;、DatePickerDialog&#xff08;日期选择对话框&#xff09;、TimePickerDialog&#…

DPDK 18 log日志系统使用

概述&#xff1a; DPDK 日志系统分为1-8个等级&#xff0c;在lib/librte_eal/common/include/rte_log.h文件中定义&#xff0c;每个DPDK模块都可以定义一个预设日志输出等级&#xff0c;只有日志输出语句的等级小于等于预设输出等级才能被输出。 以下为dpdk对日志的分级&…

递归和迭代路由_静态路由在以太网接口中的不同书写会导致路由器怎样的操作结果?...

各位小伙伴们&#xff1a;大家好&#xff01;上一节和大家分享了在不同类型的网络中应该使用什么样的静态路由配置命令&#xff1b;今天我们再来看看在常见的多路访问(MBA)网络——以太网中&#xff0c;静态路由的不同书写方式将导致路由器执行那些不同的操作。如下图&#xff…

实验报告三

学 号 201521440010 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告 实验三 密码破解技术 学生姓名 邱景丛 年级 2015 区队 四 指导教师 高见 信息技术与网络安全学院 2016年11月7日 实验任务总纲 2016—2017 学年 第 一 …

设计前沿:25个设计师向您展示 iOS 7 界面

我们中的许多人都对新发布的 iOS 7 用户界面有点失望。扎眼的颜色搭配&#xff0c;难看的图标和可疑的设计决策&#xff0c;导致很多的设计师在 Dribbble 和 Behance 等社交网站分享自己对 iOS 界面设计的诠释。这篇文章集合了一些伟大的想法&#xff0c;改进苹果 iOS 7 的界面…

开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

目录 合作案例专栏&#xff1a;案例分享 开发专栏&#xff1a;项目实战 Qt开发专栏&#xff1a;开发技术 Qt开发专栏&#xff1a;三方库开发技术 Qt开发专栏&#xff1a;实用技巧 Qt开发专栏&#xff1a;各种问题解决 Qt开发专栏&#xff1a;qss样式表笔记大全 Qt开发专…

dpdk 18 ixgbe驱动初始化分析

rte_log_set_global_level rte_log_set_global_level(uint32_t level) pci bus注册 TE_REGISTER_BUS(pci, rte_pci_bus.bus); drivers/bus/pci/pci_common.c ,注册静态的设置rte_pci_bus&#xff0c;在rte_pci_bus中设置了pci bus的各个回调函数 struct rte_pci_bus rte_pc…

ATM + 购物商城程序

模拟实现一个ATM 购物商城程序 额度 15000或自定义 实现购物商城&#xff0c;买东西加入 购物车&#xff0c;调用信用卡接口结账 可以提现&#xff0c;手续费5% 每月22号出账单&#xff0c;每月10号为还款日&#xff0c;过期未还&#xff0c;按欠款总额 万分之5 每日计息 …

esp8266 擦拭_【一起玩esp8266】flash的擦除方法——专治疑难杂症

出现新问题。。。COM口没法操作 拒绝访问C:\Users\Administrator\AppData\Local\Programs\Python\Python35-32\Scripts>esptool.py --port COM6 erase_flashesptool.py v2.3.1Traceback (most recent call last):File "C:\Users\Administrator\AppData\Local\Programs\…